~franz/f-a.nz

b76728b3879686d96f1effb7fb98583442ff28b5 — Franz Geffke 3 years ago e52c0c0
Minor changes, overdue commit
123 files changed, 3531 insertions(+), 194 deletions(-)

A .comments.html
A _clients/aee-technology-germany.md
A _clients/lingel.md
A _data/crypto.json
A _data/mutual-investment-fund.csv
A _data/places.csv
A _data/unofficial-litecoin-roadmap-2017.csv
M _dev/2017/app-is-damaged-and-cant-be-opened.md
M _dev/2017/backup-remote-server-with-rsync-on-macos-and-linux.md
M _dev/2017/expressionengine-mysql-5.7-this-is-incompatible-with-distinct.md
A _dev/2017/install-a-segwit-litecoin-node-on-ubuntus.md
M _dev/2017/running-a-full-UASF-litecoin-node-on-ubuntu.md
M _dev/2017/update-macos-rsync-with-homebrew.md
M _gist/2014/2014-01-07-is-facebook-an-effective-marketing-tool-for-your-business.markdown
M _gist/2015/2015-03-18-the-largest-expressionengine-sites.md
M _gist/2015/2015-03-25-inbound-marketing-how-to-get-started-in-5-minutes.md
M _gist/2015/2015-04-10-your-own-real-estate-website-does-not-have-to-cost-a-fortune-expressionengine-development.md
M _gist/2015/2015-04-13-calculate-inbound-marketing-lead-acquisition-cost-savings-vs-ppc-advertising.md
M _gist/2015/2015-05-02-reach-your-twitter-target-audience-at-the-right-time.md
M _gist/2015/2015-05-09-the-4-stages-of-a-successful-inbound-marketing-campaign.md
A _gist/2017/.paper-cryptocurrency.md
A _gist/2017/a-closer-look-at-ripple-xrp.md
A _gist/2017/a-quick-look-ledger-nano-s-crypto-hardware-wallet.md
M _gist/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining.md
M _gist/2017/ethereum-gpu-mining-on-aws-ec2-in-2017.md
M _gist/2017/install-these-two-privacy-enhancing-browser-plugins.md
A _gist/2017/onegram-ico.md
A _gist/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3.md
M _gist/2017/start-using-a-vpn.md
A _gist/2017/unofficial-litecoin-roadmap-2017.md
A _includes/about_featured.html
M _includes/footer.html
M _includes/header.html
M _includes/mobile-nav.html
M _includes/nav.html
M _includes/page-sidebar-nav.html
A _includes/related.html
M _includes/welcome_referral.html
M _layouts/ly_flex.html
M _layouts/page.html
M _layouts/post.html
A _layouts/resume.html
D _work/.filtafry-erp.md
A _work/aee-action-cam-packaging-design.md
A _work/aee-drone-packaging-design.md
M _work/filtafry-franchisee-website.md
M _work/filtafry-website.md
M _work/fitaseal-erp.md
M _work/fitaseal-website.md
A _work/lingel-website.md
M _work/malaysian-german-society.md
M _work/onair-website.md
M _work/panther-alpha-kickstarer.md
M _work/panther-alpha-website.md
M _work/q-windows-adwords.md
M _work/q-windows-website.md
M _work/sky-hype-real-estate-portal.md
M about.md
A assets/bg/home_7.jpg
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_01.png
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_02.png
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_03.png
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_04.png
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_01.png
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_02.png
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_03.png
A assets/content/2017/litecoin-roadmap-2016.pdf
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_01.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_03.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_04.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_05.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_06.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_07.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_08.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_09.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_10.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_11.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_12.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_13.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_14.png
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_15.png
A assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_01.png
A assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_02.png
M assets/css/_custom.scss
A assets/css/_mapbox-gl.scss
A assets/css/commented.min.css
A assets/css/comments.css
M assets/css/main.scss
A assets/images/404.png
A assets/images/clients/aee.png
A assets/images/clients/lingel.png
A assets/images/gnp-logo.png
A assets/images/projects/aee-01.jpg
A assets/images/projects/aee-02.jpg
A assets/images/projects/aee-03.jpg
A assets/images/projects/aee-04.jpg
A assets/images/projects/aee-05.jpg
A assets/images/projects/aee-06.jpg
A assets/images/projects/aee-07.jpg
A assets/images/projects/lingel-01.jpg
A assets/images/projects/original/q-windows-14.jpg
A assets/images/projects/preview/q-windows-14.jpg
A assets/images/projects/q-windows-14.jpg
A assets/js/Chart.bundle.min.js
A assets/js/clndr.min.js
A assets/js/comments.js
A assets/js/demo.js
A assets/js/jquery.timeago.min.js
A assets/js/mapbox-gl.js
A assets/js/mapbox.js
A assets/js/md5.min.js
A assets/js/showdown-xss-filter.js
A assets/js/showdown.min.js
A assets/js/xss.min.js
M bitcoin.md
A bookshelf.md
M contact.html
A crypto-calendar.html
M error.html
M index.md
A mutual-investment-fund.md
M portfolio.html
A resume.md
A .comments.html => .comments.html +9 -0
@@ 0,0 1,9 @@
---
title: Comments
layout: post
bg: contact
map: "5.4029947, 50.7109835"
permalink: /comments_test/
---

<div data-firebase="comments-f-a" data-auth="github" data-slug="{{ post.slug }}" id="commented-main"></div>

A _clients/aee-technology-germany.md => _clients/aee-technology-germany.md +21 -0
@@ 0,0 1,21 @@
---
layout: page_sidebar
title:  "AEE Germany"
date:   2015-06-01 00:00:00 +0200
client: "aee"
introduction: "AEE is one of the worldwide leading drone and action camera manufacturers."
city: München
country: Germany
map: "11.5599013,48.14756"
web: de.aee.com
categories: digital
since: 2015
color: "#009fc3"
cover: aee-01.jpg
bg: roman-kraft
---

Filtafry is a young, innovative franchise from Germany. I have been working with Filtafry from the very start, helping them develop their website, unified franchisee sub-sites with individual domains as well as a company-wide ERP (enterprise resource planning) system that helps coordinating efforts company wide.


 AEE is a pioneer in combining wireless audio and video transmission technology as well as image processing and intelligent control technology. AEE products are distributed worldwide in over 55 countries and regions across major retail chain outlets. 

A _clients/lingel.md => _clients/lingel.md +16 -0
@@ 0,0 1,16 @@
---
layout: page_sidebar
title:  "Lingel Windows"
date:   2017-07-31 00:00:00 +0200
client: "lingel"
introduction: "Established in 1959 in Germany, Karl Lingel Fensterbau Gmbh & Co. KG is today one of the leading manufacturers of high quality doors and windows in Europe."
city: Lichtenstein
country: Germany
map: "12.6001357,50.7526628"
web: www.lingelwindows.com
categories: digital
since: 2014
color: "#bd1b25"
cover: sky-hype-04.jpg
bg: switzerland
---

A _data/crypto.json => _data/crypto.json +82 -0
@@ 0,0 1,82 @@
[
    {
        "title": "Cleanup EC2",
        "backgroundColor": null,
        "description": "Images in N. Virginia",
        "start": "2017-04-07T09:00:00+02:00",
        "end": "2017-04-07T10:00:00+02:00",
        "url": null
    },
    {
        "title": "ETF Deadline",
        "backgroundColor": null,
        "description": null,
        "start": "2017-03-30T09:00:00+02:00",
        "end": "2017-03-30T10:00:00+02:00",
        "url": null
    },
    {
        "title": "Claim Lumen",
        "backgroundColor": null,
        "description": "\nhttps://www.stellar.org/blog/bitcoin-claim-lumens-2/",
        "start": "2017-06-27T09:00:00+02:00",
        "end": "2017-06-27T10:00:00+02:00",
        "url": null
    },
    {
        "title": "Claim Lumen",
        "backgroundColor": null,
        "description": "\nhttps://www.stellar.org/blog/bitcoin-claim-lumens-2/",
        "start": "2017-06-26T09:00:00+02:00",
        "end": "2017-06-26T10:00:00+02:00",
        "url": null
    },
    {
        "title": "LTC Segwit",
        "backgroundColor": null,
        "description": null,
        "start": "2017-05-10T09:00:00+02:00",
        "end": "2017-05-10T10:00:00+02:00",
        "url": null
    },
    {
        "title": "Winklevoss Bitcoin ETF (COIN)",
        "backgroundColor": null,
        "description": "In the meantime, a decision from the U.S. Securities and Exchange Commission (SEC) regarding the Winklevoss Bitcoin ETF (COIN) is due on the 11th March. The ETF is expected to do for bitcoin what the SPDR ETF did for the gold market. The COIN ETF is expected to provide wider access to the bitcoin market, as large managed funds are often unable to buy the underlying asset directly.\nhttp://bravenewcoin.com/news/bitcoin-price-analysis-sec-in-control/",
        "start": "2017-03-11T09:00:00+01:00",
        "end": "2017-03-11T10:00:00+01:00",
        "url": null
    },
    {
        "title": "https://www.mona.co/",
        "backgroundColor": null,
        "description": null,
        "start": "2017-05-18T09:00:00+02:00",
        "end": "2017-05-18T10:00:00+02:00",
        "url": null
    },
    {
        "title": "Storj ICO",
        "backgroundColor": null,
        "description": null,
        "start": "2017-05-17T09:00:00+02:00",
        "end": "2017-05-17T10:00:00+02:00",
        "url": null
    },
    {
        "title": "Consensus",
        "backgroundColor": "NYC",
        "description": null,
        "start": "2017-05-22",
        "end": "2017-05-25",
        "url": null
    },
    {
        "title": "BCAP",
        "backgroundColor": null,
        "description": "https://tokenhub.com/ico/29",
        "start": "2017-04-10T15:00:00+02:00",
        "end": "2017-04-10T16:00:00+02:00",
        "url": null
    }
]

A _data/mutual-investment-fund.csv => _data/mutual-investment-fund.csv +42 -0
@@ 0,0 1,42 @@
date,rate
08.05.2017,0.5715
09.05.2017,0.6165
10.05.2017,0.6364
11.05.2017,0.6382
12.05.2017,0.5933
13.05.2017,0.6189
14.05.2017,0.6170
15.05.2017,0.6315
16.05.2017,0.6312
17.05.2017,0.6604
18.05.2017,0.6805
19.05.2017,0.7126
20.05.2017,0.7290
21.05.2017,0.7555
22.05.2017,0.7562
23.05.2017,0.8561
24.05.2017,0.9590
25.05.2017,1.0064
26.05.2017,0.8275
27.05.2017,0.7505
28.05.2017,0.8
29.05.2017,0.86
30.05.2017,0.86
31.05.2017,0.88
01.06.2017,0.92
02.06.2017,0.91
03.06.2017,0.94
04.06.2017,0.94
05.06.2017,1.10
06.06.2017,1.05
07.06.2017,1.01
08.06.2017,1.02
09.06.2017,1.05
10.06.2017,1.07
11.06.2017,1.10
12.06.2017,1.08
13.06.2017,1.11
14.06.2017,1.05
15.06.2017,1.03
16.06.2017,1.11
17.06.2017,1.11

A _data/places.csv => _data/places.csv +8 -0
@@ 0,0 1,8 @@
year,city,country,latitude,longitude
2016,Istanbul,Turkey,41.0523584,28.9990102
2014,Tehran,Iran,35.6970118,51.2097344
2009 & 2013,Kuala Lumpur,Malaysia,3.0418273,101.5764371
2012,Bangkok,Thailand,13.7251097,100.3529192
2010,Beijing,China,39.9390731,116.1172752
2006,Singapore,Singapore,1.3150701,103.7069334
2000,Erfurt,Germany,50.964846,11.0187075

A _data/unofficial-litecoin-roadmap-2017.csv => _data/unofficial-litecoin-roadmap-2017.csv +13 -0
@@ 0,0 1,13 @@
date,news,link1t,link1,link2t,link2
01.05.2017,Litcoin now works with Bitcoin library for the .NET framework,NBitcoin on Github,https://github.com/MetacoSA/NBitcoin,As promised Litecoin can now be used with NBitcoin with the new nuget package NBitcoin.Litecoin,https://twitter.com/NicolasDorier/status/859139345151909891
03.05.2017,Coinbase adds support for Litecoin,,
10.05.2017,SegWit activation on Litecoin (Block 1201536),Notice for Litecoin mining pools regarding Segwit and CSV,https://litecoincore.org/ltc-segwit-pool.pdf
10.05.2017,mSIGNA adds Litecoin support,mSigna Homepage,https://ciphrex.com/litecoin.php,Twitter,https://twitter.com/Ciphrex/status/862327976368586752
N/A,Initial production run of Lightning on Litecoin,The Litening Network: Litecoin Support in LND,http://lightning.community/release/software/lnd/lightning/2017/05/03/litening/,Litecoin Has Now Deployed Segregated Witness,http://www.nasdaq.com/article/litecoin-has-now-deployed-segregated-witness-cm787577
N/A,Lightning Network activation,Part 1 Building a Bidirectional Bitcoin Payment Channel,https://bitcoinmagazine.com/articles/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791/
N/A,Confidential Transactions,Confidential Transaction for Litecoin,https://litecointalk.io/t/confidential-transaction-for-litecoin/69,We're working on Confidential Transaction for a future release of Litecoin.,https://litecointalk.io/t/anonimity-features-zcash-integration/45/5
N/A,Smart Contracts Solution (MAST),The Next Step to Improve Bitcoin’s Flexibility Scalability and Privacy Is Called MAST,https://bitcoinmagazine.com/articles/the-next-step-to-improve-bitcoin-s-flexibility-scalability-and-privacy-is-called-mast-1476388597/,Twitter,https://twitter.com/johnsonlau01/status/854213772684046337
N/A,Schnorr signatures,The Power of Schnorr: The Signature Algorithm to Increase Bitcoin's Scale and Privacy,https://bitcoinmagazine.com/articles/the-power-of-schnorr-the-signature-algorithm-to-increase-bitcoin-s-scale-and-privacy-1460642496/
N/A,TumbleBit,Better Bitcoin Privacy Scalability: Developers Making TumbleBit a Reality,https://bitcoinmagazine.com/articles/better-bitcoin-privacy-scalability-developers-are-making-tumblebit-reality/
N/A,Port Litecoin to Lamassu ATMs,Core Development Team Release 2016 Roadmap,/assets/content/2017/litecoin-roadmap-2016.pdf
N/A,LiteVault V2 multi-signature and BTC-LTC conversion,Litevault,https://www.litevault.net/

M _dev/2017/app-is-damaged-and-cant-be-opened.md => _dev/2017/app-is-damaged-and-cant-be-opened.md +4 -1
@@ 6,7 6,10 @@ os:
  - macOS
source:
date: 2017-01-01 00:00:00 +0200
categories: dev
category:
  - troubleshooting
tags:
  - macOS
---

If you've seen this error more frequently in recent months: Welcome to macOS Sierra and the future of personal computing. What's happening here is, that Gatekeeper, a security feature that's been around since Mac OS X 10.7.5, is a lot more aggressive since Sierra.

M _dev/2017/backup-remote-server-with-rsync-on-macos-and-linux.md => _dev/2017/backup-remote-server-with-rsync-on-macos-and-linux.md +7 -1
@@ 7,7 7,13 @@ os:
  - Linux
source:
date: 2017-01-01 00:00:00 +0200
categories: dev
category:
  - development
  - backup
tags:
  - backup
  - macOS
  - linux
---

Rsync is perfect to incrementally backup a remote server on macOS or Linux:

M _dev/2017/expressionengine-mysql-5.7-this-is-incompatible-with-distinct.md => _dev/2017/expressionengine-mysql-5.7-this-is-incompatible-with-distinct.md +5 -1
@@ 7,7 7,11 @@ os:
  - Linux
source:
date: 2017-01-01 00:00:00 +0200
categories: dev
category:
  - development
tags:
  - 'expression engine'
  - mysql
---

If you've just tried running ExpressionEngine 2.9.2+ on MYSQL 5.7... This is what happened:

A _dev/2017/install-a-segwit-litecoin-node-on-ubuntus.md => _dev/2017/install-a-segwit-litecoin-node-on-ubuntus.md +155 -0
@@ 0,0 1,155 @@
---
title: "How-To ready your Litecoin node for SegWit on Ubuntu"
layout: post
os:
  - Linux
date: 2017-05-04 00:00:00 +0200
category:
  - development
  - cryptocurrency
tags:
  - litecoin
  - development
  - ubuntu
  - linux
  - segwit
---

## Minimum Requirements

- (Ubuntu) Linux System with 2GB+ RAM
- 16GB free disk space (current DB size 7.48 GB, April 17)
- Broadband internet

For AWS EC2 based servers, I recommend type t2.small (1vCPU, 2GB) with 20GB of instance storage.

## Instructions

### Update Ubuntu

Before you do anything, make sure Ubuntu system is up to date:

`sudo apt-get update -y && sudo apt-get upgrade -y && sudo reboot`

### Set-up Litecoin Node

If you haven't set-up Litecoin yet, now is a good time: [How-To set-up a UASF / SegWit ready Litecoin node on Ubuntu](/dev/running-a-full-UASF-litecoin-node-on-ubuntu). If you're already running a Litecoin node, proceed below.

#### 1) Check your Litecoin version

`./[path-to-litecoin-cli]/litecoin-cli getnetworkinfo`

    {
      "version": 130200,
      "subversion": "/Satoshi:0.13.2/",
      "protocolversion": 70015,
      "localservices": "000000000000000d",
      "localrelay": true,
      "timeoffset": 0,
      "connections": 8,
      "networks": [
        {
          "name": "ipv4",
          "limited": false,
          "reachable": true,
          "proxy": "",
          "proxy_randomize_credentials": false
        },
        {
          "name": "ipv6",
          "limited": false,
          "reachable": true,
          "proxy": "",
          "proxy_randomize_credentials": false
        },
        {
          "name": "onion",
          "limited": true,
          "reachable": false,
          "proxy": "",
          "proxy_randomize_credentials": false
        }
      ],
      "relayfee": 0.00100000,
      "localaddresses": [
      ],
      "warnings": ""
    }

Based on this output, we can verify that we're running Litecoin version 0.13.2. If you're running Litecoin 0.13.1 or later, your node already supports SegWit - proceed with 2). If you're running 0.13.0 or below, it's time to upgrade: [How-To set-up a UASF / SegWit ready Litecoin node on Ubuntu](/dev/running-a-full-UASF-litecoin-node-on-ubuntu).

#### 2) Add UASF signaling

`mkdir ~/.litecoin && echo "uacomment=UASF-SegWit-BIP148" >> ~/.litecoin/litecoin.conf`

#### 3) Autolaunch

`crontab -e`

Simply add the following line at the bottom of your crontab and exit with CTRL+C.

`@reboot /[path-to-litecoind]/litecoind -daemon`

#### 4) Reboot

`sudo reboot`

After the reboot, simply enter `top` in your terminal. The process `litecoind` should be listed at the top, with a CPU consumption of up to 99.9%. At this point, the node is synchronising the blockchain.

#### 6) Verify

As a last step, we'll need to verify that our Litecoin node is signaling SegWit / UASF.

`./[path-to-litecoin-cli]/litecoin-cli getnetworkinfo`

Here's what you should be looking for:

    {
      "version": 130200,
      "subversion": "/Satoshi:0.13.2(UASF-SegWit-BIP148)/",
      "protocolversion": 70015,
      "localservices": "000000000000000d",
      "localrelay": true,
      "timeoffset": 0,
      "connections": 8,
      "networks": [
        {
          "name": "ipv4",
          "limited": false,
          "reachable": true,
          "proxy": "",
          "proxy_randomize_credentials": false
        },
        {
          "name": "ipv6",
          "limited": false,
          "reachable": true,
          "proxy": "",
          "proxy_randomize_credentials": false
        },
        {
          "name": "onion",
          "limited": true,
          "reachable": false,
          "proxy": "",
          "proxy_randomize_credentials": false
        }
      ],
      "relayfee": 0.00100000,
      "localaddresses": [
      ],
      "warnings": ""
    }

Based on this output, we can verify that we're signaling UASF `0.13.2(UASF-SegWit-BIP148)` and that our node is connected to the internet via ipv4 and ipv6.

#### 7) Open Ports

Finally, make sure that port 8333 is open. There are some great, easy to follow instructions on [bitcoin.org](https://bitcoin.org/en/full-node#enabling-connections).

#### Running nodes

_Last update: 2017-04-10_

`52.59.225.35` - (BTC) Satoshi:0.13.2(UASF-SegWit-BIP148)
<br>`54.93.180.33` - (LTC) Satoshi:0.14.0(UASF-SegWit-BIP148)

M _dev/2017/running-a-full-UASF-litecoin-node-on-ubuntu.md => _dev/2017/running-a-full-UASF-litecoin-node-on-ubuntu.md +9 -7
@@ 1,10 1,17 @@
---
title: "How-To run a UASF Litecoin Node on Ubuntu"
title: "How-To set-up a UASF / SegWit ready Litecoin node on Ubuntu"
layout: post
os:
  - Linux
date: 2017-04-10 00:00:00 +0200
categories: dev
category:
  - development
  - cryptocurrency
tags:
  - litecoin
  - development
  - ubuntu
  - linux
---

## Minimum Requirements


@@ 106,11 113,6 @@ Based on this output, we can verify that we're signaling UASF `0.13.2(UASF-SegWi

Finally, make sure that port 8333 is open. There are some great, easy to follow instructions on [bitcoin.org](https://bitcoin.org/en/full-node#enabling-connections).


### Comments and donations

If you have a comment / question / idea / run your own node, drop me a mail at [litecoin@f-a.nz](mailto:litecoin@f-a.nz) or send me a tweet [twitter.com/f_anzs](https://twitter.com/f_anzs). For donations, use `LXaRSNPEazHZzZ48YdVYiumV9dvmSeQw3C` (LTC) and `17HXMSFuxbZ4cScKif4fj5QtESz8HdZ7Bo` (BTC).

#### Running nodes

_Last update: 2017-04-10_

M _dev/2017/update-macos-rsync-with-homebrew.md => _dev/2017/update-macos-rsync-with-homebrew.md +5 -1
@@ 6,7 6,11 @@ os:
  - macOS
source: https://stackoverflow.com/questions/30842005/upgrading-rsync-on-os-x-using-homebrew
date: 2017-01-01 00:00:00 +0200
categories: dev
category:
  - development
tags:
  - development
  - macOS
---

Here's a joke: Apple ships 10 year old software with macOS.

M _gist/2014/2014-01-07-is-facebook-an-effective-marketing-tool-for-your-business.markdown => _gist/2014/2014-01-07-is-facebook-an-effective-marketing-tool-for-your-business.markdown +5 -2
@@ 3,8 3,11 @@ layout: post
title:  "Is Facebook an effective marketing tool for your business?"
date:   2014-01-07 08:00:00
category:
- Social Media
- Inbound Marketing
  - marketing
tags:
  - 'social media'
  - 'inbound marketing'
  - twitter
excerpt: "In a survey published in 2013, 73% of Retail / Wholesale / Consumer Goods companies responded that they have acquired a customer using a lead from Facebook."
cover: is-facebook-an-effective-marketing-tool-for-your-business.jpg
---

M _gist/2015/2015-03-18-the-largest-expressionengine-sites.md => _gist/2015/2015-03-18-the-largest-expressionengine-sites.md +5 -1
@@ 2,7 2,11 @@
layout: post
title:  "The 20 Largest ExpressionEngine Sites"
date:   2015-03-18 08:00:00
category: Development
category:
  - development
tags:
  - 'expression engine'
  - development
excerpt: "All of the 20 largest ExpressionEngine sites are based in the United States."
cover: the-20-largest-expressionengine-sites-2015.jpg
author: Franz Geffke

M _gist/2015/2015-03-25-inbound-marketing-how-to-get-started-in-5-minutes.md => _gist/2015/2015-03-25-inbound-marketing-how-to-get-started-in-5-minutes.md +3 -4
@@ 3,11 3,10 @@ layout: post
title:  "Inbound Marketing How-To: Getting Started in 5 Minutes"
date:   2015-03-25 08:00:00
category:
  - Social Media
  - Inbound Marketing
  - marketing
tags:
  - 'Inbound Marketing'
  - 'How-To'
  - 'social media'
  - 'inbound marketing'
excerpt: "If you are a busy person, and I’m sure you are, this how-to will help you get started with Inbound Marketing without spending too much of your valuable time AND money."
cover: inbound-marketing-how-to-get-started-in-5-minutes.jpg
author: Franz Geffke

M _gist/2015/2015-04-10-your-own-real-estate-website-does-not-have-to-cost-a-fortune-expressionengine-development.md => _gist/2015/2015-04-10-your-own-real-estate-website-does-not-have-to-cost-a-fortune-expressionengine-development.md +6 -2
@@ 3,8 3,12 @@ layout: post
title:  "Here's Why Your Own Real Estate Website Doesn't Have To cost a Fortune"
date:   2015-04-10 08:00:00
category:
- Development
- Business
  - development
  - business
tags:
  - development
  - 'expression engine'
  - 'real estate'
excerpt: "If you are in the real estate business, you know how important it is to get your properties noticed. With the help of ExpressionEngine, we can built your dream real estate website within your budget."
cover: your-own-real-estate-website-does-not-have-to-cost-a-fortune-expressionengine-development.jpg
newsletter: false

M _gist/2015/2015-04-13-calculate-inbound-marketing-lead-acquisition-cost-savings-vs-ppc-advertising.md => _gist/2015/2015-04-13-calculate-inbound-marketing-lead-acquisition-cost-savings-vs-ppc-advertising.md +6 -4
@@ 3,11 3,13 @@ layout: post
title:  "Calculate Inbound Marketing Lead Acquisition Cost Savings vs. PPC Advertising"
date:   2015-04-13 08:00:00
category:
  - Inbound Marketing
  - Productivity
  - marketing
  - advertising
  - business
  - growth
tags:
  - 'Inbound Marketing'
  - 'Lead Acquisition Cost'
  - 'inbound marketing'
  - 'ppc'
excerpt: "Easily calculate and compare the cost to acquire a lead via inbound marketing compared to traditional channels such as PPC (pay per click)."
cover: calculate-inbound-marketing-lead-acquisition-cost-savings-vs-ppc-advertising.jpg
newsletter: true

M _gist/2015/2015-05-02-reach-your-twitter-target-audience-at-the-right-time.md => _gist/2015/2015-05-02-reach-your-twitter-target-audience-at-the-right-time.md +4 -4
@@ 3,11 3,11 @@ layout: post
title:  "3 Steps: How To Reach Your Twitter Target Audience At The Right Time"
date:   2015-05-02 08:00:00
category:
  - Inbound Marketing
  - Social Media
  - marketing
  - business
tags:
  - 'Social Media'
  - 'Inbound Marketing'
  - 'social media'
  - 'inbound marketing'
excerpt: "Here's how you make sure that your tweets are seen and reach the maximum number of people."
cover: reach-your-twitter-target-audience-at-the-right-time.jpg
newsletter: true

M _gist/2015/2015-05-09-the-4-stages-of-a-successful-inbound-marketing-campaign.md => _gist/2015/2015-05-09-the-4-stages-of-a-successful-inbound-marketing-campaign.md +4 -2
@@ 3,9 3,11 @@ layout: post
title:  "The 4 Stages of a Successful Inbound Marketing Campaign"
date:   2015-05-09 08:00:00
category:
  - Inbound Marketing
  - marketing
  - business
  - growth
tags:
  - 'Inbound Marketing'
  - 'inbound marketing'
excerpt: "Here's how you make sure that your tweets are seen and reach the maximum number of people."
cover: inbound-marketing-4-step-how-to-guide.jpg
newsletter: true

A _gist/2017/.paper-cryptocurrency.md => _gist/2017/.paper-cryptocurrency.md +24 -0
@@ 0,0 1,24 @@
---
title: "Thought of today: Paper Cryptocurrency"
layout: post
source:
date: 2017-04-03 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - fiat
  - currency
bg: ferdinand-stohr
bg-author: Ferdinand Stohr
author: Franz Geffke
---

We're all aware of the fact that cryptocurrency such as Bitcoin, Litecoin or Ethereum only carry value, if there's a demand for it. Much like a $100 USD bill buys you $100 USD worth of stuff, so does ,068119891 Bitcoin (1 BTC = $1468 USD). The huge difference between what we call fiat money (USD, EUR, JPY) and cryptocurrency (BTC, LTC, ETH), is that unlike the cryptocurrency, it's easy to spend that $100 USD bill.

For now, the biggest challenge that remains is to get cryptocurrency in the hands of ordinary people, in a format that they can work with. Anybody who ever moved to a different country, understands what it means to adapt to a new currency. Lucky you, if the rate is something easy to break down - like 1:10. A bread that may cost $3 USD at home, is suddenly 3,600 FC (foreign currency), and the cab ride around town doesn't cost $18 USD but 21,000 FC. Imagine what will happen, if your bakery starts charging for the bread in Bitcoin: Due to volatile markets, today it may cost ,002043597 BTC and tomorrow ,002443597 BTC - that's not something the average person could break down, in order to determine potential price changes, or even to compare different products.

Cost of $1 USD milk in Bitcoin
3rd May 2017 - 0.000681198910082
1 month ago - 0.000878734622144
2 months ago - 0.00078431372549

A _gist/2017/a-closer-look-at-ripple-xrp.md => _gist/2017/a-closer-look-at-ripple-xrp.md +95 -0
@@ 0,0 1,95 @@
---
title: "A closer look at Ripple XRP"
layout: post
source:
date: 2017-05-07 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - ripple
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

Over the past couple of weeks, Ripple XRP has seen a 20x surge in market cap, fueled by new banking partnerships, and renewed interest from investors.

<img alt="Ripple cost savings" class="stock" src="/assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_01.png">

### XRP growth

| Date  | Market Cap     | Supply             | Volume (24h) | Price     |
|-------|----------------|--------------------|--------------|-----------|
| 05.03 | $236,342,055   | 37,406,829,143 XRP | $951,998     | $0.006318 |
| 02.04 | $928,867,446   | 37,388,960,792 XRP | $31,735,912  | $0.024843 |
| 07.05 | $4,781,112,493 | 37,955,579,225 XRP | $173,069,000 | $0.125966 |

### XRP volume by exchange

Over 77% of all XRP trading happens on Poloniex, followed by 5.57% on Kraken and 3.26% on Bittrex.

| Exchange | Pair | Volume (24h) | Price | Volume |
|-------|----------------|--------------------|--------------|-----------|
| Poloniex | XRP/BTC | $129,093,000 | $0.122940 | 72.80% |
| Kraken | XRP/BTC | $9,880,580 | $0.124562 | 5.57% |
| Poloniex | XRP/BTC | $8,255,380 | $0.119286 | 4.66% |
| Bittrex | XRP/BTC | $5,777,520 | $0.125561 | 3.26% |

_07.05.2017 on coinmarketcap.com_

## Major difference to Bitcoin

Unlike Bitcoin, Ripple's main goal is to establish a global payment network, that allows banks to transfer value faster, cheaper and with less risk compared to traditional settlement networks.

### Ripple for banks

According to their website, banks can save between $3.48 USD and $38.18+ USD per transaction, depending on annual volume, and essentially their current system (failure rate, need for manual intervention, settlement time). You can have a look at the cost model on the [Ripple Website](https://ripple.com/cost-model/).

So, Ripple doesn't effectively need to reach the endusers, but works with financial institutions to reduce their cost. They don't need to convince anyone to trade their USD to BTC / ETH / LTC but much rather, they convince big banks to use their tech, to reduce their cost, to make more money. However, there's been much debate over whether these banks actually transact in XRP.

The following video takes a closer look at how settlement works and at which point the balances reflects in the ledger. The most important piece is the ILP ([Interledger Protocol](https://ripple.com/insights/implementing-the-interledger-protocol/)):

<div class="embed-responsive embed-responsive-16by9">
  <iframe class="embed-responsive-item" src="https://www.youtube.com/embed/5e2jDFL1kKI" allowfullscreen></iframe>
</div>

### Ripple for Enduser

With more banks joining the Ripple network, the enduser benefits from lower cost and faster value transfer. The network determines the best route, calculates fees and initiates funds transfer upon approval.

### XRP as investment

With more money pouring into crypto, XRP should remain an attractive option for both private and institutional investors.

- Supply is forever limited to 100,000,000,000 XRP
- Ripple plans to cross-sell XRP to add liquidity to the market
- Every transaction destroys 0.00001 XRP _(Visa handles on average 150 million / day. If Ripple reaches this scale, we would destroy 1,500 XRP / day, or 547,500 / year.)_

In Q1 alone, Ripple (XRP II) has sold over $6.7MM worth of XRP directly.

> In Q1 market participants purchased $6.7MM directly from XRP II, LLC*, Ripple’s registered and licensed money service business (MSB). These buyers tend to be institutional in nature and their purchases include restrictions that help mitigate the risk of market instability due to large subsequent sales. - ripple.com

More on that in the [Q1 2017 XRP Markets Report](https://ripple.com/insights/q1-2017-xrp-markets-report/)

#### XRP Supply

Worries among investors remain, as Ripple still holds the majority of the XRP. Should Ripple decide to release more XRP into the market, the value of current holdings would deprecate.

**In Circulation**: 37,955,579,225 XRP
<br>**Total supply**: 100,000,000,000 XRP

#### XRP lock-up (Rumor)

Rumors around the internet speak of the possible announcement of a permanent lock-up of a large number of XRP that remain under Ripples control. This would ease worries among investors, and ensure that XRP supply remains at current levels, with prospects for continued growth.

<blockquote class="twitter-tweet" data-cards="hidden" data-lang="en"><p lang="en" dir="ltr">Join a talk from <a href="https://twitter.com/justmoon">@justmoon</a>, the CTO of <a href="https://twitter.com/Ripple">@Ripple</a>, as he talks about different consensus mechanisms at <a href="https://twitter.com/hashtag/Consensus2017?src=hash">#Consensus2017</a>. <a href="https://t.co/0TijqCWV1O">https://t.co/0TijqCWV1O</a> <a href="https://t.co/v4SI2l9AWB">pic.twitter.com/v4SI2l9AWB</a></p>&mdash; CoinDesk (@coindesk) <a href="https://twitter.com/coindesk/status/859105209854906373">May 1, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

For more about this: [Ripple announcing lock-up next month](https://bitcointalk.org/index.php?topic=1904801.0) and [Locking up Ripple's XRP with Crypto Conditions](https://www.xrpchat.com/topic/3339-locking-up-ripples-xrp-with-crypto-conditions/?page=3#comment-32058)

### XRP resources

- [Ripple website](https://ripple.com/)
- [Ripple on reddit](https://www.reddit.com/r/Ripple/)
- [GateHub Ripple wallet](https://gatehub.net/)

A _gist/2017/a-quick-look-ledger-nano-s-crypto-hardware-wallet.md => _gist/2017/a-quick-look-ledger-nano-s-crypto-hardware-wallet.md +173 -0
@@ 0,0 1,173 @@
---
title: "A Quick Look at the Ledger Nano S Crypto Hardware Wallet"
layout: post
source:
date: 2017-05-05 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - ethereum
  - review
  - "crypto wallet"
bg: ferdinand-stohr
bg-author: Ferdinand Stohr
author: Franz Geffke
---

Today I received a new Ledger Nano S and it left quite an impression on me, so much that I needed to share it with the world: First of all, compared to the Ledger Nano (Bitcoin only), this thing is huge, heavy and ugly. Sure, even the Ledger Nano wasn't a beauty, but for 86 Euro (incl. Shipping) the S could have looked a little sharper.

Beauty aside, my primary concern is the secure storage of crypto currency, and the Ledger Nano (S) is supposed to do this well. Aside from Bitcoin, the S currently supports Litecoin, Ethereum (+ Asset Tokens like Melonport), Ethereum Classic, Dodge, Dash, Strais, ZCash and XRP.

## Impressions

![Ledger Nano S](/assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_04.png)
_Image by ledgerwallet.com_

### Build quality

The Ledger Nano S is nothing to go crazy over. It looks like a 2000-era USB stick with 16MB memory. While the casing is made of plastic, the metal cover does add some strength and covers display and USB port.

### Initial Setup

Compared to the Ledger Nano, the setup on the S feels archaic. In fact, you'll find yourself spending a lot of time dealing with the tiny display and two buttons on top.

Here's how it goes down:

1. Plugin the device, enter and confirm pin (up to 8 digits)
2. Copy your passphrase word by (click) word from the display
3. Download [Ledger Manager](https://www.ledgerwallet.com/apps/manager) - Chrome app
4. Manually delete and reinstall all apps to ensure they are up to date

Now it hit me: Out of storage - What? I had just installed two additional coin apps, to support ZCASH and DASH, but it won't take the third, STRAITS. There's no indication of remaining space - thoughts?

**Update:** Apparently the ST31H320 ARM core and flash memory has only 320 Kbytes of memory. That means, the number of apps you're able to install on the Ledger Nano S is limited.

<blockquote class="twitter-tweet" data-conversation="none" data-lang="en"><p lang="en" dir="ltr"><a href="https://twitter.com/f_anzs">@f_anzs</a> <a href="https://twitter.com/LedgerHQ">@LedgerHQ</a> That&#39;s about it yes, the SE (ST31H320) has 320K of storage space, restricting the number of apps that can be installed</p>&mdash; David Balland (@Morveus) <a href="https://twitter.com/Morveus/status/860793519396532224">May 6, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

### Official apps

Before you can access your crypto apps, you will need to install the corresponding application: [Ledger Waller Ethereum](https://www.ledgerwallet.com/apps/ethereum) for Ethereum and Ethereum Classic and [Ledger Wallet](https://www.ledgerwallet.com/wallet) for all remaining, officially supported coins.

At first sight, Ledger applications are great: Easy to use, responsive, well designed and open source.

#### Ledger Wallet

![Ledger Wallet](/assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_02.png)

#### Ledger Wallet Ethereum

![Ledger Wallet Ethereum](/assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_03.png)

### Usage

This is where it becomes awkward. Let's try to accomplish two easy tasks, and see where it takes us.

#### 1) Check Bitcoin balance

1. Plugin the device
2. Enter your PIN on the device (tiny buttons), everyone can see
3. Select the Bitcoin app on the Ledger Nano S
4. Launch the Chrome App Ledger Wallet Bitcoin
5. See your balance

#### 2) Transfer Ethereum

Now we're still in the Bitcoin app

1. Close the Chrome App
2. Close the Bitcoin app on the Ledger Nano S
3. Launch the Chrome App Ledger Wallet Ether app
4. Select the Ethereum app on the Ledger Nano S
5. Send Ethereum, confirm on Ledger Nano S (there's no real 2FA)

PIN entry aside, Why is this so complicated? I'd like to see a unified interface that presents me with all accounts and coins that are stored on the Ledger Nano S - like a portfolio, like Exodus!

![Exodus Software Crypto Wallet](/assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_01.png)

Looks gorgeous, doesn't it? That's what I want for my Ledger!

## Additional Apps

I've found additional apps for the Ledger Nano S. There's even an early beta of PGP and 2FA ala Google Authenticator. Cool stuff!

- Komodo (via Ledger Manager)
- SSH/PGP Agent (via Ledger Manager)
- Password Manager (via Ledger Manager)
- Open PGP (via Ledger Manager)
- [OTP 2FA App](https://parkerhoyes.com/bolos-apps) (HOTP 2FA)
- [Snake App](https://parkerhoyes.com/bolos-apps)

## Compatibility

The following apps / sites are compatible with the Ledger Nano S.

| Application | OS | Crypto | Open Source | Notes |
|---------------------------|------------|----------|--------------|
| [Ledger Waller Bitcoin](https://www.ledgerwallet.com/wallet) | Win, Linux, macOS | BTC, LTC, DOGE, DASH, ZEC, STRAT | [yes](https://github.com/LedgerHQ) | Chrome app |
| [Ledger Waller Ethereum](https://www.ledgerwallet.com/apps/ethereum) | Win, Linux, macOS | ETH, ETC | [yes](https://github.com/LedgerHQ) | Chrome app |
| [Ledger Waller Ripple](https://www.ledgerwallet.com/apps/ripple) | Win, Linux, macOS | XRP | [yes](https://github.com/LedgerHQ/ledger-wallet-ripple) | Chrome app |
| [MyEtherWallet](https://www.myetherwallet.com/) | Browser | ETC, ETC | [yes](https://github.com/kvhnuke/etherwallet) |  |
| [GreenAdress](https://greenaddress.it/) | Win, Linux, macOS, Android, iOS | BTC | [yes](https://github.com/greenaddress) | Chrome app |
| [GreenBits](https://ledger.groovehq.com/knowledge_base/topics/how-to-use-the-ledger-nano-with-greenaddress) | Browser | BTC |  |  |
| [Electrum](https://electrum.org/) | Win, Linux, macOS, Android | BTC | [yes](https://github.com/spesmilo/electrum) | Electron app |
| [Electrum LTC](https://electrum-ltc.org/) | Win, Linux, macOS | LTC | [yes](https://electrum-ltc.org/) | Electron app |
| [Mycelium](https://wallet.mycelium.com/) | Android, iOS | BTC |  |  |
| [Copay](https://copay.io/) | Win, Linux, macOS, Android, iOS | BTC | [yes](https://github.com/bitpay/copay/releases/tag/v3.1.3) |  |
| [BitGo](https://bitgo.zendesk.com/hc/en-us/articles/115000357746) | Browser | BTC | [yes](https://github.com/bitgo) |  |

## Comparison

### Ledger Nano

- BTC only
- Get [Ledger Wallet](https://www.ledgerwallet.com/apps/bitcoin) to access BTC
- Launch app, enter pin, done!
- Companion app [Ledger Authenticator](https://www.ledgerwallet.com/apps/bitcoin#get-the-apps) as 2FA for mobile
- or Security card 2FA
- You don't need a USB cable

### Ledger Nano S

- BTC, LTC, ETH, ETC, ZEC, XRP
- Get [Ledger Manager](https://www.ledgerwallet.com/apps/manager) to install apps to manage currency
- Get [Ledger Wallet](https://www.ledgerwallet.com/apps/bitcoin) to access BTC/ALT
- Get [Ledger Wallet Ethereum](https://www.ledgerwallet.com/apps/ethereum) to access ETH/ETC
- Get [Ledger Wallet Ripple](https://www.ledgerwallet.com/apps/ripple) to access XRP
- Custom Apps (Fido, U2F, [GPG](https://github.com/LedgerHQ/blue-app-ssh-agent), [SSH](https://github.com/LedgerHQ/blue-app-ssh-agent))
- Screen 2FA (no real 2FA) *[1]*
- You need a USB cable

I wish the Ledger Nano S was a little more like the little brother, with integrated USB, a lot smaller and equipped with 2FA companion app Ledger Authenticator.

*[1]* Unlike the Ledger Nano, the S allows you to confirm transactions on-screen. That means, if someone gets hold of your Ledger Nano S, incl. PIN, consider your money gone. I preferred doing this without display, using either the security card or companion app (just feels better).

## Roadmap

The [public roadmap](https://trello.com/b/5nQ1mdzt/ledger-roadmap) gives us a good idea what's to come:

- A Chrome App replacement based on Electron is in the works (since [end of 2016](https://trello.com/c/mf0aFgDK/28-chrome-applications-end-of-life))
- Ledger Wallet Android is in Alpha, more on [reddit](https://www.reddit.com/r/ledgerwallet/comments/47bti4/ledger_wallet_android_spv_alpha_release/) (no updates since [early 2016](https://github.com/LedgerHQ/ledger-wallet-android))
- Monero support received a lot of votes

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">By (massive) popular request, Ledger is going to announce XRP Ripple support for Nano S &amp; Blue in the coming days. Stay tuned! <a href="https://t.co/SadUkoZtus">pic.twitter.com/SadUkoZtus</a></p>&mdash; Ledger (@LedgerHQ) <a href="https://twitter.com/LedgerHQ/status/864395677475930112">May 16, 2017</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

**Update:** Support for XRP has been added.

## Links

Here's some other, related stuff I found useful:

- [Ledger on Slack](http://slack.ledger.co/)
- [Ledger on reddit](https://www.reddit.com/r/ledgerwallet/)
- [How to verify the security integrity of my Nano S?](http://support.ledgerwallet.com/knowledge_base/topics/how-to-verify-the-security-integrity-of-my-nano-s)
- [How to import / recover a backup on a Nano S?](http://support.ledgerwallet.com/knowledge_base/topics/how-to-import-slash-recover-a-backup-on-a-nano-s)
- [ST31H320 ST31 ARM Core and Flash memory](http://www.st.com/en/secure-mcus/st31h320.html)

## Final words

Overall, it's sort of like an MP3 player, before Apple made the first iPod. It does the job and keeps your crypto secure but I hope the new Electron based software they are working on, will collect the different cryptos under one roof.

Get one!

M _gist/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining.md => _gist/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining.md +9 -5
@@ 1,13 1,17 @@
---
title: "Economic impact of 31% Litecoin difficulty adjustment on mining"
layout: page
layout: post
source:
date: 2017-04-19 00:00:00 +0200
categories:
- mining
- litecoin
date: 2017-04-19 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - mining
  - litecoin
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

In about 19 hours (20/21 April), the Litecoin network difficulty will adjust by approximately 31%. In economic terms, that means that miners will earn roughly 31% less - just what sort of impact will this have on a bigger scale?

M _gist/2017/ethereum-gpu-mining-on-aws-ec2-in-2017.md => _gist/2017/ethereum-gpu-mining-on-aws-ec2-in-2017.md +43 -5
@@ 1,13 1,18 @@
---
title: "Ethereum GPU mining on AWS EC2 in 2017"
layout: page
layout: post
source:
date: 2017-01-01 00:00:00 +0200
categories:
- mining
- test
date: 2017-02-03 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - mining
  - aws
  - ethereum
bg: ferdinand-stohr
bg-author: Ferdinand Stohr
author: Franz Geffke
---

Cryptocurrency mining is as popular as ever, as it in theory allows you to turn idle computing resources into a passive income. The problem is, that these days you require extremely powerful, specifically optimized hardware as well as access to very cheap or even free electricity.


@@ 70,3 75,36 @@ After around a week of EC2 mining, I have now shut down all AWS server. The Spot
| 2017-02-12T02:21:34 | 3166292    | 3166838  | 2.1          | 0.09638 ETH |
| 2017-02-12T00:14:57 | 3165750    | 3166277  | 2.1          | 0.09927 ETH |
| 2017-02-11T22:10:29 | 3165252    | 3165747  | 1.9          | 0.09592 ETH |

<hr>

**Update: 2017-05-22**

As of today, Ethereum is valued at 1 ETH = 173.8 USD. However, due to enormous demand, EC2 spot pricing is nowhere near what I paid in early 2017. **Mining on AWS EC2 is and will remain unprofitable - forever.**

**Monthly cost**: $1860
<br>**Mining revenue**: $220 _(assuming 44 MH/s)_
<br>**Profit**: $ -1640

<hr>

**Update: 2017-07-09**

Ethereum dual-mining profitability comparison (late June 2017). Keep in mind that as more miners join the network, and the Ethereum price fluctuates, so will your payout / return of investment.

| Measured       | by Card | by Month | by Month DUAL | total DUAL    | % of Baseline |
|----------------|---------|----------|---------------|---------------|---------------|
| SIA            | 5770    | 1154     | 381 €         |               | 46.23%        |
| ZEC            | 1490.4  | 298.08   | 373 €         |               | 45.23%        |
| ETH            | 112     | 22.4     | 601 €         |               | 73.02%        |
| ETH (ZEC) Dual | 104     | 20.8     | 558 €         |               |               |   
| ZEC (ETH) Dual | 20.2    | 4.04     | 5 €           | 564 €         | 68.41%        |
| ETH (SIA) Dual | 103     | 20.6     | 553 €         |               |               |
| SIA (ETH) Dual | 4100    | 820      | 271 €         | 824 €         | 100.00%       |
| ETH (DEC) Dual | 109     | 21.8     | 585 €         |               |               |
| DEC (ETH) Dual | 3274    | 654.8    | 164 €         | 749 €         | 90.93%        |

<hr>

Appreciate the time I spend on this? Send a thanks to (ETH):
*0x031FE3346207DEF2EB9dDc4b19A621a85B554D9f*

M _gist/2017/install-these-two-privacy-enhancing-browser-plugins.md => _gist/2017/install-these-two-privacy-enhancing-browser-plugins.md +15 -5
@@ 1,13 1,17 @@
---
title: "Install these two privacy enhancing browser plugins"
layout: page
layout: post
source:
date: 2017-01-01 00:00:00 +0200
categories:
- privacy
- security
date: 2017-01-02 08:00:00 +0200
category:
  - Privacy
tags:
  - plugin
  - privacy
  - browser
bg: thomas-brault
bg-author: Thomas Brault
author: Franz Geffke
---

There are two browser plugins which I consider must-have's. Not only do they eliminate advertising and cut down on unnecessary tracking, they also help reduce the website's size and speed-up your internet connection AND make your browser more responsive.


@@ 29,3 33,9 @@ These plugins work on Chrome, Firefox and Safari (don't use Safari!)
[www.eff.org/privacybadger](https://www.eff.org/privacybadger): Blocks spying ads and invisible trackers.

{% include gist-image.html image="install-these-two-privacy-enhancing-browser-plugins_02.png" caption="Privacy Badger on Chrome" %}

<hr>

**Update: 2017-08-01**

Comparitech has published a detailed comparison of the various, free anti-tracking browser extentions. It's definitely worth checking out: [How to stop browser tracking: 6 free anti-tracking browser extensions](https://www.comparitech.com/blog/vpn-privacy/free-anti-tracking-browser-extensions/)

A _gist/2017/onegram-ico.md => _gist/2017/onegram-ico.md +105 -0
@@ 0,0 1,105 @@
---
title: "OneGram ICO - a close look"
layout: post
source:
date: 2017-05-14 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - onegram
  - ico
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

OneGram's ICO promises a cryptocurrency backed by Gold, stored at Dubai International Airport. At first a fantastic idea, after a close look, a rather shady set-up. Today I'm going to have a closer look at who's behind the ICO to try to determine the credibility of this project. I'm not going to pass judgement - this is just a collection of what I've found.

## OneGram Trail

- Website [onegram.org](https://onegram.org/) since December 2016
- Twitter account [OneGramNews](https://twitter.com/OneGramNews) since February 2017
- Facebook page [OneGramCoin](https://www.facebook.com/OneGramCoin) since February 2017
- Github Organization [OneGram](https://github.com/OneGramTech) with first commit on 18th February 2017, no code or technical documentation. Apparently a Matt Mili takes care of this.
- Reddit [OneGramOfficial](https://www.reddit.com/user/OneGramOfficial)
- Forum [Bitcointalk.org](https://bitcointalk.org/index.php?topic=1879433.0;all)

> The OneGram team manages the OGC protocol. GoldGuard runs the vault for physical gold. The two teams work closely together to ensure that the entire solution is seamless, well supported. - [source](https://onegram.org/faq/)

## OGC Token

- PoS (Proof Of Stake)
- Maximum supply of 12,400,786 OGC
- ICO on 21. May (up to 120 days)
- 10% Premium to cover cost
- Paid for with Gold purchased trough Goldguard (paid for by Bitcoin or Wire)

> Nearly 50 percent of the offering has been committed, Mohammed said. Tabarak Investment Bank, one of the largest in Dubai, will sell 100 million euros to its clients, while a similar amount is expected to be taken up by seven high networth individuals in OneGram's network. [source](https://www.nytimes.com/reuters/2017/05/03/technology/03reuters-onegram-blockchain-gold.html)

### Website registration

Domain: [onegram.org](https://onegram.org/)
<br>registered on 2016-12-06
<br>by Mohammed Khan, 334153 Dubai, AE

Mohammed Khan might be a relative of Ibrahim Khan who's listed as CEO of OneGram.

Email: onegrampress@gmail.com

#### 21mil.com

Domain: [21mil.com](http://21mil.com/)
<br>registered on 2016-11-12
<br>WHOIS privacy, Panama

The email listed on this site apparently belongs to Ferdous Bhai ([Twitter](https://twitter.com/ferdousbhai)), listed as Technical Team Lead of OneGram and CEO of 21MIL.

Email: ferdousbhai@protonmail.com

#### Matt Mili

Matthew Mili is listed as OneGram's Full Stack Developer.

Domain: [mattmili.com](http://www.mattmili.com/)
<br>registered on 2016-12-16
<br>WHOIS privacy, Panama

- [Github](https://github.com/mattmili) since September 2013
- [Instagram](https://www.instagram.com/downtoadventure/) - first post 2 weeks ago
- [Twitter](https://twitter.com/areyoufried) since September 2010

Email: mattmili@protonmail.com

#### Goldguard

> Gold Guard FZCO is launching next week, it is registered in Dubai, with a precious metals license to trade gold at the Dubai Airport Free Zone (DAFZ). We have agreements with ABX and Loomis. All the informations will be public, gold supply is audited by PwC and Bitpay did their due diligences on Gold Guard too. We provided all the right informations to all our partners including AML and KYC documents.

> The first step to participate in the ICO is to register with GoldGuard and purchase gold. Then the gold can be redeemed for OGC via the same platform. There is a fee of 10% charged during the purchase; this fee is expected as by purchasing OGC, the investor is not only purchasing an asset that offers the spot value of gold but also the future value of additional gold to be purchased from transaction fees. - [source](https://onegram.org/whitepaper/)

> Each OGCs are backed by 1g of gold (based on the spot price of your purchase). We are buying gold with our partners ABX and Goldguard instantly. Goldguard exchange is also doing the integration of Bitpay, so you'll be able to buy physical gold with bitcoins and redeem your OGC tokens. - [source](https://bitcointalk.org/index.php?topic=1879433.msg18695079#msg18695079)

> Physical gold is purchased through ABX and physically delivered within 3 days through Loomis and stored with Loomis in Dubai. There are no gold certificates because this is not ETF's this is physically owned goldABX will provide us supply connfirmation of how many grams of gold we have purchased and own.. This will tally up to financial records of payments made to ABX                       
which will be verified by PWC and the Shariah Advisory Audit. - [source](https://bitcointalk.org/index.php?topic=1884084.msg18751539#msg18751539)

> The gold bullion will be stored in high security vaults in the Dubai Airport Free Zone (DAFZA) on behalf of the Client by GoldGuard.

- [Facebook](https://www.facebook.com/GoldGuardDXB/)
- [Twitter](https://twitter.com/GoldGuardDXB) since April 2017, no posts

Domain: [goldguard.com](https://goldguard.com/)
<br>registered on 2013-05-16
<br>in Kirkland, WA (+971 4 4489926)

Email: support@goldguard.com

No address, no names, first blog post on 2017-03-28. There's a staging site (testing) at [http://goldguard.bywazzupa.com/](http://goldguard.bywazzupa.com/). There is also no record of the company in the [DMCC](https://www.dmcc.ae/business-search) business directory.

## OneGram in the news

- [OneGram & Dubai Trading Platform In $500M 'Gold-Backed' Cryptocurrency](https://www.forbes.com/sites/rogeraitken/2017/05/02/dubai-trading-platform-onegram-in-500m-gold-backed-crypto-venture-sharia-compliant/#37cbd8bbbf56)
- [Dubai firm launches world's first gold backed digital currency](http://www.arabianbusiness.com/dubai-firm-launches-world-s-first-gold-backed-digital-currency-672673.html)
- [Dubai firm looks to raise $500 million via digital tokens for new payments system](http://www.reuters.com/article/us-onegram-blockchain-gold-idUSKBN17Z2JV)
- [OneGram Links with Tabarak Investment Capital to Promote its Digital Currency](https://www.crowdfundinsider.com/2017/05/100148-onegram-links-tabarak-investment-capital-promote-digital-currency/)

OneGram is an intriguing project but not the only to offer crypto backed by gold. There's been a lot of doubt about the authenticity so do your own research before you invest. I for one remain interested - let's see what the future brings.

A _gist/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3.md => _gist/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3.md +154 -0
@@ 0,0 1,154 @@
---
title: "Sia encrypts and stores files for a fraction of the cost of AWS S3"
layout: post
source:
date: 2017-05-12 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - siacoin
  - "cloud storage"
  - aws
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

Sia, originally conceived at HackMIT 2013, promises a completely private, decentralized, cloud data store at 1/10th of the cost of Amazon AWS S3. Sia splits, encrypts and distributes your file across a network of computers that offer to provide their unused pace.

## Advantages

- **Highly redundant files**: Files fragments are stored in multiple locations, so even if a couple of nodes go down, you'd still be able to restore your file.
- **Faster up/downloads**: Once the network grows, your files are likely to be stored much closer to you, giving you superior download speeds compared to far away providers or possibly congested networks routes.
- **Effective network**: If Sia works efficiently, load should be spread out evenly across the network, rather than everyone accessing a central location (single point of failure) such as AWS datacenter in Ireland or basically every other centralized cloud provider.
- **Security**: Unlike traditional cloud providers, your file is split-up and encrypted before it leaves your computer. That means, no single node hosts a complete copy of your file - even if, your files are encrypted with your private key.
- **Privacy**: Sia doesn't ask or store any of your details. Literally all you need is SC (Siacoin), to pay for the service anonymously. In fact, you don't even need an email - just your password.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_01.png)

Let's take a short break and reflect: Sia is next-generation stuff. We've all heard of Dropbox and Google Drive but Sia could potentially be the Dropbox of tomorrow. In fact, Sia could replace almost any data storage solution that exists today. Even more, I imagine that even services like Dropbox will eventually take a bite from the Sia approach because it's a lot more scalable, cheaper and comes with all the benefits that the future customer expects from their cloud service provider: Speed, uptime, privacy.

Sia is by far not the only startup in this niche but they have a working client, a clear roadmap and my vote. But don't get too excited, we're years away from this becoming standard but you can already reap the benefits today.

## Backup files using Sia

For the sake of 99.8% of the world population, this guide assumes that you've never really had anything to do with cryptocurrency and don't really know what Ethereum or Bitcoin is. The point is, you will need to pay for Sia with SC (Siacoin). SC is a cryptocurrency.

### 1) Download

Visit the [Sia website](http://sia.tech/apps/) and download the *Sia-UI* client. Sia is available for Linux, macOS and Windows. LTS (long term support) releases are also available and promise a more stable experience, while forgoing some of the latest features [Sia LTS download](http://sia.tech/lts/).

### 2) Installation

Depending on your OS, this step will differ. On macOS, unzip the folder and move the application *Sia-UI* to your applications folder.

### 3) Launch Sia

After the first launch, Sia needs to synchronize the blockchain. This may take up to 2+ hours, depending on your connection speed. Before you do anything, let this finish.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_03.png)

### 4) Create a wallet, top-up your balance

#### Create a wallet

Select *Create a new wallet*

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_04.png)
![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_05.png)

It is essential that you never disclose your seed or password to anybody. With the help of your seed, you can restore access to your wallet and balance, in case you ever lose it - anybody can. That's because your balance is stored on the Blockchain and the seed serves as a key to access your wallet.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_06.png)

Take note of your wallet address, we will need it for the next step:

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_07.png)

### Top-up your wallet

Now the interesting part starts: Before you can use Sia, you will need Siacoin (SC). To obtain SC, you need to have money but cryptomoney. It really sounds more complicated than it is.

#### Where can I get cryptocurrency?

There are many ways to obtain, for example, Bitcoin, Litecoin or Ethereum.

- [LocalBitcoins](https://localbitcoins.com/): Buy and sell bitcoins near you
- [Kraken](https://www.kraken.com/): A crypto exchange, wire money, exchange to crypto
- [Coinbase](https://www.coinbase.com/): A lot more end-user friendly, good for US customers
- [bitcoin.de](https://www.bitcoin.de/en): A very easy way to buy via wire transfer, great for EU, perfect for German customers with Fidor accounts.

To get started, you need less than 0.011764706 BTC (20 Euro at the current rate of 1BTC = 1702 Euro). If you've bought a lot more Bitcoin than necessary, I suggest to store it in a Bitcoin wallet such as [Jaxx](https://jaxx.io/).

#### What cryptocurrency is supported?

You can start out with virtually any virtual currency, so long it's supported by [ShapeShift](https://shapeshift.io/#). You can't go wrong with Bitcoin, Litecoin or Ethereum.

#### Exchange the coins you've obtained for SC

The next step is easy. Once you've obtained your crypto, visit [shapeshit.io](https://shapeshift.io/#) and select the two coins / assets you're planning to exchange. In my case, LTC (Litecoin) to SC (Siacoin).

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_08.png)

1. Select your pair and continue
2. Enter your Siacoin wallet address
3. Enter your wallet refund address
4. Start transaction

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_09.png)

### 5) Create an allowance to store files

Once you've received SC in your Sia wallet, we can go ahead and create an allowance: You need to allocate funds to upload and download on Sia. Your allowance remains locked for 3 months. Unspent funds are then refunded*. You can increase your allowance at any time.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_10.png)

What happens now is, that Sia connects to other nodes around the network, to try to allocate disk space in form of a commitment. These nodes will be paid based on

- how long you store the file
- the size of the file
- upload/download bandwidth

This process takes some time but you can sort of follow progress in your Wallet, as SC gets automatically deducted to pay for the contracts we've set-up.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_11.png)

### 6) Upload your first file

Once the contracts are set-up, we can start uploading our first file. For the time being, Sia is best suited for large files so I highly recommend it for single-file backups such as a dated ZIP of a server backup or even yearly backups of your family photos.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_12.png)

I tried to upload a 1GB backup file: The speeds are good at 2.54 MB/s - 3.16 MB/s on a 5 MB/s connection.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_13.png)

Once your file has completed uploading, Sia will improve redundancy. You can track progress by looking at the file. A 3x stands for 3x redundancy.

![Sia](/assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_15.png)

### 7) Sit back and enjoy

Accoring to a [study](http://www.jbs.cam.ac.uk/faculty-research/centres/alternative-finance/publications/global-cryptocurrency/#.WRMKqFKiEQ8) by Cambridge University there were less than 3 million cryptocurrency users worldwide in early 2017. **You're now one of us**.

## What's next

If you're wondering what's next, checkout the [Sia Public Roadmap](https://trello.com/b/Io1dDyuI/sia-public-roadmap). Here are my favourites:

### June 2017

- File sharing with other Sia users
- Faster Blockchain sync

### Next 6 Months

- Proper support for small files (below 40 MB)
- Faster file contract forming
- Video streaming

### Next 2 Years

- File sharing with non-Sia users
- Mobile wallet / light client
- Seeed based file recovery

M _gist/2017/start-using-a-vpn.md => _gist/2017/start-using-a-vpn.md +10 -6
@@ 1,14 1,18 @@
---
title: "Start using a VPN (with IPv6 support)"
layout: page
layout: post
source:
date: 2017-01-01 00:00:00 +0200
categories:
- privacy
- security
- test
date: 2017-01-01 08:00:00 +0200
category:
  - Privacy
tags:
  - vpn
  - privacy
  - browser
  - security
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

A VPN connection allows you to access region restricted content such as Netflix, helps circumvent government censorship ("The big firewall") and increases your security and privacy online. What's not to like?

A _gist/2017/unofficial-litecoin-roadmap-2017.md => _gist/2017/unofficial-litecoin-roadmap-2017.md +48 -0
@@ 0,0 1,48 @@
---
title: "Unofficial Litecoin Roadmap"
layout: post
source:
date: 2017-05-06 08:00:00 +0200
category:
  - Cryptocurrency
tags:
  - crypto
  - litecoin
bg: austin-neill
bg-author: Austin Neill
author: Franz Geffke
---

~~I've come to realize that there's no public roadmap of what's to come over the next couple of months, so I've put together what I've found around the internet as well as on the last, [official roadmap from 2016 (pdf)](/assets/content/2017/litecoin-roadmap-2016.pdf).~~

**Edit**: The official Litecoin roadmap has been published on [litecoincore.org](https://litecoincore.org/).

## Litecoin roadmap 2017

<table>
  <thead>
    <tr>
      <th>Date</th>
      <th>What</th>
      <th>Links</th>
    </tr>
  </thead>
  <tbody>
  {% for entry in site.data.unofficial-litecoin-roadmap-2017 %}
  <tr>
    <td>{{ entry.date }}</td>
    <td>{{ entry.news }}</td>
    <td>{% if entry.link1t %}<a href="{{ entry.link1 }}" title="{{ entry.link1t }}">[1]</a>{% endif %}{% if entry.link2t %} <a href="{{ entry.link2 }}" title="{{ entry.link2t }}">[2]</a>{% endif %}</td>
  </tr>
  {% endfor %}
  </tbody>
</table>

Because a lot of this tech was initially meant for Bitcoin, there are only few articles that specifically mention Litecoin. Fortunately, the tech behind these two coins is relatively similiar, so Litecoin users can now ,with minimal porting, take advantage of many of the features that have originally been designed for post-SegWit Bitcoin.

## Litecoin network status

- [Litecoin difficulty](https://bitcoinwisdom.com/litecoin/difficulty)
- [Litecoin hash rate distribution](https://www.litecoinpool.org/pools)

_I will add entries as I discover them. I cannot guarantee that all information presented is correct / up to date. Last update: 11.05.2017._

A _includes/about_featured.html => _includes/about_featured.html +71 -0
@@ 0,0 1,71 @@
<h4>Growth</h4>

<div class="row">
{% for work in site.work reversed %}
  {% if work.featured %}
  {% if work.tags contains "growth"%}
  <div class="col-sm-4">
    <a href="{{ work.url }}" class="wrapper">
      <img class="img-responsive" src="/assets/images/projects/preview/{{ work.cover }}">
      <p><b>{{ work.title }}</b>
      <br><small>{{ work.introduction }}</small></p>
    </a>
  </div>
  {% endif %}
  {% endif %}
{% endfor %}
</div>

<h4>Business Intelligence</h4>

<div class="row">
{% for work in site.work reversed %}
  {% if work.featured %}
  {% if work.tags contains "intelligence"%}
  <div class="col-sm-4">
    <a href="{{ work.url }}" class="wrapper">
      <img class="img-responsive" src="/assets/images/projects/preview/{{ work.cover }}">
      <p><b>{{ work.title }}</b>
      <br><small>{{ work.introduction }}</small></p>
    </a>
  </div>
  {% endif %}
  {% endif %}
{% endfor %}
</div>

<h4>Development</h4>

<div class="row">
{% for work in site.work reversed %}
  {% if work.featured %}
  {% if work.tags contains "development"%}
  <div class="col-sm-4">
    <a href="{{ work.url }}" class="wrapper">
      <img class="img-responsive" src="/assets/images/projects/preview/{{ work.cover }}">
      <p><b>{{ work.title }}</b>
      <br><small>{{ work.introduction }}</small></p>
    </a>
  </div>
  {% endif %}
  {% endif %}
{% endfor %}
</div>

<h4>Design</h4>

<div class="row">
{% for work in site.work reversed %}
  {% if work.featured %}
  {% if work.tags contains "design"%}
  <div class="col-sm-4">
    <a href="{{ work.url }}" class="wrapper">
      <img class="img-responsive" src="/assets/images/projects/{{ work.cover }}">
      <p><b>{{ work.title }}</b>
      <br><small>{{ work.introduction }}</small></p>
    </a>
  </div>
  {% endif %}
  {% endif %}
{% endfor %}
</div>

M _includes/footer.html => _includes/footer.html +127 -24
@@ 60,8 60,7 @@ $(window).load(function () {
});
</script>
{% if page.url contains "/client/" %}
<script async src="https://api.mapbox.com/mapbox-gl-js/v0.31.0/mapbox-gl.js"></script>
<link async href="https://api.mapbox.com/mapbox-gl-js/v0.31.0/mapbox-gl.css" rel="stylesheet"/>
<script async src="/assets/js/mapbox-gl.js"></script>
<script>
$(window).load(function () {
  mapboxgl.accessToken = "pk.eyJ1IjoiZGtrbWEiLCJhIjoiU05aOVdrRSJ9._Ahj-qQ5cCyLUCM2dp4tAw";


@@ 94,7 93,7 @@ $(window).load(function () {
$(window).load(function () {
  (function()
  {
    var NowMoment = moment.utc().add(2, 'hours').format('LT');
    var NowMoment = moment.utc().add(3, 'hours').format('LT');
    var eDisplayMoment = document.getElementById('time');
    eDisplayMoment.innerHTML = NowMoment;
  })();


@@ 103,18 102,17 @@ $(window).load(function () {
<script>
$(window).load(function () {
  $.simpleWeather({
    location: 'Berlin',
    location: 'Istanbul',
    unit: 'c',
    success: function(weather) {
      html = ', '+weather.text+' and only '+weather.temp+'&deg;'+weather.units.temp+' outside.';
      html = ', '+weather.text+' and '+weather.temp+'&deg;'+weather.units.temp+' outside.';
      $("#weather").html(html);
    },
    error: function(error) {}
  });
});
</script>
<script async src="https://api.mapbox.com/mapbox-gl-js/v0.31.0/mapbox-gl.js"></script>
<link async href="https://api.mapbox.com/mapbox-gl-js/v0.31.0/mapbox-gl.css" rel="stylesheet"/>
<script async src="/assets/js/mapbox-gl.js"></script>
<script>
$(window).load(function () {
  mapboxgl.accessToken = "pk.eyJ1IjoiZGtrbWEiLCJhIjoiU05aOVdrRSJ9._Ahj-qQ5cCyLUCM2dp4tAw";


@@ 147,27 145,132 @@ $(window).load(function () {
  }
  {% endif %}
</script>
{% if page.url == "/about/" %}
<script src='/assets/js/mapbox.js'></script>
<link href='https://api.mapbox.com/mapbox.js/v3.1.0/mapbox.css' rel='stylesheet' />
<style>
  .navbar.navbar-default, .quick-contact, .innovative-product-award.loaded {
    z-index: 1000;
  }
  #map {
    height:360px;
    width:100%;
  }
</style>
<script>
$(document).ready(function() {
  bitcoinprices.init({
    url: "https://api.bitcoinaverage.com/ticker/all",
    marketRateVariable: "24h_avg",
    currencies: ["USD", "EUR", "CNY"],
    symbols: {
        "BTC": "<i class='fa fa-btc'></i>"
    },
    defaultCurrency: "EUR",
    ux : {
        clickPrices : true,
        menu : true,
        clickableCurrencySymbol:  true
    },
    jQuery: jQuery,
    priceAttribute: "data-btc-price",
    priceOrignalCurrency: "BTC"
L.mapbox.accessToken = 'pk.eyJ1IjoiZGtrbWEiLCJhIjoiY2oyN2h2M2VnMDA1bTJxbzY4dGhhc2V4NCJ9.Hb-yaLByaOY9LR7SF7JxmA';
var map = L.mapbox.map('map')
    .setView([27.2741606,3.2739257], 2);
    var myLayer = L.mapbox.featureLayer().addTo(map);
    var styleLayer = L.mapbox.styleLayer('mapbox://styles/dkkma/cj27hvld100112smweocii6o3').addTo(map);

    // The GeoJSON representing the two point features
    var geojson = {
        type: 'FeatureCollection',
        features: [{% for place in site.data.places %}{
            type: 'Feature',
            properties: {
                title: 'Life in {{ place.city }}, {{ place.country }} in {{ place.year }}',
                'marker-color': '#451668',
                'marker-size': 'small',
                'marker-symbol': 'building',
                'description': '{{ place.introduction }}'
            },
            geometry: {
                type: 'Point',
                coordinates: [{{ place.longitude }}, {{ place.latitude }}]
            }
        },
        {% endfor %}
        {% for client in site.clients %}{
            type: 'Feature',
            properties: {
                title: 'Client in {{ client.city }}, {{ client.country }}',
                'marker-color': '#451668',
                'marker-size': 'small',
                'marker-symbol': 'suitcase',
                'description': '{{ client.introduction }}'
            },
            geometry: {
                type: 'Point',
                coordinates: [{{ client.map }}]
            }
        }{% if forloop.last %}{% else %},{% endif %}
        {% endfor %}
      ]
    };

    map.scrollWheelZoom.disable();
    myLayer.setGeoJSON(geojson);
    //myLayer.on('click', function(e) {
    //    window.open(e.layer.feature.properties.url);
    //});
</script>
{% endif %}
{% if page.url contains "/crypto-calendar/" %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="/assets/js/clndr.min.js"></script>
<script src="/assets/js/demo.js"></script>
{% endif %}
<script>
  NProgress.set(0.8);
</script>
{% if page.url contains "/mutual-investment-fund/" %}
<script src='/assets/js/Chart.bundle.min.js'></script>
<script>
var ctx = document.getElementById("myChart");
var myLineChart = Chart.Line(ctx, {
    data: {
        labels: [{% for entry in site.data.mutual-investment-fund %}"{{ entry.date }}"{% if forloop.last %}{% else %},{% endif %}{% endfor %}],
        datasets: [
            {
                label: 'Net asset value (NAV) in Euro',
                fill: true,
                lineTension: 0,
                backgroundColor: "#451668",
                borderColor: "#451668",
                borderCapStyle: 'butt',
                borderDash: [],
                borderDashOffset: 0.0,
                borderJoinStyle: 'miter',
                pointBorderColor: "#451668",
                pointBackgroundColor: "#fff",
                pointBorderWidth: 2,
                pointHoverRadius: 5,
                pointHoverBackgroundColor: "#fff",
                pointHoverBorderColor: "#451668",
                pointHoverBorderWidth: 3,
                pointRadius: 5,
                pointHitRadius: 10,
                data: [{% for entry in site.data.mutual-investment-fund %}{{ entry.rate }}{% if forloop.last %}{% else %},{% endif %}{% endfor %}],
                spanGaps: false,
            }
        ]
    }
});
</script>
{% endif %}
{% if page.url contains "/gist/" or page.url contains "/dev/" %}
<script>
  NProgress.set(0.9);
</script>
<script src="https://franz-comments.herokuapp.com/embed.js" async onload="
  Coral.Talk.render(document.getElementById('coral_talk_1743242202202422'), {
    talk: 'https://franz-comments.herokuapp.com/'
  });
"></script>
<script>
$("#comments-toggle").on("click" ,function(){
    setTimeout(function(){
      document.querySelector('#comment').scrollIntoView({
      behavior: 'smooth'
    });
  }, 1);
});
</script>
{% endif %}
<script>
  $(window).on("load", function() {
    NProgress.done();

M _includes/header.html => _includes/header.html +3 -2
@@ 9,8 9,9 @@
  <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
  <meta property="og:title" content="{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | escape }}{% endif %}">
  <meta property="og:description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
  <meta property="og:url" content="{{ site.url }}/{{ page.url }}">
  <meta property="og:url" content="{{ site.url }}{{ page.url }}">
  <meta property="og:site_name" content="{{ site.title | escape }}">
  <link rel="canonical" href="{{ site.url }}{{ page.url }}" />
  {% if page.cover %}
  <meta property="og:image" content="{{ page.cover }}">
  <meta name="twitter:card" content="{{ page.cover }}">


@@ 42,7 43,7 @@
    </style>
  {% else %}
    <style>
    @media (min-width: 750px) {body.bg {background-image: url(/assets/bg/pattern_005.jpg);}}
    @media (min-width: 750px) {body.bg {background-image: url(/assets/bg/pattern_071.jpg);}}
    {% unless page.layout == "index" %}@media (max-width: 920px) {#menu {background-image: url(/assets/bg/pattern_005.jpg);}}{% endunless %}
    </style>
  {% endif %}

M _includes/mobile-nav.html => _includes/mobile-nav.html +7 -6
@@ 2,12 2,13 @@
  <header>
    <ul>
      <li class="logo"><a href="/"><img alt="Franz" src=/assets/images/franz.svg></a></li>
      <li><a href="/about/">about</a></li>
      <li><a href="/work/">work</a></li>
      <li><a href="/clients/">clients</a></li>
      <li><a href="/gist/">gist</a></li>
      <li><a href="/contact/">contact</a></li>
      <li class="nl bt">1 BTC: <span data-btc-price="1.0">000.00 EUR</span></li>
      <li class="{% if page.url == "/about/" %} active{% endif %}"><a href="/about/">about</a></li>
      <li class="{% if page.url contains "/work/" %} active{% endif %}"><li><a href="/work/">work</a></li>
      <li class="{% if page.url contains "/clients/" %} active{% endif %}"><li><a href="/clients/">Clients</a></li>
      <!-- <li class="{% if page.url == "/mutual-investment-fund/" %} active{% endif %}"><a href="/mutual-investment-fund/">fund</a></li> -->
      <li class="{% if page.url contains "/gist/" %} active{% endif %}"><a href="/gist/">gist</a></li>
      <li class="{% if page.url == "/contact/" %} active{% endif %}"><a href="/contact/">contact</a></li>
      <!-- <li class="nl bt">1 BTC: <span data-btc-price="1.0">000.00 EUR</span></li> -->
    </ul>
  </header>
</nav>

M _includes/nav.html => _includes/nav.html +6 -6
@@ 5,12 5,12 @@
        <ul>
          <li class="logo{% if page.bg == "home" %} visible-md visible-lg{% endif %}"><a href="/"><img alt="Franz" src=/assets/images/franz.svg></a></li>
          <li class="visible-xs visible-sm toggle"><a class="toggle-button">navigation</a></li>
          <li class="visible-md visible-lg"><a href="/about/">about</a></li>
          <li class="visible-md visible-lg"><a href="/portfolio/">portfolio</a></li>
          <li class="visible-md visible-lg"><a href="/gist/">gist</a></li>
          <li class="visible-md visible-lg"><a href="/dev/">dev</a></li>
          <li class="visible-md visible-lg"><a href="/contact/">contact</a></li>
          <li class="nl visible-md visible-lg">1 BTC: <span data-btc-price="1.0">000.00 EUR</span></li>
          <li class="visible-md visible-lg{% if page.url == "/about/" %} active{% endif %}"><a href="/about/">about</a></li>
          <li class="visible-md visible-lg{% if page.url contains "/portfolio/" or page.url contains "/work/" or page.url contains "/client/" %} active{% endif %}"><a href="/portfolio/">portfolio</a></li>
          <!-- <li class="visible-md visible-lg{% if page.url == "/mutual-investment-fund/" %} active{% endif %}"><a href="/mutual-investment-fund/">fund</a></li> -->
          <li class="visible-md visible-lg{% if page.url contains "/gist/" %} active{% endif %}"><a href="/gist/">gist</a></li>
          <li class="visible-md visible-lg{% if page.url == "/contact/" %} active{% endif %}"><a href="/contact/">contact</a></li>
          <!-- <li class="nl visible-md visible-lg">1 BTC: <span data-btc-price="1.0">000.00 EUR</span></li> -->
        </ul>
      </div>
    </div>

M _includes/page-sidebar-nav.html => _includes/page-sidebar-nav.html +2 -0
@@ 30,6 30,8 @@
    <p class="title second">Notes & Links</p>
    <ul>
      <li><a href="/pgp/">My Public key (PGP)</a></li>
      <li><a href="/bitcoin/">Bitcoin Crytpo</a></li>
      <li><a href="/dev/">Develoment</a></li>
      <li><a href="/privacy/">Privacy</a></li>
    </ul>


A _includes/related.html => _includes/related.html +57 -0
@@ 0,0 1,57 @@
<h2 class="block">Related</h2>

<div class="related">
{% assign maxRelated = 8 %}
{% assign minCommonTags =  1 %}
{% assign maxRelatedCounter = 0 %}

  {% for post in site.gist %}

    {% assign sameTagCount = 0 %}
    {% assign commonTags = '' %}

    {% for tag in post.tags %}
      {% if post.url != page.url %}
        {% if page.tags contains tag %}
          {% assign sameTagCount = sameTagCount | plus: 1 %}
          {% capture tagmarkup %} <span class="label label-default">{{ tag }}</span> {% endcapture %}
          {% assign commonTags = commonTags | append: tagmarkup %}
        {% endif %}
      {% endif %}
    {% endfor %}

    {% if sameTagCount >= minCommonTags %}
      <h4><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></h4>
      {% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
      {% if maxRelatedCounter >= maxRelated %}
        {% break %}
      {% endif %}
    {% endif %}

  {% endfor %}

  {% for post in site.dev %}

    {% assign sameTagCount = 0 %}
    {% assign commonTags = '' %}

    {% for tag in post.tags %}
      {% if post.url != page.url %}
        {% if page.tags contains tag %}
          {% assign sameTagCount = sameTagCount | plus: 1 %}
          {% capture tagmarkup %} <span class="label label-default">{{ tag }}</span> {% endcapture %}
          {% assign commonTags = commonTags | append: tagmarkup %}
        {% endif %}
      {% endif %}
    {% endfor %}

    {% if sameTagCount >= minCommonTags %}
      <h4><a href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a></h4>
      {% assign maxRelatedCounter = maxRelatedCounter | plus: 1 %}
      {% if maxRelatedCounter >= maxRelated %}
        {% break %}
      {% endif %}
    {% endif %}

  {% endfor %}
</div>

M _includes/welcome_referral.html => _includes/welcome_referral.html +7 -0
@@ 26,3 26,10 @@
  </div>
</div>
{% endif %}
{% if page.welcome %}
<div id="internal_referral" style="display:block;">
  <div class="container-fluid">
    <p>{{ page.welcome }}</p>
  </div>
</div>
{% endif %}

M _layouts/ly_flex.html => _layouts/ly_flex.html +1 -0
@@ 14,4 14,5 @@ layout: layout
    </div>
  </div>
</div>
{% include welcome_referral.html %}
{{ content }}

M _layouts/page.html => _layouts/page.html +8 -0
@@ 14,6 14,14 @@ layout: ly_page
            <a href="{{ client.url }}"><intro><- return to client profile</a>
          {% endif %}
          {% endfor %}
          <h2 class="block">Other Projects</h2>
          <div class="row">
          {% for project in site.work reversed %}
            <div class="col-sm-4">
              <a href="{{ project.url }}">{{ project.title }}</a>
            </div>
          {% endfor %}
          </div>
        {% endif %}
      </div>
    </div>

M _layouts/post.html => _layouts/post.html +63 -7
@@ 8,14 8,70 @@ layout: ly_page
      <div class="content">
        {% include welcome_referral.html %}
        {{ content }}
        {% if page.url contains "work"%}
          {% for client in site.clients %}
          {% if page.client == client.client %}
            <a href="{{ client.url }}"><intro><- return to client profile</a>
          {% endif %}
          {% endfor %}
        {% endif %}
      </div>
    </div>
  </div>
</div>

{% if page.url contains "/gist/" or page.url contains "/dev/" %}

<div class="container-fluid content-wrapper">
  <div class="row">
    <div class="col-sm-10 col-sm-offset-1">
      <div class="content">
        <div class="inline-section">
          {% include related.html %}
        </div>
        <div class="inline-section">
          <h2 class="block">Contact the author</h2>
          <div itemscope itemtype="http://schema.org/Person" class="schema">

            <div class="row">
              <div class="col-sm-4">
                <p><a href="https://f-a.nz/" itemprop="author">Franz Geffke</a>
                <br><a href="mailto:m@f-a.nz" itemprop="email">m@f-a.nz</a> (<a href="/pgp/">public key</a>)</p>
              </div>
            </div>
            <p>Published on <time datetime="{{ page.date | date: "%Y-%m-%d" }}">{{ page.date | date: "%-d %B %Y"}}</time></p>
        </div>
      </div>
      <div class="inline-section">
        <h2 class="block">Leave a comment</h2>

          <p class="light">I respect your privacy: Unless you're using Facebook to sign in, no data is exchanged with 3rd party providers. Either way, it'll only take a sec.</p>
          <div class="talk-comments" id="coral_talk_1743242202202422"></div>

      </div>
    </div>
  </div>
</div>

{% endif %}
{% if page.url contains "/gistss/" or page.url contains "/devss/" %}
<!--

<div class="container-fluid open-comments-toggle" id="comments-toggle" data-toggle="collapse" data-target="#open-comments" type="button">
  <div class="row">
    <div class="col-sm-7 col-sm-offset-1">
      <div class="content">
        <h2>Leave a live comment</h2>
      </div>
    </div>
  </div>
</div>

<div id="open-comments" class="container-fluid content-wrapper comments-wrapper collapse">
  <div class="row">
    <div class="col-sm-7 col-sm-offset-1">
      <div class="content" id="comment">

        <p class="light">I respect your privacy: Unless you're using Facebook to sign in, no data is exchanged with 3rd party providers.</p>

        <div id="coral_talk_37484575676122844"></div>

      </div>
    </div>
  </div>
</div>
-->
{% endif %}

A _layouts/resume.html => _layouts/resume.html +30 -0
@@ 0,0 1,30 @@
---
layout: ly_page
---

<div class="container-fluid content-wrapper resume">
  <div class="row">
    <div class="col-sm-10 col-sm-offset-1">
      <div class="content">
        {% include welcome_referral.html %}
        <div class="page">
          <div class="contact">
            <h2>Franz Geffke</h2>
              <p><a href="mailto:m@f-a.nz">p@f-a.nz</a></p>
          </div>
          {{ content }}
        </div>
        <h2 id="independent-work">Independent work</h2>
        {% for client in site.clients reversed %}
        <h3>{{ client.title }}, <location>{{ client.city }}, {{ client.country }}</location></h3>
        {% for work in site.work reversed %}
        {% if client.client == work.client %}
          <div><date>{{ work.date | date: "%Y" }}</date>
          <a href="{{ work.url }}"><position>{{ work.title }}</position></a></div>
        {% endif %}
        {% endfor %}
        {% endfor %}
      </div>
    </div>
  </div>
</div>

D _work/.filtafry-erp.md => _work/.filtafry-erp.md +0 -8
@@ 1,8 0,0 @@
---
layout: page
title:  "Filtafry ERP"
date:   2016-06-01 00:00:00 +0200
client: "filtafry"
cover: filtafry-01.jpg
bg: roman-kraft
---

A _work/aee-action-cam-packaging-design.md => _work/aee-action-cam-packaging-design.md +23 -0
@@ 0,0 1,23 @@
---
layout: page
title:  "AEE Action Cam Packaging Design"
date:   2015-06-01 00:00:00 +0200
client: "aee"
cover: aee-05.jpg
bg: roman-kraft
tags: "design"
introduction: Packaging design for AEE S60, S71T+, S80+ action camera series.
featured: true
---

## AEE S60

<img src="/assets/images/projects/aee-06.jpg" class="image-wrapper inline mb">

## AEE S71T+

<img src="/assets/images/projects/aee-05.jpg" class="image-wrapper inline mb">

## AEE S80+

<img src="/assets/images/projects/aee-07.jpg" class="image-wrapper inline mb">

A _work/aee-drone-packaging-design.md => _work/aee-drone-packaging-design.md +23 -0
@@ 0,0 1,23 @@
---
layout: page
title:  "AEE Drone Packaging Design"
date:   2015-06-01 00:00:00 +0200
client: "aee"
cover: aee-04.jpg
bg: roman-kraft
tags: "design"
introduction: Packaging design for worldwide sales for AEE's powerful Toruk drone.
featured: true
---

## AEE Toruk AP9

<img src="/assets/images/projects/aee-02.jpg" class="image-wrapper inline mb">

## AEE Toruk AP10 Pro

<img src="/assets/images/projects/aee-03.jpg" class="image-wrapper inline mb">

## AEE Toruk AP11

<img src="/assets/images/projects/aee-04.jpg" class="image-wrapper inline mb">

M _work/filtafry-franchisee-website.md => _work/filtafry-franchisee-website.md +9 -0
@@ 16,3 16,12 @@ Filtafry franchisee websites are a powered by a homegrown system based on Jekyll
- filtafrysuedwest.de
- filtafry-osnabrueck.de
- ecofry.de

### Website(s) technology

This website is powered by Jekyll, a static site generator that compiles raw assets such as Markdown files into a deployment ready website that allows for secure, efficient hosting without PHP, MYSQL or downtime.

- Completely static
- Mobile-first design
- Hosted on AWS S3, AWS CloudFront CDN (99.9% SLA)
- Secured by SSL Certificate

M _work/filtafry-website.md => _work/filtafry-website.md +4 -4
@@ 13,11 13,11 @@ bg: roman-kraft
{% include project-image.html image="filtafry-04.jpg" %}
{% include project-image.html image="filtafry-05.jpg" %}

### Website Technology
### Website technology

The website is completely static.
This website is powered by Jekyll, a static site generator that compiles raw assets such as Markdown files into a deployment ready website that allows for secure, efficient hosting without PHP, MYSQL or downtime.

- Completely static (no PHP, no MYSQL, no RUBY)
- Hosted trough AWS CloudFront CDN (99,99999% uptime)
- Completely static
- Mobile-first design
- Hosted on AWS S3, AWS CloudFront CDN (99.9% SLA)
- Secured by SSL Certificate

M _work/fitaseal-erp.md => _work/fitaseal-erp.md +7 -6
@@ 1,10 1,13 @@
---
layout: page
title:  "Fit-A-Seal ERP"
date:   2016-06-01 00:00:00 +0200
date:   2017-01-02 00:00:00 +0200
client: "fitaseal"
cover: fitaseal-01.jpg
cover: fitaseal-08.jpg
bg: roman-kraft
tags: "business intelligence"
introduction: Powerful, mobile-ready ERP system with email integration.
featured: true
---

## The challenge


@@ 32,12 35,10 @@ The online manual features numerous video tutorials and adapts to the size of yo
- Detailed permission, Franchisee companies, central article registrar
- Reporting on all process

### Website Technology

The website is completely static.
### Website technology

- PHP, Python
- Hosted on AWS, Route53
- Hosted on AWS EC2, AWS SES, AWS Route53
- Mobile-ready design
- Open source
- Secured by SSL Certificate

M _work/fitaseal-website.md => _work/fitaseal-website.md +4 -4
@@ 14,11 14,11 @@ bg: roman-kraft
{% include project-image.html image="fitaseal-05.jpg" %}
{% include project-image.html image="fitaseal-06.jpg" %}

### Website Technology
### Website technology

The website is completely static.
This website is powered by Jekyll, a static site generator that compiles raw assets such as Markdown files into a deployment ready website that allows for secure, efficient hosting without PHP, MYSQL or downtime.

- Completely static (no PHP, no MYSQL, no RUBY)
- Hosted trough AWS CloudFront CDN (99,99999% uptime)
- Completely static
- Mobile-first design
- Hosted on AWS S3, AWS CloudFront CDN (99.9% SLA)
- Secured by SSL Certificate

A _work/lingel-website.md => _work/lingel-website.md +26 -0
@@ 0,0 1,26 @@
---
layout: page
title:  "Lingel UAE Website"
date:   2017-07-31 00:00:00 +0200
client: "lingel"
cover: q-windows-08.jpg
bg: malaysia
tags: "web development"
introduction: Modern, responsive product portal for German window manufacturer.
featured: true
---

## The challenge

Karl Lingel Fensterbau Gmbh & Co. KG, today one of the leading manufacturers of high quality doors and windows in Europe, is looking to expand to the Middle-East.

## What I'm working on

**This is an ongoing project, still under development**

- Development of the UAE website ([Prototype](http://www.lingel-germany.com.s3-website-eu-west-1.amazonaws.com/))
- Set-up of social media & trading accounts
- Outreach to UAE audience to establish brand, generate initial orders
- Relationship-building

<img src="/assets/images/projects/lingel-01.jpg">

M _work/malaysian-german-society.md => _work/malaysian-german-society.md +1 -2
@@ 35,12 35,11 @@ Event category pages list all upcoming and recent past events. Past events often

The new website features a state of the art library. Visitors can check for the availability of all of the societies books online. Previously the only way to find out whether a book was available or even part of the library was only possible on-site or via phone.

### Website Technology
### Website technology

The MGS Website is powered by EllisLab ExpressionEngine 2 Core.

- ExpressionEngine 2 Core
- Running on PHP/Apache trough a NGINX Proxy
- Dynamic, Javascript based translation
- Responsive design
- Secured by SSL Certificate

M _work/onair-website.md => _work/onair-website.md +2 -3
@@ 23,10 23,9 @@ bg: california
{% include project-image.html image="onair-05.jpg" %}
{% include project-image.html image="onair-06.jpg" %}

### Website Technology
### Website technology

The MGS Website is powered by EllisLab ExpressionEngine 2.
The On Air website is powered by EllisLab ExpressionEngine 2.

- ExpressionEngine 2
- Responsive design
- Secured by SSL Certificate

M _work/panther-alpha-kickstarer.md => _work/panther-alpha-kickstarer.md +4 -0
@@ 4,6 4,10 @@ title:  "Panther Alpha Kickstarter"
date:   2016-07-01 00:00:00 +0200
client: "panther"
bg: california
cover: panther-mpc-06.jpg
tags: "growth"
introduction: Popular Kickstarter campaign that totaled over $43,000 in 45 days.
featured: true
---

{% include project-image.html caption="Kickstarter" image="panther-mpc-06.jpg" %}

M _work/panther-alpha-website.md => _work/panther-alpha-website.md +8 -5
@@ 3,8 3,11 @@ layout: page
title:  "Panther Alpha Website"
date:   2016-07-01 00:00:00 +0200
client: "panther"
cover: panther-mpc-01.jpg
bg: california
cover: panther-mpc-01.jpg
tags: "web development"
introduction: Jekyll powered, static website for Panther Alpha MicroPC.
featured: true
---

{% include project-image.html caption="Homepage" image="panther-mpc-01.jpg" %}


@@ 12,11 15,11 @@ bg: california
{% include project-image.html image="panther-mpc-03.jpg" %}
{% include project-image.html image="panther-mpc-05.jpg" %}

### Website Technology
### Website technology

The website is completely static.
This website is powered by Jekyll, a static site generator that compiles raw assets such as Markdown files into a deployment ready website that allows for secure, efficient hosting without PHP, MYSQL or downtime.

- Completely static (no PHP, no MYSQL, no RUBY)
- Hosted trough AWS CloudFront CDN (99,99999% uptime)
- Completely static
- Mobile-first design
- Hosted on AWS S3, AWS CloudFront CDN (99.9% SLA)
- Secured by SSL Certificate

M _work/q-windows-adwords.md => _work/q-windows-adwords.md +5 -1
@@ 1,9 1,13 @@
---
layout: page
title:  "Q-Windows Adwords"
date:   2017-01-01 00:00:00 +0200
date:   2017-01-02 00:00:00 +0200
client: "qwindows"
bg: malaysia
cover: q-windows-13.jpg
tags: "growth"
introduction: "Growth optimization: cost down by 60%, enquiries up by 200%."
featured: true
---

## The challenge

M _work/q-windows-website.md => _work/q-windows-website.md +10 -6
@@ 1,10 1,13 @@
---
layout: page
title:  "Q-Windows Website"
date:   2017-01-01 00:00:00 +0200
date:   2017-01-02 00:00:00 +0200
client: "qwindows"
cover: q-windows-01.jpg
cover: q-windows-08.jpg
bg: malaysia
tags: "web development"
introduction: Modern, responsive product portal for German window manufacturer.
featured: true
---

## The challenge


@@ 28,6 31,7 @@ A modern, mobile-friendly audio player allows desktop visitors to compare the no
This section works like a technical catalog: All window and door types are listed with their individual configuration options.

{% include project-image.html image="q-windows-11.jpg" %}
{% include project-image.html image="q-windows-14.jpg" %}
{% include project-image.html image="q-windows-12.jpg" %}

The contact form connects directly to the Q-Windows insightly.com CRM account. All submissions automatically show up on their internal dashboard and a custom tracking plugin allows Q-Windows staff understand where leads came from and what pages they looked at.


@@ 36,11 40,11 @@ The contact form connects directly to the Q-Windows insightly.com CRM account. A

The website is not only a lot easier to maintain, but also a lot faster. Page load time is down by 65% and time spend browsing is up by 25%.

### Website Technology
### Website technology

The website is completely static.
This website is powered by Jekyll, a static site generator that compiles raw assets such as Markdown files into a deployment ready website that allows for secure, efficient hosting without PHP, MYSQL or downtime.

- Completely static (no PHP, no MYSQL, no RUBY)
- Hosted trough AWS CloudFront CDN (99,99999% uptime)
- Completely static
- Mobile-first design
- Hosted on AWS S3, AWS CloudFront CDN (99.9% SLA)
- Secured by SSL Certificate

M _work/sky-hype-real-estate-portal.md => _work/sky-hype-real-estate-portal.md +5 -2
@@ 1,10 1,13 @@
---
layout: page
title:  "Sky-Hype AG Real Estate Portal"
date:   2016-01-01 00:00:00 +0200
date:   2016-01-02 00:00:00 +0200
client: "skyhype"
cover: sky-hype-01.jpg
bg: switzerland
tags: "web development"
introduction: Powerful, ExpressionEngine 3 based, worldwide real estate portal.
featured: true
---

## The challenge


@@ 53,7 56,7 @@ The custom, PHP based metasearch engine already connects to 8 sources with over 
- Sweden; booli.com
- Switzerland; homegate.ch

### Website Technology
### Website technology

Initially developed on EE 2, Sky-Hype is now powered by EllisLab ExpressionEngine 3.


M about.md => about.md +13 -8
@@ 5,17 5,22 @@ bg: pattern_029
permalink: /about/
---

My Name is Franz Geffke - I was born and raised in Germany but today my home is anywhere between Europe, the Middle-East and Southeast-Asia. New experiences and culture draw me to travel to, and to live in different countries all around the world - With stronger foreign ties come a different, new perspective on all aspects of life and business which I continue to embrace.
<u>My Name is Franz Geffke</u> - I was born and raised in Germany but today my home is anywhere between Europe, the Middle-East and Southeast-Asia. New experiences and culture draw me to travel to, and to live in different countries all around the world - With stronger foreign ties come a different, new perspective on all aspects of life and business which I continue to embrace.

<div id="map" data-slideout-ignore></div>

Aside from my travels, I'm a big privacy advocate and strong supporter of technologies and ideas that help promote personal freedom, decentralize certain aspects of power, and are easily accessible to everyone - now or in the near future.

Whenever I'm not working, I like to disconnect and return to the lifestyle of a different era - with crackling vinyls, glowing amplifiers and a glass of scotch - no ice.
Whenever I'm not working, I like to disconnect and return a different era - with crackling vinyls, glowing amplifiers and a glass of scotch - no ice.

Here's what I'm reading: [Bookshelf](/bookshelf/)

## Work

My work covers a variety of aspects but to summarize, __I help organizations increase their reach and revenue by optimizing their product, online presence and backend-end processes__. I have clients ranging from startup and small business to international powerhouses and charities.

- GEW, UK
- Lingel Windows, Germany
- Filtafry, Germany
- Fit-A-Seal, Germany
- Sky-Hype, Switzerland


@@ 27,11 32,7 @@ My work covers a variety of aspects but to summarize, __I help organizations inc
- DKKMA, UK
- The Running Awards, UK


<blockquote>
<span>Franz helped shape messaging and design engaging visual content for Global Entrepreneurship Week in the UK, a campaign that includes more than 3,000 events and 300,000 participants. Franz was great to work with, keen to test new ideas and push the work into new and exciting areas. The content he produced was central to a social campaign that was really innovative and effective in generating engagement from diverse audiences across multiple platforms.</span>
<footer>- Ewan Gaffney</footer>
</blockquote>
> Franz helped shape messaging and design engaging visual content for Global Entrepreneurship Week in the UK, a campaign that includes more than 3,000 events and 300,000 participants. Franz was great to work with, keen to test new ideas and push the work into new and exciting areas. The content he produced was central to a social campaign that was really innovative and effective in generating engagement from diverse audiences across multiple platforms. - Ewan Gaffney, GEW UK

__Here's some of what I do:__



@@ 41,4 42,8 @@ __Here's some of what I do:__
- Marketing Automation, ERP and CRM implementation for SME
- Investor pitch, seed funding advice, product placement

Check out my [portfolio](/portfolio/).
Check out my [portfolio](/portfolio/) or review my featured work below.

### Featured work

{% include about_featured.html %}

A assets/bg/home_7.jpg => assets/bg/home_7.jpg +0 -0
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_01.png => assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_01.png +0 -0
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_02.png => assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_02.png +0 -0
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_03.png => assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_03.png +0 -0
A assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_04.png => assets/content/2017/a-quick-look-ledger-nano-crypto-hardware-wallet_04.png +0 -0
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_01.png => assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_01.png +0 -0
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_02.png => assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_02.png +0 -0
M assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_03.png => assets/content/2017/economic-impact-of-Litecoin-difficulty-adjustment-on-mining_03.png +0 -0
A assets/content/2017/litecoin-roadmap-2016.pdf => assets/content/2017/litecoin-roadmap-2016.pdf +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_01.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_01.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_03.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_03.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_04.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_04.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_05.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_05.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_06.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_06.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_07.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_07.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_08.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_08.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_09.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_09.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_10.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_10.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_11.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_11.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_12.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_12.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_13.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_13.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_14.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_14.png +0 -0
A assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_15.png => assets/content/2017/sia-encrypts-and-stores-files-for-a-fraction-of-the-cost-of-AWS-S3_15.png +0 -0
A assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_01.png => assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_01.png +0 -0
A assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_02.png => assets/content/2017/whats-up-with-ripple-xrp-this-may-2017_02.png +0 -0
M assets/css/_custom.scss => assets/css/_custom.scss +679 -35
@@ 83,6 83,10 @@ body {
  background-attachment: fixed;
}

.meta {
  font-family: 'Overpass Mono';
}

body.index {
  background-size: cover;
}


@@ 108,7 112,7 @@ body.dark {
  padding-bottom: 80px;
}

.content p, .content a, .content h1, .content h2, .content h3, .content h4, .content table, .content ul, .content ol, .content code, .content .highlighter-rouge {
.content p, .content a, .content h1, .content h2, .content h3, .content h4, .content table, .content ul, .content ol, .content code, .content .highlighter-rouge, .talk-comments {
  max-width:600px;
}



@@ 120,14 124,54 @@ p, a, li, {

}

p.light {
  color: #868686;
  font-size: 1em;
}

h2.block {
  margin-top: 28px;
}

h2.block::before, .sidebar p.title::before {
  content: "";
  display: block;
  width: 60px;
  height: 12px;
  margin: 0 0 20px;
  background: #000;
}

p.title.clean::before {
  display: none;
}

.related h4 {
  margin-top: 6px;
  margin-bottom: 6px;
  font-size: 1.1em;
}

.schema a {
  color: #000;
}

a:hover {
  color: #fff;
  background-color: #451668;
  text-decoration: none;
}

canvas.custom-chart {
  padding: 20px;
  background-color: #fff;
  border: 1px solid #ebebeb;
}

h1 {
  font-size: 3.8em;
  text-transform: uppercase;
  line-height: 1.2em;
}

h2 {


@@ 145,7 189,7 @@ h4 {

p, li {
  font-size: 1.1em;
  line-height: 1.5em;
  line-height: 1.7em;
}

::-webkit-input-placeholder { /* Chrome/Opera/Safari */


@@ 169,12 213,80 @@ ul {
  margin-bottom:1em;
}

u {
  font-weight: bold;
  text-transform: uppercase;
}

a {
  color: #451668;
  padding: 2px 2px 2px 2px;
  margin: -2px -2px -2px -2px;
}

.content-wrapper a {
  text-decoration: underline;
}

.content-wrapper a:hover {
  text-decoration: none;
}

a.wrapper, #map a {
  padding: 0px;
  margin: 0px;
  text-decoration: none;
}

ul.projects.small li a {
  text-decoration: none;
}

a.wrapper p {
  line-height: 1.4em;
}

a.wrapper p small {
  color: #000;
  line-height: 1.4em;
}

a.wrapper:hover {
  color: #000;
}

#map a {
  color: #e3e3e3
}

#map.leaflet-container {
  margin-top: 40px;
  margin-bottom: 40px;
  border: 1px solid #000;
  font-family: 'Overpass', sans-serif;
}

#map.leaflet-container .leaflet-control-zoom {
  display:none;
}

#map.leaflet-container .marker-title {
  font-size: 1.2em;
}

#map .leaflet-popup-content-wrapper, #map .map-legends, #map .map-tooltip {
  color: #fff;
  background: #441566;
}

#map.leaflet-container .leaflet-control-attribution {
  background-color: rgba(255, 255, 255, 0);
}

#map .mapbox-improve-map {
  display: none;
}

.footer {
  bottom: 0;
  width: 100%;


@@ 291,6 403,11 @@ img.franz {
  padding: 20px 40px 20px 40px;
}

#swipebox-close {
  left: 0;
  right: unset;
}

.nav ul {
  padding:0px;
  list-style: none;


@@ 317,7 434,7 @@ img.franz {
  padding: 20px;
}

.nav ul li a:hover, .nav ul li.nl:hover {
.nav ul li.active a, .nav ul li a:hover, .nav ul li.nl:hover {
  color:#fff;
  background-color: #451668;
}


@@ 445,7 562,7 @@ label {
  margin: 0px 0px 0px 0px;
}

#menu ul li a:hover {
#menu ul li a:hover, #menu ul li.active a {
  background-color: #fff;
}



@@ 461,7 578,7 @@ label {

.wrapper.page {
  min-height:100vh;
  background-color: #fff;
  background-color: #f8f8f8;
}

.wrapper.entry {


@@ 580,7 697,6 @@ ul.projects li a intro {
.sidebar p.title {
  font-weight: 700;
  padding-bottom: 6px;
  border-bottom: 3px solid #000;
}

.sidebar p.title.second {


@@ 640,10 756,29 @@ code, kbd, pre, samp {
  background-color: #000;
}

.content img {
a::-moz-selection, code::-moz-selection, pre::-moz-selection, .highlighter-rouge pre.highlight code::-moz-selection {
  color: #fff;
  background: #451668;
}

.highlighter-rouge pre.highlight code span::-moz-selection {
  color: #fff;
  background: #451668;
}

a::selection, code::selection {
  color: #fff;
  background: #451668;
}

.content img, .content img.img-responsive, .content table {
  max-width: 100%;
}

.content img.stock {
  border: 20px solid #c4cdd3;
}

#welcome_referral, #internal_referral {
  background-color: #000;
  color: #fff;


@@ 710,27 845,20 @@ table thead {
}

table td, table th {
  padding: 4px;
  padding: 10px;
  vertical-align: bottom;
  border-bottom: 1px solid #f1f1f1;
  border: none;
}

table > tbody > tr:nth-of-type(2n+1) {
    background-color: #fcfcfc;
}

blockquote {
  font-size: 1em;
  padding: 24px;
  margin: 5px;
  background-image: url(../assets/images/openquote.png);
  background-position: top left;
  background-repeat: no-repeat;
  background-size: 24px;
}
blockquote span {
	display: block;
	background-image: url(../assets/images/closequote.png);
	background-repeat: no-repeat;
	background-position: bottom right;
  background-size: 24px;
  border-left: 12px solid #000;
  padding-left: 20px;
  margin-left: 20px;
  color: #000;
}

blockquote footer {


@@ 746,14 874,6 @@ blockquote footer {
  color: #fff;
  background: #000;
}
a::-moz-selection, code::-moz-selection {
  color: #fff;
  background: #451668;
}
a::selection, code::selection {
  color: #fff;
  background: #451668;
}

ul.pagination {
  list-style: none;


@@ 769,10 889,148 @@ ul.pagination li a {

}

.resume h2 {

}

.resume h3 {
  font-size: 1.2em;
  text-transform: uppercase;
  margin-bottom: 0px;
  margin-top: 20px;
}

.resume location {
  text-transform: none;
  font-weight: normal;
}

.resume date {
  float: right;
}

.resume position {
  margin-top:0px;
}

.resume p {
  padding-left: 20px;
  margin-top: 2px;
}

.resume ul {
  padding-left: 40px;
  margin-top: 2px;
}

.resume p, .resume ul li {
  font-size:1em;
}

.resume .contact {
  text-align: center;
}

.resume .contact h2 {
  margin-bottom: 0px;
}

.resume .contact h2, .resume .contact p {
  max-width: 100%;
}

.comments-wrapper {
  padding-top: 40px;
}

.comments-wrapper .btn.btn-default {
  border-bottom: 2px solid #d8d8d8;
}

.comment {
  border-left: 1px solid #d8d8d8;
  padding-left: 14px;
  margin-top: 28px;
}

.comment p {
  margin: 0px 0px 0px 0px;
}

.comment .author {
  color: #d8d8d8;
}

.comment .profile-image img {
  width:100%;
}

.comment .date {
  font-size: 0.8em;
}

.open-comments-toggle {
  background-color: #000;
}

.open-comments-toggle .content {
  padding: 0px;
}

.open-comments-toggle h2 {
  color: #fff;
}

.open-comments-toggle:hover {
  background-color: #451668;
}

.comments-wrapper.black, .comments-wrapper.black .form-control {
  color: #fff;
  background: #000;
}

.comments-wrapper.black .form-control {
  border-left: 1px solid #fff;
}

.comments-wrapper.black h2 {
  color: #fff;
}

.comments-wrapper.black .btn {
  background-color: #000;
}

.comments-wrapper.black .btn:hover {
  background-color: #451668;
  border-bottom: 2px solid #451668;
}

.comments-wrapper.black ::-webkit-input-placeholder { /* Chrome/Opera/Safari */
  color: #808080;
}

.comments-wrapper.black ::-moz-placeholder { /* Firefox 19+ */
  color: #808080;
}

.comments-wrapper.black :-ms-input-placeholder { /* IE 10+ */
  color: #808080;
}

.comments-wrapper.black :-moz-placeholder { /* Firefox 18- */
  color: #808080;
}

.comments-wrapper.black .form-control:focus {
  border-left: 1px line #fff;
}

@media (min-width: 750px) {
  .wrapper {
    margin-right: 160px;
    background-color: #fff;
    background-color: #f8f8f8;
    position: relative;
  }
  #panel {


@@ 788,6 1046,13 @@ ul.pagination li a {
  #panel.bg.index {
    background-size: cover;
  }
  .resume .page {
    padding: 40px;
    border: 1px solid #bbb;
  }
  .content img, .content img.img-responsive, .content table {
    margin: 20px 0px 20px 20px;
  }
}
@media (max-width:786px) {
  .image-wrapper a.thumbnail {


@@ 856,7 1121,7 @@ ul.pagination li a {
  ul.projects.small li a {
    padding: 60px 20px 20px 20px;
  }
  .content img, .content .image-wrapper, .content a {
  .content img, .content .image-wrapper, .content a, .content table {
    max-width:640px;
  }
}


@@ 864,7 1129,7 @@ ul.pagination li a {
  .wrapper {
    margin-right: 220px;
  }
  .content img, .content .image-wrapper, .content a {
  .content img, .content .image-wrapper, .content a, .content table {
    max-width:700px;
  }
}


@@ 881,7 1146,7 @@ ul.pagination li a {
  }
}
@media (min-width: 1400px) {
  .content img, .content .image-wrapper, .content a {
  .content img, .content .image-wrapper, .content a, .content table {
    max-width:900px;
  }
  .image-wrapper a.thumbnail {


@@ 897,3 1162,382 @@ ul.pagination li a {
#swipebox-prev, #swipebox-next, #swipebox-close {
  background-image: url(/assets/swipebox/img/icons.png);
}

.cal1 {
  margin: 30px auto;
  max-width: 600px;
  font-family: 'Droid Sans Mono';
  font-size: 14px;
}
.cal1 .clndr .clndr-controls {
  display: inline-block;
  width: 100%;
  position: relative;
  margin-bottom: 10px;
}
.cal1 .clndr .clndr-controls .month {
  float: left;
  width: 33%;
  text-align: center;
}
.cal1 .clndr .clndr-controls .clndr-control-button {
  float: left;
  width: 33%;
}
.cal1 .clndr .clndr-controls .clndr-control-button.rightalign {
  text-align: right;
  width: 34%;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-next-button {
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-next-button:hover {
  background: #ddd;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-next-button.inactive {
  opacity: 0.5;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-next-button.inactive:hover {
  background: none;
  cursor: default;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-previous-button {
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-previous-button:hover {
  background: #ddd;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-previous-button.inactive {
  opacity: 0.5;
}
.cal1 .clndr .clndr-controls .clndr-control-button .clndr-previous-button.inactive:hover {
  background: none;
  cursor: default;
}
.cal1 .clndr .clndr-table {
  table-layout: fixed;
  width: 100%;
}
.cal1 .clndr .clndr-table .header-days {
  height: 30px;
  font-size: 10px;
  background: #0D70A6;
}
.cal1 .clndr .clndr-table .header-days .header-day {
  vertical-align: middle;
  text-align: center;
  border-left: 1px solid #000000;
  border-top: 1px solid #000000;
  color: #fff;
}
.cal1 .clndr .clndr-table .header-days .header-day:last-child {
  border-right: 1px solid #000000;
}
.cal1 .clndr .clndr-table tr {
  height: 85px;
}
.cal1 .clndr .clndr-table tr td {
  vertical-align: top;
}
.cal1 .clndr .clndr-table tr .day {
  border-left: 1px solid #000000;
  border-top: 1px solid #000000;
  width: 100%;
  height: inherit;
}
.cal1 .clndr .clndr-table tr .day:hover {
  background: #eee;
}
.cal1 .clndr .clndr-table tr .day.today,
.cal1 .clndr .clndr-table tr .day.my-today {
  background: #9AD6E3;
}
.cal1 .clndr .clndr-table tr .day.today:hover,
.cal1 .clndr .clndr-table tr .day.my-today:hover {
  background: #72c6d8;
}
.cal1 .clndr .clndr-table tr .day.today.event,
.cal1 .clndr .clndr-table tr .day.my-today.event {
  background: #a7dbc1;
}
.cal1 .clndr .clndr-table tr .day.event,
.cal1 .clndr .clndr-table tr .day.my-event {
  background: #B4E09F;
}
.cal1 .clndr .clndr-table tr .day.event:hover,
.cal1 .clndr .clndr-table tr .day.my-event:hover {
  background: #96d478;
}
.cal1 .clndr .clndr-table tr .day.inactive,
.cal1 .clndr .clndr-table tr .day.my-inactive {
  background: #ddd;
}
.cal1 .clndr .clndr-table tr .day:last-child {
  border-right: 1px solid #000000;
}
.cal1 .clndr .clndr-table tr .day .day-contents {
  box-sizing: border-box;
  padding: 8px;
  font-size: 12px;
  text-align: right;
}
.cal1 .clndr .clndr-table tr .empty,
.cal1 .clndr .clndr-table tr .adjacent-month,
.cal1 .clndr .clndr-table tr .my-empty,
.cal1 .clndr .clndr-table tr .my-adjacent-month {
  border-left: 1px solid #000000;
  border-top: 1px solid #000000;
  width: 100%;
  height: inherit;
  background: #eee;
}
.cal1 .clndr .clndr-table tr .empty:hover,
.cal1 .clndr .clndr-table tr .adjacent-month:hover,
.cal1 .clndr .clndr-table tr .my-empty:hover,
.cal1 .clndr .clndr-table tr .my-adjacent-month:hover {
  background: #ddd;
}
.cal1 .clndr .clndr-table tr .empty:last-child,
.cal1 .clndr .clndr-table tr .adjacent-month:last-child,
.cal1 .clndr .clndr-table tr .my-empty:last-child,
.cal1 .clndr .clndr-table tr .my-adjacent-month:last-child {
  border-right: 1px solid #000000;
}
.cal1 .clndr .clndr-table tr:last-child .day,
.cal1 .clndr .clndr-table tr:last-child .my-day {
  border-bottom: 1px solid #000000;
}
.cal1 .clndr .clndr-table tr:last-child .empty,
.cal1 .clndr .clndr-table tr:last-child .my-empty {
  border-bottom: 1px solid #000000;
}
.cal2 {
  max-width: 177px;
  margin: 30px auto;
  font-family: 'Droid Sans Mono';
}
.cal2 .clndr .clndr-controls {
  display: block;
  display: inline-block;
  width: 100%;
  margin-bottom: 3px;
}
.cal2 .clndr .clndr-controls .clndr-previous-button {
  float: left;
  width: 10%;
  text-align: left;
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal2 .clndr .clndr-controls .clndr-previous-button:hover {
  background-color: #f4f4f4;
}
.cal2 .clndr .clndr-controls .month {
  float: left;
  width: 80%;
  text-align: center;
}
.cal2 .clndr .clndr-controls .clndr-next-button {
  float: left;
  width: 10%;
  text-align: right;
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal2 .clndr .clndr-controls .clndr-next-button:hover {
  background-color: #f4f4f4;
}
.cal2 .clndr .clndr-grid {
  text-align: center;
  border: 1px solid #FF4545;
  display: inline-block;
}
.cal2 .clndr .clndr-grid .header-day {
  float: left;
  width: 25px;
  height: 25px;
  background: #FF4545;
}
.cal2 .clndr .clndr-grid .day {
  float: left;
  width: 25px;
  height: 25px;
}
.cal2 .clndr .clndr-grid .day.event {
  background-color: #B4E09F;
}
.cal2 .clndr .clndr-grid .day.today {
  background-color: #E3C57F;
}
.cal2 .clndr .clndr-grid .day.selected {
  background-color: #E37FD6;
}
.cal2 .clndr .clndr-grid .day.inactive {
  color: gray;
}
.cal2 .clndr .clndr-grid .empty,
.cal2 .clndr .clndr-grid .adjacent-month {
  float: left;
  width: 25px;
  height: 25px;
  background: #ddd;
}
.cal2 .clndr .clndr-today-button {
  width: 100%;
  text-align: center;
  cursor: pointer;
}
.cal2 .clndr .clndr-today-button:hover {
  background-color: #ddd;
}
.cal2 .multi-month-controls .quarter-button {
  display: inline-block;
  width: 25%;
}
.cal2 .multi-month-controls .quarter-button:hover {
  cursor: pointer;
  background-color: #f4f4f4;
}
.cal2 .day.inactive {
  background-color: #aaa;
}
.cal3 {
  max-width: 354px;
  margin: 0 auto;
  font-family: 'Droid Sans Mono';
}
.cal3 .cal {
  float: left;
  width: 177px;
}
.cal3 .clndr .clndr-controls {
  display: block;
  display: inline-block;
  width: 100%;
  margin-bottom: 8px;
}
.cal3 .clndr .clndr-controls.top {
  margin-bottom: -22px;
  position: relative;
  z-index: 1;
}
.cal3 .clndr .clndr-controls .clndr-previous-button {
  float: left;
  width: 10%;
  text-align: left;
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal3 .clndr .clndr-controls .clndr-previous-button:hover {
  background-color: #f4f4f4;
}
.cal3 .clndr .clndr-controls .month {
  text-align: center;
  width: 80%;
  margin: 0 auto;
}
.cal3 .clndr .clndr-controls .clndr-next-button {
  float: right;
  width: 10%;
  text-align: right;
  cursor: pointer;
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.cal3 .clndr .clndr-controls .clndr-next-button:hover {
  background-color: #f4f4f4;
}
.cal3 .clndr .clndr-grid {
  text-align: center;
  border: 1px solid #FF4545;
  display: inline-block;
}
.cal3 .clndr .clndr-grid .header-day {
  float: left;
  width: 25px;
  height: 25px;
  background: #FF4545;
}
.cal3 .clndr .clndr-grid .day {
  float: left;
  width: 25px;
  height: 25px;
}
.cal3 .clndr .clndr-grid .day.event {
  background-color: #B4E09F;
}
.cal3 .clndr .clndr-grid .day.today {
  background-color: #E3C57F;
}
.cal3 .clndr .clndr-grid .empty,
.cal3 .clndr .clndr-grid .adjacent-month {
  float: left;
  width: 25px;
  height: 25px;
  background: #ddd;
}
.cal3 .clndr .clndr-today-button {
  width: 100%;
  text-align: center;
  cursor: pointer;
}
.cal3 .clndr .clndr-today-button:hover {
  background-color: #ddd;
}
.cal3 .multi-month-controls .quarter-button {
  display: inline-block;
  width: 25%;
}
.cal3 .multi-month-controls .quarter-button:hover {
  cursor: pointer;
  background-color: #f4f4f4;
}
.clndr-next-button,
.clndr-previous-button,
.clndr-next-year-button,
.clndr-previous-year-button {
  -webkit-user-select: none;
  /* Chrome/Safari */
  -moz-user-select: none;
  /* Firefox */
  -ms-user-select: none;
  /* IE10+ */
}
.clndr-next-button.inactive,
.clndr-previous-button.inactive,
.clndr-next-year-button.inactive,
.clndr-previous-year-button.inactive {
  opacity: 0.5;
  cursor: default;
}

A assets/css/_mapbox-gl.scss => assets/css/_mapbox-gl.scss +299 -0
@@ 0,0 1,299 @@
.mapboxgl-map {
    font: 12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
    overflow: hidden;
    position: relative;
    -webkit-tap-highlight-color: rgba(0,0,0,0);
}

.mapboxgl-canvas-container.mapboxgl-interactive,
.mapboxgl-ctrl-nav-compass {
    cursor: -webkit-grab;
    cursor: -moz-grab;
    cursor: grab;
}
.mapboxgl-canvas-container.mapboxgl-interactive:active,
.mapboxgl-ctrl-nav-compass:active {
    cursor: -webkit-grabbing;
    cursor: -moz-grabbing;
    cursor: grabbing;
}

.mapboxgl-ctrl-top-left,
.mapboxgl-ctrl-top-right,
.mapboxgl-ctrl-bottom-left,
.mapboxgl-ctrl-bottom-right  { position:absolute; pointer-events:none; z-index:2; }
.mapboxgl-ctrl-top-left      { top:0; left:0; }
.mapboxgl-ctrl-top-right     { top:0; right:0; }
.mapboxgl-ctrl-bottom-left   { bottom:0; left:0; }
.mapboxgl-ctrl-bottom-right  { right:0; bottom:0; }

.mapboxgl-ctrl { clear:both; pointer-events:auto }
.mapboxgl-ctrl-top-left .mapboxgl-ctrl { margin:10px 0 0 10px; float:left; }
.mapboxgl-ctrl-top-right .mapboxgl-ctrl{ margin:10px 10px 0 0; float:right; }
.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl { margin:0 0 10px 10px; float:left; }
.mapboxgl-ctrl-bottom-right .mapboxgl-ctrl { margin:0 10px 10px 0; float:right; }

.mapboxgl-ctrl-group {
    border-radius: 4px;
    -moz-box-shadow: 0px 0px 2px rgba(0,0,0,0.1);
    -webkit-box-shadow: 0px 0px 2px rgba(0,0,0,0.1);
    box-shadow: 0px 0px 0px 2px rgba(0,0,0,0.1);
    overflow: hidden;
    background: #fff;
}
.mapboxgl-ctrl-group > button {
    width: 30px;
    height: 30px;
    display: block;
    padding: 0;
    outline: none;
    border: none;
    border-bottom: 1px solid #ddd;
    box-sizing: border-box;
    background-color: rgba(0,0,0,0);
    cursor: pointer;
}
/* https://bugzilla.mozilla.org/show_bug.cgi?id=140562 */
.mapboxgl-ctrl > button::-moz-focus-inner {
    border: 0;
    padding: 0;
}
.mapboxgl-ctrl > button:last-child {
    border-bottom: 0;
}
.mapboxgl-ctrl > button:hover {
    background-color: rgba(0,0,0,0.05);
}
.mapboxgl-ctrl-icon,
.mapboxgl-ctrl-icon > span.arrow {
    speak: none;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
.mapboxgl-ctrl-icon {
    padding: 5px;
}
.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-out {
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0A%20%20%3Cpath%20style%3D%27fill%3A%23333333%3B%27%20d%3D%27m%207%2C9%20c%20-0.554%2C0%20-1%2C0.446%20-1%2C1%200%2C0.554%200.446%2C1%201%2C1%20l%206%2C0%20c%200.554%2C0%201%2C-0.446%201%2C-1%200%2C-0.554%20-0.446%2C-1%20-1%2C-1%20z%27%20%2F%3E%0A%3C%2Fsvg%3E%0A");
}
.mapboxgl-ctrl-icon.mapboxgl-ctrl-zoom-in {
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0A%20%20%3Cpath%20style%3D%27fill%3A%23333333%3B%27%20d%3D%27M%2010%206%20C%209.446%206%209%206.4459904%209%207%20L%209%209%20L%207%209%20C%206.446%209%206%209.446%206%2010%20C%206%2010.554%206.446%2011%207%2011%20L%209%2011%20L%209%2013%20C%209%2013.55401%209.446%2014%2010%2014%20C%2010.554%2014%2011%2013.55401%2011%2013%20L%2011%2011%20L%2013%2011%20C%2013.554%2011%2014%2010.554%2014%2010%20C%2014%209.446%2013.554%209%2013%209%20L%2011%209%20L%2011%207%20C%2011%206.4459904%2010.554%206%2010%206%20z%27%20%2F%3E%0A%3C%2Fsvg%3E%0A");
}
.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate  {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0D%0A%20%20%3Cpath%20style%3D%27fill%3A%23333%3B%27%20d%3D%27M10%204C9%204%209%205%209%205L9%205.1A5%205%200%200%200%205.1%209L5%209C5%209%204%209%204%2010%204%2011%205%2011%205%2011L5.1%2011A5%205%200%200%200%209%2014.9L9%2015C9%2015%209%2016%2010%2016%2011%2016%2011%2015%2011%2015L11%2014.9A5%205%200%200%200%2014.9%2011L15%2011C15%2011%2016%2011%2016%2010%2016%209%2015%209%2015%209L14.9%209A5%205%200%200%200%2011%205.1L11%205C11%205%2011%204%2010%204zM10%206.5A3.5%203.5%200%200%201%2013.5%2010%203.5%203.5%200%200%201%2010%2013.5%203.5%203.5%200%200%201%206.5%2010%203.5%203.5%200%200%201%2010%206.5zM10%208.3A1.8%201.8%200%200%200%208.3%2010%201.8%201.8%200%200%200%2010%2011.8%201.8%201.8%200%200%200%2011.8%2010%201.8%201.8%200%200%200%2010%208.3z%27%20%2F%3E%0D%0A%3C%2Fsvg%3E");
}
.mapboxgl-ctrl-icon.mapboxgl-ctrl-geolocate.watching  {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0D%0A%20%20%3Cpath%20style%3D%27fill%3A%2300f%3B%27%20d%3D%27M10%204C9%204%209%205%209%205L9%205.1A5%205%200%200%200%205.1%209L5%209C5%209%204%209%204%2010%204%2011%205%2011%205%2011L5.1%2011A5%205%200%200%200%209%2014.9L9%2015C9%2015%209%2016%2010%2016%2011%2016%2011%2015%2011%2015L11%2014.9A5%205%200%200%200%2014.9%2011L15%2011C15%2011%2016%2011%2016%2010%2016%209%2015%209%2015%209L14.9%209A5%205%200%200%200%2011%205.1L11%205C11%205%2011%204%2010%204zM10%206.5A3.5%203.5%200%200%201%2013.5%2010%203.5%203.5%200%200%201%2010%2013.5%203.5%203.5%200%200%201%206.5%2010%203.5%203.5%200%200%201%2010%206.5zM10%208.3A1.8%201.8%200%200%200%208.3%2010%201.8%201.8%200%200%200%2010%2011.8%201.8%201.8%200%200%200%2011.8%2010%201.8%201.8%200%200%200%2010%208.3z%27%20%2F%3E%0D%0A%3C%2Fsvg%3E");
}

.mapboxgl-ctrl-icon.mapboxgl-ctrl-compass > span.arrow {
    width: 20px;
    height: 20px;
    margin: 5px;
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%0A%09%3Cpolygon%20fill%3D%27%23333333%27%20points%3D%276%2C9%2010%2C1%2014%2C9%27%2F%3E%0A%09%3Cpolygon%20fill%3D%27%23CCCCCC%27%20points%3D%276%2C11%2010%2C19%2014%2C11%20%27%2F%3E%0A%3C%2Fsvg%3E");
    background-repeat: no-repeat;
    display: inline-block;
}

.mapboxgl-ctrl.mapboxgl-ctrl-attrib {
    padding: 0 5px;
    background-color: rgba(255, 255, 255, .5);
    margin: 0;
}
.mapboxgl-ctrl-attrib.compact {
    padding-top: 2px;
    padding-bottom: 2px;
    margin: 0 10px 10px 10px;
    position: relative;
    padding-right: 24px;
    background-color: #fff;
    border-radius: 3px 12px 12px 3px;
    visibility: hidden;
}
.mapboxgl-ctrl-attrib.compact:hover {
    visibility: visible;
}
.mapboxgl-ctrl-attrib.compact:after {
    content: '';
    cursor: pointer;
    position: absolute;
    bottom: 0;
    right: 0;
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D%270%200%2020%2020%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%0D%0A%09%3Cpath%20fill%3D%27%23333333%27%20fill-rule%3D%27evenodd%27%20d%3D%27M4%2C10a6%2C6%200%201%2C0%2012%2C0a6%2C6%200%201%2C0%20-12%2C0%20M9%2C7a1%2C1%200%201%2C0%202%2C0a1%2C1%200%201%2C0%20-2%2C0%20M9%2C10a1%2C1%200%201%2C1%202%2C0l0%2C3a1%2C1%200%201%2C1%20-2%2C0%27%20%2F%3E%0D%0A%3C%2Fsvg%3E");
    background-color: rgba(255, 255, 255, .5);
    width: 24px;
    height: 24px;
    box-sizing: border-box;
    visibility: visible;
    border-radius: 12px;
}
.mapboxgl-ctrl-attrib a {
    color: rgba(0,0,0,0.75);
    text-decoration: none;
}
.mapboxgl-ctrl-attrib a:hover {
    color: inherit;
    text-decoration: underline;
}
.mapboxgl-ctrl-attrib .mapbox-improve-map {
    font-weight: bold;
    margin-left: 2px;
}

.mapboxgl-ctrl-scale {
    background-color: rgba(255,255,255,0.75);
    font-size: 10px;
    border-width: medium 2px 2px;
    border-style: none solid solid;
    border-color: #333;
    padding: 0 5px;
    color: #333;
}

.mapboxgl-popup {
    position: absolute;
    top: 0;
    left: 0;
    display: -webkit-flex;
    display: flex;
    will-change: transform;
    pointer-events: none;
}
.mapboxgl-popup-anchor-top,
.mapboxgl-popup-anchor-top-left,
.mapboxgl-popup-anchor-top-right {
    -webkit-flex-direction: column;
    flex-direction: column;
}
.mapboxgl-popup-anchor-bottom,
.mapboxgl-popup-anchor-bottom-left,
.mapboxgl-popup-anchor-bottom-right {
    -webkit-flex-direction: column-reverse;
    flex-direction: column-reverse;
}
.mapboxgl-popup-anchor-left {
    -webkit-flex-direction: row;
    flex-direction: row;
}
.mapboxgl-popup-anchor-right {
    -webkit-flex-direction: row-reverse;
    flex-direction: row-reverse;
}
.mapboxgl-popup-tip {
    width: 0;
    height: 0;
    border: 10px solid transparent;
    z-index: 1;
}
.mapboxgl-popup-anchor-top .mapboxgl-popup-tip {
    -webkit-align-self: center;
    align-self: center;
    border-top: none;
    border-bottom-color: #fff;
}
.mapboxgl-popup-anchor-top-left .mapboxgl-popup-tip {
    -webkit-align-self: flex-start;
    align-self: flex-start;
    border-top: none;
    border-left: none;
    border-bottom-color: #fff;
}
.mapboxgl-popup-anchor-top-right .mapboxgl-popup-tip {
    -webkit-align-self: flex-end;
    align-self: flex-end;
    border-top: none;
    border-right: none;
    border-bottom-color: #fff;
}
.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip {
    -webkit-align-self: center;
    align-self: center;
    border-bottom: none;
    border-top-color: #fff;
}
.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-tip {
    -webkit-align-self: flex-start;
    align-self: flex-start;
    border-bottom: none;
    border-left: none;
    border-top-color: #fff;
}
.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-tip {
    -webkit-align-self: flex-end;
    align-self: flex-end;
    border-bottom: none;
    border-right: none;
    border-top-color: #fff;
}
.mapboxgl-popup-anchor-left .mapboxgl-popup-tip {
    -webkit-align-self: center;
    align-self: center;
    border-left: none;
    border-right-color: #fff;
}
.mapboxgl-popup-anchor-right .mapboxgl-popup-tip {
    -webkit-align-self: center;
    align-self: center;
    border-right: none;
    border-left-color: #fff;
}
.mapboxgl-popup-close-button {
    position: absolute;
    right: 0;
    top: 0;
    border: none;
    border-radius: 0 3px 0 0;
    cursor: pointer;
    background-color: rgba(0,0,0,0);
}
.mapboxgl-popup-close-button:hover {
    background-color: rgba(0,0,0,0.05);
}
.mapboxgl-popup-content {
    position: relative;
    background: #fff;
    border-radius: 3px;
    box-shadow: 0 1px 2px rgba(0,0,0,0.10);
    padding: 10px 10px 15px;
    pointer-events: auto;
}
.mapboxgl-popup-anchor-top-left .mapboxgl-popup-content {
    border-top-left-radius: 0;
}
.mapboxgl-popup-anchor-top-right .mapboxgl-popup-content {
    border-top-right-radius: 0;
}
.mapboxgl-popup-anchor-bottom-left .mapboxgl-popup-content {
    border-bottom-left-radius: 0;
}
.mapboxgl-popup-anchor-bottom-right .mapboxgl-popup-content {
    border-bottom-right-radius: 0;
}

.mapboxgl-marker {
    position: absolute;
    top: 0;
    left: 0;
    will-change: transform;
}

.mapboxgl-crosshair,
.mapboxgl-crosshair .mapboxgl-interactive,
.mapboxgl-crosshair .mapboxgl-interactive:active {
    cursor: crosshair;
}
.mapboxgl-boxzoom {
    position: absolute;
    top: 0;
    left: 0;
    width: 0;
    height: 0;
    background: #fff;
    border: 2px dotted #202020;
    opacity: 0.5;
}
@media print {
    .mapbox-improve-map {
        display:none;
    }
}

A assets/css/commented.min.css => assets/css/commented.min.css +1 -0
@@ 0,0 1,1 @@
.auto-textarea{display:block;overflow:hidden;resize:none;width:100%;box-sizing:border-box;padding:0;margin:7px 0;min-height:36px;font-size:14px;border:none;font-family:sans-serif;background-color:transparent}.auto-textarea:focus{outline:0}.commented_main{font-family:sans-serif;font-size:14px;margin:30px auto;padding:0 10px;box-sizing:border-box}.commented_pic{width:35px!important;height:35px!important;border-radius:24px!important;padding:0!important;margin:0!important}.commented_create{font-size:14px;display:flex}.commented_create .right{margin-left:10px;flex:1}.commented_done-edit{color:#3b9226}.commented_reply{color:#baeaae;cursor:pointer;transition:color .2s;margin-left:5px}.commented_comment:hover .commented_reply{color:#3b9226}.commented_comment{font-size:14px;line-height:1.5;display:flex;position:relative;padding-bottom:15px;border-bottom:1px solid #ddd;margin-top:20px}.commented_comment.commented_comment--has-replies{border-bottom:none}.commented_comment .parent-deleted{color:#9C0000;margin-left:10px;font-size:12px}.commented_comment .display-time{margin-left:10px;color:#bbb;font-size:12px}.commented_comment .right{margin-left:10px;flex:1}.commented_comment .text{margin:5px 0 13px}.commented_comment .text p:first-child{margin-top:0}.commented_comment .text p:last-child{margin-bottom:0}.commented_comment--flagged .fa-circle{color:#ccc}.commented_comment--flagged .display-name{color:#AC6464;margin-left:10px;margin-top:8px}.commented_comment--mine .display-name{color:#797EFF}.commented_replies>.commented_one:first-child .commented_comment{margin-top:0}.commented_comment--reply{margin-left:45px;margin-top:0}.commented_one:not(:last-child)>.commented_comment--reply{border-bottom:none}.add-comment{margin-top:10px;font-size:14px;cursor:pointer;color:#777;margin-left:0;padding-bottom:2px;transition:margin-left .2s ease,color .2s}.add-comment:hover{color:#3b9226;margin-left:10px}.add-comment:before{content:'+';border-radius:20px;padding:0 7px 2px;display:inline-block;margin-left:4px;margin-right:13px;font-size:22px;font-weight:400}.commented_attribution{color:#777;margin-top:30px;font-size:14px;text-align:center}.commented_attribution a{text-decoration:none}.commented_buttons{position:absolute;bottom:5px;right:8px;color:#ccc}.commented_buttons .count{padding-right:5px}.commented_buttons .shown .count{visibility:visible;opacity:1}.commented_buttons .button{opacity:0;cursor:pointer;padding:5px;-webkit-transition:opacity .2s,color .2s;color:#ccc}.commented_buttons .button:hover{color:#000}.commented_comment--editing .commented_buttons .button,.commented_comment:hover .commented_buttons .button{visibility:visible;opacity:1}.commented_buttons .commented_heart--active,.commented_buttons .commented_heart--active:hover{color:red}.commented_buttons .shown{visibility:visible;opacity:1}.commented_buttons .commented_flag--active{color:red;opacity:1;visibility:visible}.commented_buttons .commented_flag--active:hover{color:red}.commented_buttons .commented_edit:hover{color:#3b9226}.commented_buttons .commented_remove:hover{color:red}.commented_login{margin-left:4px;margin-top:15px;padding-bottom:5px}.commented_login button{border:none;background-color:transparent;margin:0 10px 0 0;padding:0;opacity:.4;cursor:pointer}.commented_login button:focus{outline:0}.commented_login button:hover{opacity:1}.commented_login--loading{font-size:12px;line-height:25px}.commented_login--loading i{margin-left:10px}.commented_login-type--github .fa-github{top:-1px}.commented_login-type--facebook .fa-circle{color:#add8e6}.commented_login-type--twitter .fa-circle{color:#00f}.commented_login-type--google .fa-circle{color:red}.commented_login-type--cancel{padding:10px;margin-left:-5px}.commented_logout{border:none;background-color:transparent;color:#D48B8B;padding:5px 10px;cursor:pointer}.commented_inline-body{transform:translate(0,0);transition:transform .2s ease}.commented_inline-body--shifted{transform:translate(-300px,0)}.commented_section{position:relative}.commented_inline{position:absolute;left:100%;top:0;margin-left:10px}.commented_inline .commented_main{position:absolute;left:40px;top:-20px;margin-top:0;width:300px}.commented_inline_flag{background-color:#ccc;color:#fff;transition:opacity .3s ease,background-color .3s ease;position:relative;cursor:pointer;line-height:20px;padding:1px 10px;font-family:sans-serif;border-radius:5px;font-size:14px}.commented_inline_flag:after{width:0;height:0;border-style:solid;border-width:8px 8px 0 0;border-color:#ccc transparent transparent;content:" ";position:absolute;top:100%;left:9px;transition:border-top-color .3s ease}.commented_inline--empty .commented_inline_flag{opacity:0}.commented_section:hover .commented_inline--empty .commented_inline_flag{opacity:1}.commented_inline--showing .commented_inline_flag,.commented_inline_flag:hover{background-color:#777;color:#fff;opacity:1}.commented_inline--showing .commented_inline_flag:after,.commented_inline_flag:hover:after{border-top-color:#777}

A assets/css/comments.css => assets/css/comments.css +78 -0
@@ 0,0 1,78 @@
.commentStream {
  -webkit-font-smoothing: antialiased;
  font-family: 'Overpass', sans-serif!important;
  color: #000;
}

.TabBar__base___1au7_ {
  border-bottom: 2px solid #fff!important;
}

.TabBar__base___1au7_ li {
  color: #000!important;
  border: 1px solid #fcfcfc!important;
  border-left: 2px solid #f8f8f8!important;
  background-color: #fff!important;
  border-radius: 0px!important;
}

.embed__stream hr {
  border-bottom: 2px solid #fff!important;
}

.styles__moderationLink___ACixr a {
  color: #ffffff!important;
}

#coralSignInButton {
  background-color: #451668!important;
}

.coral-plugin-infobox-info {
    background: #f8f8f8!important;
    color: #000!important;
    border-radius: 0px!important;
}

.coral-plugin-infobox-info p {
  margin-top: 0px!important;
  margin-bottom: 0px!important;
}

.Button__button___2b6ei {
  background: #451668!important;
  color: #fff!important;
  font-weight: bold!important;
}

.Button__button___2b6ei:disabled {
  background: #c5c5c5!important;
  color: #fff!important;
}

.coral-plugin-commentbox-textarea {
  padding: 6px 12px;
  font-size: 1em;
  font-weight: 700;
  line-height: 1.6em;
  color: #451668;
  background-color: #fff;
  background-image: none;
  border: 0px;
  border-bottom: 2px solid #d8d8d8;
  border-radius: 2px;
  -webkit-transition: border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;
  -o-transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
  transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;
}

.coral-plugin-commentbox-textarea:focus {
  border-color: #000;
  outline: 0;
  -webkit-box-shadow: inset 0 0px 0px rgba(0, 0, 0, 0.02), 0 0 4px rgba(0, 0, 0, 0.3);
  box-shadow: inset 0 0px 0px rgba(0, 0, 0, 0.02), 0 0 4px rgba(0, 0, 0, 0.3);
}

:focus {
  outline: -webkit-focus-ring-color auto 0px;
}

M assets/css/main.scss => assets/css/main.scss +1 -0
@@ 1,5 1,6 @@
@import 'bootstrap';
@import 'nprogress';
@import 'swipebox';
@import 'mapbox-gl';
@import 'custom';
// ...

A assets/images/404.png => assets/images/404.png +0 -0
A assets/images/clients/aee.png => assets/images/clients/aee.png +0 -0
A assets/images/clients/lingel.png => assets/images/clients/lingel.png +0 -0
A assets/images/gnp-logo.png => assets/images/gnp-logo.png +0 -0
A assets/images/projects/aee-01.jpg => assets/images/projects/aee-01.jpg +0 -0
A assets/images/projects/aee-02.jpg => assets/images/projects/aee-02.jpg +0 -0
A assets/images/projects/aee-03.jpg => assets/images/projects/aee-03.jpg +0 -0
A assets/images/projects/aee-04.jpg => assets/images/projects/aee-04.jpg +0 -0
A assets/images/projects/aee-05.jpg => assets/images/projects/aee-05.jpg +0 -0
A assets/images/projects/aee-06.jpg => assets/images/projects/aee-06.jpg +0 -0
A assets/images/projects/aee-07.jpg => assets/images/projects/aee-07.jpg +0 -0
A assets/images/projects/lingel-01.jpg => assets/images/projects/lingel-01.jpg +0 -0
A assets/images/projects/original/q-windows-14.jpg => assets/images/projects/original/q-windows-14.jpg +0 -0
A assets/images/projects/preview/q-windows-14.jpg => assets/images/projects/preview/q-windows-14.jpg +0 -0
A assets/images/projects/q-windows-14.jpg => assets/images/projects/q-windows-14.jpg +0 -0
A assets/js/Chart.bundle.min.js => assets/js/Chart.bundle.min.js +16 -0
@@ 0,0 1,16 @@
/*!
 * Chart.js
 * http://chartjs.org/
 * Version: 2.5.0
 *
 * Copyright 2017 Nick Downie
 * Released under the MIT license
 * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
 */
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Chart=t()}}(function(){var t;return function t(e,n,i){function a(o,s){if(!n[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(r)return r(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[o]={exports:{}};e[o][0].call(d.exports,function(t){var n=e[o][1][t];return a(n?n:t)},d,d.exports,t,e,n,i)}return n[o].exports}for(var r="function"==typeof require&&require,o=0;o<i.length;o++)a(i[o]);return a}({1:[function(t,e,n){function i(t){if(t){var e=/^#([a-fA-F0-9]{3})$/,n=/^#([a-fA-F0-9]{6})$/,i=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,r=/(\w+)/,o=[0,0,0],s=1,l=t.match(e);if(l){l=l[1];for(var u=0;u<o.length;u++)o[u]=parseInt(l[u]+l[u],16)}else if(l=t.match(n)){l=l[1];for(var u=0;u<o.length;u++)o[u]=parseInt(l.slice(2*u,2*u+2),16)}else if(l=t.match(i)){for(var u=0;u<o.length;u++)o[u]=parseInt(l[u+1]);s=parseFloat(l[4])}else if(l=t.match(a)){for(var u=0;u<o.length;u++)o[u]=Math.round(2.55*parseFloat(l[u+1]));s=parseFloat(l[4])}else if(l=t.match(r)){if("transparent"==l[1])return[0,0,0,0];if(o=x[l[1]],!o)return}for(var u=0;u<o.length;u++)o[u]=b(o[u],0,255);return s=s||0==s?b(s,0,1):1,o[3]=s,o}}function a(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),r=b(parseFloat(n[2]),0,100),o=b(parseFloat(n[3]),0,100),s=b(isNaN(i)?1:i,0,1);return[a,r,o,s]}}}function r(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),r=b(parseFloat(n[2]),0,100),o=b(parseFloat(n[3]),0,100),s=b(isNaN(i)?1:i,0,1);return[a,r,o,s]}}}function o(t){var e=i(t);return e&&e.slice(0,3)}function s(t){var e=a(t);return e&&e.slice(0,3)}function l(t){var e=i(t);return e?e[3]:(e=a(t))?e[3]:(e=r(t))?e[3]:void 0}function u(t){return"#"+y(t[0])+y(t[1])+y(t[2])}function d(t,e){return e<1||t[3]&&t[3]<1?c(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function c(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function h(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"}function f(t,e){var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgba("+n+"%, "+i+"%, "+a+"%, "+(e||t[3]||1)+")"}function g(t,e){return e<1||t[3]&&t[3]<1?m(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function m(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function v(t){return k[t.slice(0,3)]}function b(t,e,n){return Math.min(Math.max(e,t),n)}function y(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var x=t(5);e.exports={getRgba:i,getHsla:a,getRgb:o,getHsl:s,getHwb:r,getAlpha:l,hexString:u,rgbString:d,rgbaString:c,percentString:h,percentaString:f,hslString:g,hslaString:m,hwbString:p,keyword:v};var k={};for(var _ in x)k[x[_]]=_},{5:5}],2:[function(t,e,n){var i=t(4),a=t(1),r=function(t){if(t instanceof r)return t;if(!(this instanceof r))return new r(t);this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var e;if("string"==typeof t)if(e=a.getRgba(t))this.setValues("rgb",e);else if(e=a.getHsla(t))this.setValues("hsl",e);else{if(!(e=a.getHwb(t)))throw new Error('Unable to parse color from string "'+t+'"');this.setValues("hwb",e)}else if("object"==typeof t)if(e=t,void 0!==e.r||void 0!==e.red)this.setValues("rgb",e);else if(void 0!==e.l||void 0!==e.lightness)this.setValues("hsl",e);else if(void 0!==e.v||void 0!==e.value)this.setValues("hsv",e);else if(void 0!==e.w||void 0!==e.whiteness)this.setValues("hwb",e);else{if(void 0===e.c&&void 0===e.cyan)throw new Error("Unable to parse color from object "+JSON.stringify(t));this.setValues("cmyk",e)}};r.prototype={rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t%=360,t=t<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb,e=(299*t[0]+587*t[1]+114*t[2])/1e3;return e<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=this,i=t,a=void 0===e?.5:e,r=2*a-1,o=n.alpha()-i.alpha(),s=((r*o===-1?r:(r+o)/(1+r*o))+1)/2,l=1-s;return this.rgb(s*n.red()+l*i.red(),s*n.green()+l*i.green(),s*n.blue()+l*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new r,i=this.values,a=n.values;for(var o in i)i.hasOwnProperty(o)&&(t=i[o],e={}.toString.call(t),"[object Array]"===e?a[o]=t.slice(0):"[object Number]"===e?a[o]=t:console.error("unexpected color value:",t));return n}},r.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},r.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},r.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},r.prototype.setValues=function(t,e){var n,a=this.values,r=this.spaces,o=this.maxes,s=1;if("alpha"===t)s=e;else if(e.length)a[t]=e.slice(0,t.length),s=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];s=e.a}else if(void 0!==e[r[t][0]]){var l=r[t];for(n=0;n<t.length;n++)a[t][n]=e[l[n]];s=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===s?a.alpha:s)),"alpha"===t)return!1;var u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(o[t][n],a[t][n])),a[t][n]=Math.round(u);for(var d in r)d!==t&&(a[d]=i[t][d](a[t]));return!0},r.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},r.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=r),e.exports=r},{1:1,4:4}],3:[function(t,e,n){function i(t){var e,n,i,a=t[0]/255,r=t[1]/255,o=t[2]/255,s=Math.min(a,r,o),l=Math.max(a,r,o),u=l-s;return l==s?e=0:a==l?e=(r-o)/u:r==l?e=2+(o-a)/u:o==l&&(e=4+(a-r)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=(s+l)/2,n=l==s?0:i<=.5?u/(l+s):u/(2-l-s),[e,100*n,100*i]}function a(t){var e,n,i,a=t[0],r=t[1],o=t[2],s=Math.min(a,r,o),l=Math.max(a,r,o),u=l-s;return n=0==l?0:u/l*1e3/10,l==s?e=0:a==l?e=(r-o)/u:r==l?e=2+(o-a)/u:o==l&&(e=4+(a-r)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=l/255*1e3/10,[e,n,i]}function o(t){var e=t[0],n=t[1],a=t[2],r=i(t)[0],o=1/255*Math.min(e,Math.min(n,a)),a=1-1/255*Math.max(e,Math.max(n,a));return[r,100*o,100*a]}function s(t){var e,n,i,a,r=t[0]/255,o=t[1]/255,s=t[2]/255;return a=Math.min(1-r,1-o,1-s),e=(1-r-a)/(1-a)||0,n=(1-o-a)/(1-a)||0,i=(1-s-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function l(t){return K[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92;var a=.4124*e+.3576*n+.1805*i,r=.2126*e+.7152*n+.0722*i,o=.0193*e+.1192*n+.9505*i;return[100*a,100*r,100*o]}function d(t){var e,n,i,a=u(t),r=a[0],o=a[1],s=a[2];return r/=95.047,o/=100,s/=108.883,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,s=s>.008856?Math.pow(s,1/3):7.787*s+16/116,e=116*o-16,n=500*(r-o),i=200*(o-s),[e,n,i]}function c(t){return Y(d(t))}function h(t){var e,n,i,a,r,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0==s)return r=255*l,[r,r,r];n=l<.5?l*(1+s):l+s-l*s,e=2*l-n,a=[0,0,0];for(var u=0;u<3;u++)i=o+1/3*-(u-1),i<0&&i++,i>1&&i--,r=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*r;return a}function f(t){var e,n,i=t[0],a=t[1]/100,r=t[2]/100;return 0===r?[0,0,0]:(r*=2,a*=r<=1?r:2-r,n=(r+a)/2,e=2*a/(r+a),[i,100*e,100*n])}function m(t){return o(h(t))}function p(t){return s(h(t))}function v(t){return l(h(t))}function y(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-n),s=255*i*(1-n*r),l=255*i*(1-n*(1-r)),i=255*i;switch(a){case 0:return[i,l,o];case 1:return[s,i,o];case 2:return[o,i,l];case 3:return[o,s,i];case 4:return[l,o,i];case 5:return[i,o,s]}}function x(t){var e,n,i=t[0],a=t[1]/100,r=t[2]/100;return n=(2-a)*r,e=a*r,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]}function k(t){return o(y(t))}function _(t){return s(y(t))}function w(t){return l(y(t))}function S(t){var e,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100,u=s+l;switch(u>1&&(s/=u,l/=u),e=Math.floor(6*o),n=1-l,i=6*o-e,0!=(1&e)&&(i=1-i),a=s+i*(n-s),e){default:case 6:case 0:r=n,g=a,b=s;break;case 1:r=a,g=n,b=s;break;case 2:r=s,g=n,b=a;break;case 3:r=s,g=a,b=n;break;case 4:r=a,g=s,b=n;break;case 5:r=n,g=s,b=a}return[255*r,255*g,255*b]}function M(t){return i(S(t))}function D(t){return a(S(t))}function C(t){return s(S(t))}function T(t){return l(S(t))}function P(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100,s=t[3]/100;return e=1-Math.min(1,a*(1-s)+s),n=1-Math.min(1,r*(1-s)+s),i=1-Math.min(1,o*(1-s)+s),[255*e,255*n,255*i]}function I(t){return i(P(t))}function A(t){return a(P(t))}function F(t){return o(P(t))}function O(t){return l(P(t))}function R(t){var e,n,i,a=t[0]/100,r=t[1]/100,o=t[2]/100;return e=3.2406*a+r*-1.5372+o*-.4986,n=a*-.9689+1.8758*r+.0415*o,i=.0557*a+r*-.204+1.057*o,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function L(t){var e,n,i,a=t[0],r=t[1],o=t[2];return a/=95.047,r/=100,o/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,e=116*r-16,n=500*(a-r),i=200*(r-o),[e,n,i]}function V(t){return Y(L(t))}function W(t){var e,n,i,a,r=t[0],o=t[1],s=t[2];return r<=8?(n=100*r/903.3,a=7.787*(n/100)+16/116):(n=100*Math.pow((r+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(o/500+a-16/116)/7.787:95.047*Math.pow(o/500+a,3),i=i/108.883<=.008859?i=108.883*(a-s/200-16/116)/7.787:108.883*Math.pow(a-s/200,3),[e,n,i]}function Y(t){var e,n,i,a=t[0],r=t[1],o=t[2];return e=Math.atan2(o,r),n=360*e/2/Math.PI,n<0&&(n+=360),i=Math.sqrt(r*r+o*o),[a,i,n]}function B(t){return R(W(t))}function z(t){var e,n,i,a=t[0],r=t[1],o=t[2];return i=o/360*2*Math.PI,e=r*Math.cos(i),n=r*Math.sin(i),[a,e,n]}function N(t){return W(z(t))}function H(t){return B(z(t))}function E(t){return J[t]}function U(t){return i(E(t))}function j(t){return a(E(t))}function G(t){return o(E(t))}function q(t){return s(E(t))}function Z(t){return d(E(t))}function X(t){return u(E(t))}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:s,rgb2keyword:l,rgb2xyz:u,rgb2lab:d,rgb2lch:c,hsl2rgb:h,hsl2hsv:f,hsl2hwb:m,hsl2cmyk:p,hsl2keyword:v,hsv2rgb:y,hsv2hsl:x,hsv2hwb:k,hsv2cmyk:_,hsv2keyword:w,hwb2rgb:S,hwb2hsl:M,hwb2hsv:D,hwb2cmyk:C,hwb2keyword:T,cmyk2rgb:P,cmyk2hsl:I,cmyk2hsv:A,cmyk2hwb:F,cmyk2keyword:O,keyword2rgb:E,keyword2hsl:U,keyword2hsv:j,keyword2hwb:G,keyword2cmyk:q,keyword2lab:Z,keyword2xyz:X,xyz2rgb:R,xyz2lab:L,xyz2lch:V,lab2xyz:W,lab2rgb:B,lab2lch:Y,lch2lab:z,lch2xyz:N,lch2rgb:H};var J={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},K={};for(var Q in J)K[JSON.stringify(J[Q])]=Q},{}],4:[function(t,e,n){var i=t(3),a=function(){return new u};for(var r in i){a[r+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(r);var o=/(\w+)2(\w+)/.exec(r),s=o[1],l=o[2];a[s]=a[s]||{},a[s][l]=a[r]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(r)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{3:3}],5:[function(t,e,n){e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],6:[function(e,n,i){!function(e,a){"object"==typeof i&&"undefined"!=typeof n?n.exports=a():"function"==typeof t&&t.amd?t(a):e.moment=a()}(this,function(){"use strict";function t(){return vi.apply(null,arguments)}function i(t){vi=t}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function r(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function o(t){var e;for(e in t)return!1;return!0}function s(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function l(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function u(t,e){var n,i=[];for(n=0;n<t.length;++n)i.push(e(t[n],n));return i}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function c(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,i){return ye(t,e,n,i,!0).utc()}function f(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null}}function g(t){return null==t._pf&&(t._pf=f()),t._pf}function m(t){if(null==t._isValid){var e=g(t),n=yi.call(e.parsedDateParts,function(t){return null!=t}),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function p(t){var e=h(NaN);return null!=t?c(g(e),t):g(e).userInvalidated=!0,e}function v(t){return void 0===t}function b(t,e){var n,i,a;if(v(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),v(e._i)||(t._i=e._i),v(e._f)||(t._f=e._f),v(e._l)||(t._l=e._l),v(e._strict)||(t._strict=e._strict),v(e._tzm)||(t._tzm=e._tzm),v(e._isUTC)||(t._isUTC=e._isUTC),v(e._offset)||(t._offset=e._offset),v(e._pf)||(t._pf=g(e)),v(e._locale)||(t._locale=e._locale),xi.length>0)for(n in xi)i=xi[n],a=e[i],v(a)||(t[i]=a);return t}function y(e){b(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),ki===!1&&(ki=!0,t.updateOffset(this),ki=!1)}function x(t){return t instanceof y||null!=t&&null!=t._isAMomentObject}function k(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function _(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=k(e)),n}function w(t,e,n){var i,a=Math.min(t.length,e.length),r=Math.abs(t.length-e.length),o=0;for(i=0;i<a;i++)(n&&t[i]!==e[i]||!n&&_(t[i])!==_(e[i]))&&o++;return o+r}function S(e){t.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function M(e,n){var i=!0;return c(function(){if(null!=t.deprecationHandler&&t.deprecationHandler(null,e),i){for(var a,r=[],o=0;o<arguments.length;o++){if(a="","object"==typeof arguments[o]){a+="\n["+o+"] ";for(var s in arguments[0])a+=s+": "+arguments[0][s]+", ";a=a.slice(0,-2)}else a=arguments[o];r.push(a)}S(e+"\nArguments: "+Array.prototype.slice.call(r).join("")+"\n"+(new Error).stack),i=!1}return n.apply(this,arguments)},n)}function D(e,n){null!=t.deprecationHandler&&t.deprecationHandler(e,n),_i[e]||(S(n),_i[e]=!0)}function C(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function T(t){var e,n;for(n in t)e=t[n],C(e)?this[n]=e:this["_"+n]=e;this._config=t,this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function P(t,e){var n,i=c({},t);for(n in e)d(e,n)&&(r(t[n])&&r(e[n])?(i[n]={},c(i[n],t[n]),c(i[n],e[n])):null!=e[n]?i[n]=e[n]:delete i[n]);for(n in t)d(t,n)&&!d(e,n)&&r(t[n])&&(i[n]=c({},i[n]));return i}function I(t){null!=t&&this.set(t)}function A(t,e,n){var i=this._calendar[t]||this._calendar.sameElse;return C(i)?i.call(e,n):i}function F(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function O(){return this._invalidDate}function R(t){return this._ordinal.replace("%d",t)}function L(t,e,n,i){var a=this._relativeTime[n];return C(a)?a(t,e,n,i):a.replace(/%d/i,t)}function V(t,e){var n=this._relativeTime[t>0?"future":"past"];return C(n)?n(e):n.replace(/%s/i,e)}function W(t,e){var n=t.toLowerCase();Fi[n]=Fi[n+"s"]=Fi[e]=t}function Y(t){return"string"==typeof t?Fi[t]||Fi[t.toLowerCase()]:void 0}function B(t){var e,n,i={};for(n in t)d(t,n)&&(e=Y(n),e&&(i[e]=t[n]));return i}function z(t,e){Oi[t]=e}function N(t){var e=[];for(var n in t)e.push({unit:n,priority:Oi[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function H(e,n){return function(i){return null!=i?(U(this,e,i),t.updateOffset(this,n),this):E(this,e)}}function E(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function U(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function j(t){return t=Y(t),C(this[t])?this[t]():this}function G(t,e){if("object"==typeof t){t=B(t);for(var n=N(t),i=0;i<n.length;i++)this[n[i].unit](t[n[i].unit])}else if(t=Y(t),C(this[t]))return this[t](e);return this}function q(t,e,n){var i=""+Math.abs(t),a=e-i.length,r=t>=0;return(r?n?"+":"":"-")+Math.pow(10,Math.max(0,a)).toString().substr(1)+i}function Z(t,e,n,i){var a=i;"string"==typeof i&&(a=function(){return this[i]()}),t&&(Wi[t]=a),e&&(Wi[e[0]]=function(){return q(a.apply(this,arguments),e[1],e[2])}),n&&(Wi[n]=function(){return this.localeData().ordinal(a.apply(this,arguments),t)})}function X(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function J(t){var e,n,i=t.match(Ri);for(e=0,n=i.length;e<n;e++)Wi[i[e]]?i[e]=Wi[i[e]]:i[e]=X(i[e]);return function(e){var a,r="";for(a=0;a<n;a++)r+=i[a]instanceof Function?i[a].call(e,t):i[a];return r}}function K(t,e){return t.isValid()?(e=Q(e,t.localeData()),Vi[e]=Vi[e]||J(e),Vi[e](t)):t.localeData().invalidDate()}function Q(t,e){function n(t){return e.longDateFormat(t)||t}var i=5;for(Li.lastIndex=0;i>=0&&Li.test(t);)t=t.replace(Li,n),Li.lastIndex=0,i-=1;return t}function $(t,e,n){ea[t]=C(e)?e:function(t,i){return t&&n?n:e}}function tt(t,e){return d(ea,t)?ea[t](e._strict,e._locale):new RegExp(et(t))}function et(t){return nt(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,i,a){return e||n||i||a}))}function nt(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function it(t,e){var n,i=e;for("string"==typeof t&&(t=[t]),s(e)&&(i=function(t,n){n[e]=_(t)}),n=0;n<t.length;n++)na[t[n]]=i}function at(t,e){it(t,function(t,n,i,a){i._w=i._w||{},e(t,i._w,i,a)})}function rt(t,e,n){null!=e&&d(na,t)&&na[t](e,n._a,n,t)}function ot(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function st(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||fa).test(e)?"format":"standalone"][t.month()]:this._months}function lt(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[fa.test(e)?"format":"standalone"][t.month()]:this._monthsShort}function ut(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],i=0;i<12;++i)r=h([2e3,i]),this._shortMonthsParse[i]=this.monthsShort(r,"").toLocaleLowerCase(),this._longMonthsParse[i]=this.months(r,"").toLocaleLowerCase();return n?"MMM"===e?(a=ha.call(this._shortMonthsParse,o),a!==-1?a:null):(a=ha.call(this._longMonthsParse,o),a!==-1?a:null):"MMM"===e?(a=ha.call(this._shortMonthsParse,o),a!==-1?a:(a=ha.call(this._longMonthsParse,o),a!==-1?a:null)):(a=ha.call(this._longMonthsParse,o),a!==-1?a:(a=ha.call(this._shortMonthsParse,o),a!==-1?a:null))}function dt(t,e,n){var i,a,r;if(this._monthsParseExact)return ut.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),i=0;i<12;i++){if(a=h([2e3,i]),n&&!this._longMonthsParse[i]&&(this._longMonthsParse[i]=new RegExp("^"+this.months(a,"").replace(".","")+"$","i"),this._shortMonthsParse[i]=new RegExp("^"+this.monthsShort(a,"").replace(".","")+"$","i")),n||this._monthsParse[i]||(r="^"+this.months(a,"")+"|^"+this.monthsShort(a,""),this._monthsParse[i]=new RegExp(r.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[i].test(t))return i;if(n&&"MMM"===e&&this._shortMonthsParse[i].test(t))return i;if(!n&&this._monthsParse[i].test(t))return i}}function ct(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=_(e);else if(e=t.localeData().monthsParse(e),!s(e))return t;return n=Math.min(t.date(),ot(t.year(),e)),
t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function ht(e){return null!=e?(ct(this,e),t.updateOffset(this,!0),this):E(this,"Month")}function ft(){return ot(this.year(),this.month())}function gt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||pt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=pa),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function mt(t){return this._monthsParseExact?(d(this,"_monthsRegex")||pt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=va),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function pt(){function t(t,e){return e.length-t.length}var e,n,i=[],a=[],r=[];for(e=0;e<12;e++)n=h([2e3,e]),i.push(this.monthsShort(n,"")),a.push(this.months(n,"")),r.push(this.months(n,"")),r.push(this.monthsShort(n,""));for(i.sort(t),a.sort(t),r.sort(t),e=0;e<12;e++)i[e]=nt(i[e]),a[e]=nt(a[e]);for(e=0;e<24;e++)r[e]=nt(r[e]);this._monthsRegex=new RegExp("^("+r.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+i.join("|")+")","i")}function vt(t){return bt(t)?366:365}function bt(t){return t%4===0&&t%100!==0||t%400===0}function yt(){return bt(this.year())}function xt(t,e,n,i,a,r,o){var s=new Date(t,e,n,i,a,r,o);return t<100&&t>=0&&isFinite(s.getFullYear())&&s.setFullYear(t),s}function kt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function _t(t,e,n){var i=7+e-n,a=(7+kt(t,0,i).getUTCDay()-e)%7;return-a+i-1}function wt(t,e,n,i,a){var r,o,s=(7+n-i)%7,l=_t(t,i,a),u=1+7*(e-1)+s+l;return u<=0?(r=t-1,o=vt(r)+u):u>vt(t)?(r=t+1,o=u-vt(t)):(r=t,o=u),{year:r,dayOfYear:o}}function St(t,e,n){var i,a,r=_t(t.year(),e,n),o=Math.floor((t.dayOfYear()-r-1)/7)+1;return o<1?(a=t.year()-1,i=o+Mt(a,e,n)):o>Mt(t.year(),e,n)?(i=o-Mt(t.year(),e,n),a=t.year()+1):(a=t.year(),i=o),{week:i,year:a}}function Mt(t,e,n){var i=_t(t,e,n),a=_t(t+1,e,n);return(vt(t)-i+a)/7}function Dt(t){return St(t,this._week.dow,this._week.doy).week}function Ct(){return this._week.dow}function Tt(){return this._week.doy}function Pt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function It(t){var e=St(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function At(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function Ft(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Ot(t,e){return t?a(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:this._weekdays}function Rt(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function Lt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Vt(t,e,n){var i,a,r,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],i=0;i<7;++i)r=h([2e3,1]).day(i),this._minWeekdaysParse[i]=this.weekdaysMin(r,"").toLocaleLowerCase(),this._shortWeekdaysParse[i]=this.weekdaysShort(r,"").toLocaleLowerCase(),this._weekdaysParse[i]=this.weekdays(r,"").toLocaleLowerCase();return n?"dddd"===e?(a=ha.call(this._weekdaysParse,o),a!==-1?a:null):"ddd"===e?(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:null):(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null):"dddd"===e?(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null))):"ddd"===e?(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:null))):(a=ha.call(this._minWeekdaysParse,o),a!==-1?a:(a=ha.call(this._weekdaysParse,o),a!==-1?a:(a=ha.call(this._shortWeekdaysParse,o),a!==-1?a:null)))}function Wt(t,e,n){var i,a,r;if(this._weekdaysParseExact)return Vt.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),i=0;i<7;i++){if(a=h([2e3,1]).day(i),n&&!this._fullWeekdaysParse[i]&&(this._fullWeekdaysParse[i]=new RegExp("^"+this.weekdays(a,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[i]=new RegExp("^"+this.weekdaysShort(a,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[i]=new RegExp("^"+this.weekdaysMin(a,"").replace(".",".?")+"$","i")),this._weekdaysParse[i]||(r="^"+this.weekdays(a,"")+"|^"+this.weekdaysShort(a,"")+"|^"+this.weekdaysMin(a,""),this._weekdaysParse[i]=new RegExp(r.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[i].test(t))return i;if(n&&"ddd"===e&&this._shortWeekdaysParse[i].test(t))return i;if(n&&"dd"===e&&this._minWeekdaysParse[i].test(t))return i;if(!n&&this._weekdaysParse[i].test(t))return i}}function Yt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=At(t,this.localeData()),this.add(t-e,"d")):e}function Bt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function zt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=Ft(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function Nt(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=wa),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Ht(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Sa),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Et(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Ut.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Ma),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Ut(){function t(t,e){return e.length-t.length}var e,n,i,a,r,o=[],s=[],l=[],u=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),i=this.weekdaysMin(n,""),a=this.weekdaysShort(n,""),r=this.weekdays(n,""),o.push(i),s.push(a),l.push(r),u.push(i),u.push(a),u.push(r);for(o.sort(t),s.sort(t),l.sort(t),u.sort(t),e=0;e<7;e++)s[e]=nt(s[e]),l[e]=nt(l[e]),u[e]=nt(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+l.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function jt(){return this.hours()%12||12}function Gt(){return this.hours()||24}function qt(t,e){Z(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Zt(t,e){return e._meridiemParse}function Xt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Jt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function Kt(t){return t?t.toLowerCase().replace("_","-"):t}function Qt(t){for(var e,n,i,a,r=0;r<t.length;){for(a=Kt(t[r]).split("-"),e=a.length,n=Kt(t[r+1]),n=n?n.split("-"):null;e>0;){if(i=$t(a.slice(0,e).join("-")))return i;if(n&&n.length>=e&&w(a,n,!0)>=e-1)break;e--}r++}return null}function $t(t){var i=null;if(!Ia[t]&&"undefined"!=typeof n&&n&&n.exports)try{i=Da._abbr,e("./locale/"+t),te(i)}catch(t){}return Ia[t]}function te(t,e){var n;return t&&(n=v(e)?ie(t):ee(t,e),n&&(Da=n)),Da._abbr}function ee(t,e){if(null!==e){var n=Pa;if(e.abbr=t,null!=Ia[t])D("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),n=Ia[t]._config;else if(null!=e.parentLocale){if(null==Ia[e.parentLocale])return Aa[e.parentLocale]||(Aa[e.parentLocale]=[]),Aa[e.parentLocale].push({name:t,config:e}),null;n=Ia[e.parentLocale]._config}return Ia[t]=new I(P(n,e)),Aa[t]&&Aa[t].forEach(function(t){ee(t.name,t.config)}),te(t),Ia[t]}return delete Ia[t],null}function ne(t,e){if(null!=e){var n,i=Pa;null!=Ia[t]&&(i=Ia[t]._config),e=P(i,e),n=new I(e),n.parentLocale=Ia[t],Ia[t]=n,te(t)}else null!=Ia[t]&&(null!=Ia[t].parentLocale?Ia[t]=Ia[t].parentLocale:null!=Ia[t]&&delete Ia[t]);return Ia[t]}function ie(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Da;if(!a(t)){if(e=$t(t))return e;t=[t]}return Qt(t)}function ae(){return Mi(Ia)}function re(t){var e,n=t._a;return n&&g(t).overflow===-2&&(e=n[aa]<0||n[aa]>11?aa:n[ra]<1||n[ra]>ot(n[ia],n[aa])?ra:n[oa]<0||n[oa]>24||24===n[oa]&&(0!==n[sa]||0!==n[la]||0!==n[ua])?oa:n[sa]<0||n[sa]>59?sa:n[la]<0||n[la]>59?la:n[ua]<0||n[ua]>999?ua:-1,g(t)._overflowDayOfYear&&(e<ia||e>ra)&&(e=ra),g(t)._overflowWeeks&&e===-1&&(e=da),g(t)._overflowWeekday&&e===-1&&(e=ca),g(t).overflow=e),t}function oe(t){var e,n,i,a,r,o,s=t._i,l=Fa.exec(s)||Oa.exec(s);if(l){for(g(t).iso=!0,e=0,n=La.length;e<n;e++)if(La[e][1].exec(l[1])){a=La[e][0],i=La[e][2]!==!1;break}if(null==a)return void(t._isValid=!1);if(l[3]){for(e=0,n=Va.length;e<n;e++)if(Va[e][1].exec(l[3])){r=(l[2]||" ")+Va[e][0];break}if(null==r)return void(t._isValid=!1)}if(!i&&null!=r)return void(t._isValid=!1);if(l[4]){if(!Ra.exec(l[4]))return void(t._isValid=!1);o="Z"}t._f=a+(r||"")+(o||""),he(t)}else t._isValid=!1}function se(e){var n=Wa.exec(e._i);return null!==n?void(e._d=new Date(+n[1])):(oe(e),void(e._isValid===!1&&(delete e._isValid,t.createFromInputFallback(e))))}function le(t,e,n){return null!=t?t:null!=e?e:n}function ue(e){var n=new Date(t.now());return e._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function de(t){var e,n,i,a,r=[];if(!t._d){for(i=ue(t),t._w&&null==t._a[ra]&&null==t._a[aa]&&ce(t),t._dayOfYear&&(a=le(t._a[ia],i[ia]),t._dayOfYear>vt(a)&&(g(t)._overflowDayOfYear=!0),n=kt(a,0,t._dayOfYear),t._a[aa]=n.getUTCMonth(),t._a[ra]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=r[e]=i[e];for(;e<7;e++)t._a[e]=r[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[oa]&&0===t._a[sa]&&0===t._a[la]&&0===t._a[ua]&&(t._nextDay=!0,t._a[oa]=0),t._d=(t._useUTC?kt:xt).apply(null,r),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[oa]=24)}}function ce(t){var e,n,i,a,r,o,s,l;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)r=1,o=4,n=le(e.GG,t._a[ia],St(xe(),1,4).year),i=le(e.W,1),a=le(e.E,1),(a<1||a>7)&&(l=!0);else{r=t._locale._week.dow,o=t._locale._week.doy;var u=St(xe(),r,o);n=le(e.gg,t._a[ia],u.year),i=le(e.w,u.week),null!=e.d?(a=e.d,(a<0||a>6)&&(l=!0)):null!=e.e?(a=e.e+r,(e.e<0||e.e>6)&&(l=!0)):a=r}i<1||i>Mt(n,r,o)?g(t)._overflowWeeks=!0:null!=l?g(t)._overflowWeekday=!0:(s=wt(n,i,a,r,o),t._a[ia]=s.year,t._dayOfYear=s.dayOfYear)}function he(e){if(e._f===t.ISO_8601)return void oe(e);e._a=[],g(e).empty=!0;var n,i,a,r,o,s=""+e._i,l=s.length,u=0;for(a=Q(e._f,e._locale).match(Ri)||[],n=0;n<a.length;n++)r=a[n],i=(s.match(tt(r,e))||[])[0],i&&(o=s.substr(0,s.indexOf(i)),o.length>0&&g(e).unusedInput.push(o),s=s.slice(s.indexOf(i)+i.length),u+=i.length),Wi[r]?(i?g(e).empty=!1:g(e).unusedTokens.push(r),rt(r,i,e)):e._strict&&!i&&g(e).unusedTokens.push(r);g(e).charsLeftOver=l-u,s.length>0&&g(e).unusedInput.push(s),e._a[oa]<=12&&g(e).bigHour===!0&&e._a[oa]>0&&(g(e).bigHour=void 0),g(e).parsedDateParts=e._a.slice(0),g(e).meridiem=e._meridiem,e._a[oa]=fe(e._locale,e._a[oa],e._meridiem),de(e),re(e)}function fe(t,e,n){var i;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(i=t.isPM(n),i&&e<12&&(e+=12),i||12!==e||(e=0),e):e}function ge(t){var e,n,i,a,r;if(0===t._f.length)return g(t).invalidFormat=!0,void(t._d=new Date(NaN));for(a=0;a<t._f.length;a++)r=0,e=b({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[a],he(e),m(e)&&(r+=g(e).charsLeftOver,r+=10*g(e).unusedTokens.length,g(e).score=r,(null==i||r<i)&&(i=r,n=e));c(t,n||e)}function me(t){if(!t._d){var e=B(t._i);t._a=u([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),de(t)}}function pe(t){var e=new y(re(ve(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function ve(t){var e=t._i,n=t._f;return t._locale=t._locale||ie(t._l),null===e||void 0===n&&""===e?p({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),x(e)?new y(re(e)):(l(e)?t._d=e:a(n)?ge(t):n?he(t):be(t),m(t)||(t._d=null),t))}function be(e){var n=e._i;void 0===n?e._d=new Date(t.now()):l(n)?e._d=new Date(n.valueOf()):"string"==typeof n?se(e):a(n)?(e._a=u(n.slice(0),function(t){return parseInt(t,10)}),de(e)):"object"==typeof n?me(e):s(n)?e._d=new Date(n):t.createFromInputFallback(e)}function ye(t,e,n,i,s){var l={};return n!==!0&&n!==!1||(i=n,n=void 0),(r(t)&&o(t)||a(t)&&0===t.length)&&(t=void 0),l._isAMomentObject=!0,l._useUTC=l._isUTC=s,l._l=n,l._i=t,l._f=e,l._strict=i,pe(l)}function xe(t,e,n,i){return ye(t,e,n,i,!1)}function ke(t,e){var n,i;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return xe();for(n=e[0],i=1;i<e.length;++i)e[i].isValid()&&!e[i][t](n)||(n=e[i]);return n}function _e(){var t=[].slice.call(arguments,0);return ke("isBefore",t)}function we(){var t=[].slice.call(arguments,0);return ke("isAfter",t)}function Se(t){var e=B(t),n=e.year||0,i=e.quarter||0,a=e.month||0,r=e.week||0,o=e.day||0,s=e.hour||0,l=e.minute||0,u=e.second||0,d=e.millisecond||0;this._milliseconds=+d+1e3*u+6e4*l+1e3*s*60*60,this._days=+o+7*r,this._months=+a+3*i+12*n,this._data={},this._locale=ie(),this._bubble()}function Me(t){return t instanceof Se}function De(t){return t<0?Math.round(-1*t)*-1:Math.round(t)}function Ce(t,e){Z(t,0,0,function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+q(~~(t/60),2)+e+q(~~t%60,2)})}function Te(t,e){var n=(e||"").match(t);if(null===n)return null;var i=n[n.length-1]||[],a=(i+"").match(Na)||["-",0,0],r=+(60*a[1])+_(a[2]);return 0===r?0:"+"===a[0]?r:-r}function Pe(e,n){var i,a;return n._isUTC?(i=n.clone(),a=(x(e)||l(e)?e.valueOf():xe(e).valueOf())-i.valueOf(),i._d.setTime(i._d.valueOf()+a),t.updateOffset(i,!1),i):xe(e).local()}function Ie(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function Ae(e,n){var i,a=this._offset||0;if(!this.isValid())return null!=e?this:NaN;if(null!=e){if("string"==typeof e){if(e=Te(Qi,e),null===e)return this}else Math.abs(e)<16&&(e*=60);return!this._isUTC&&n&&(i=Ie(this)),this._offset=e,this._isUTC=!0,null!=i&&this.add(i,"m"),a!==e&&(!n||this._changeInProgress?qe(this,He(e-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,t.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ie(this)}function Fe(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Oe(t){return this.utcOffset(0,t)}function Re(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ie(this),"m")),this}function Le(){if(null!=this._tzm)this.utcOffset(this._tzm);else if("string"==typeof this._i){var t=Te(Ki,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Ve(t){return!!this.isValid()&&(t=t?xe(t).utcOffset():0,(this.utcOffset()-t)%60===0)}function We(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ye(){if(!v(this._isDSTShifted))return this._isDSTShifted;var t={};if(b(t,this),t=ve(t),t._a){var e=t._isUTC?h(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Be(){return!!this.isValid()&&!this._isUTC}function ze(){return!!this.isValid()&&this._isUTC}function Ne(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function He(t,e){var n,i,a,r=t,o=null;return Me(t)?r={ms:t._milliseconds,d:t._days,M:t._months}:s(t)?(r={},e?r[e]=t:r.milliseconds=t):(o=Ha.exec(t))?(n="-"===o[1]?-1:1,r={y:0,d:_(o[ra])*n,h:_(o[oa])*n,m:_(o[sa])*n,s:_(o[la])*n,ms:_(De(1e3*o[ua]))*n}):(o=Ea.exec(t))?(n="-"===o[1]?-1:1,r={y:Ee(o[2],n),M:Ee(o[3],n),w:Ee(o[4],n),d:Ee(o[5],n),h:Ee(o[6],n),m:Ee(o[7],n),s:Ee(o[8],n)}):null==r?r={}:"object"==typeof r&&("from"in r||"to"in r)&&(a=je(xe(r.from),xe(r.to)),r={},r.ms=a.milliseconds,r.M=a.months),i=new Se(r),Me(t)&&d(t,"_locale")&&(i._locale=t._locale),i}function Ee(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Ue(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function je(t,e){var n;return t.isValid()&&e.isValid()?(e=Pe(e,t),t.isBefore(e)?n=Ue(t,e):(n=Ue(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Ge(t,e){return function(n,i){var a,r;return null===i||isNaN(+i)||(D(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),r=n,n=i,i=r),n="string"==typeof n?+n:n,a=He(n,i),qe(this,a,t),this}}function qe(e,n,i,a){var r=n._milliseconds,o=De(n._days),s=De(n._months);e.isValid()&&(a=null==a||a,r&&e._d.setTime(e._d.valueOf()+r*i),o&&U(e,"Date",E(e,"Date")+o*i),s&&ct(e,E(e,"Month")+s*i),a&&t.updateOffset(e,o||s))}function Ze(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Xe(e,n){var i=e||xe(),a=Pe(i,this).startOf("day"),r=t.calendarFormat(this,a)||"sameElse",o=n&&(C(n[r])?n[r].call(this,i):n[r]);return this.format(o||this.localeData().calendar(r,this,xe(i)))}function Je(){return new y(this)}function Ke(t,e){var n=x(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&(e=Y(v(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())}function Qe(t,e){var n=x(t)?t:xe(t);return!(!this.isValid()||!n.isValid())&&(e=Y(v(e)?"millisecond":e),"millisecond"===e?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())}function $e(t,e,n,i){return i=i||"()",("("===i[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===i[1]?this.isBefore(e,n):!this.isAfter(e,n))}function tn(t,e){var n,i=x(t)?t:xe(t);return!(!this.isValid()||!i.isValid())&&(e=Y(e||"millisecond"),"millisecond"===e?this.valueOf()===i.valueOf():(n=i.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))}function en(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function nn(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function an(t,e,n){var i,a,r,o;return this.isValid()?(i=Pe(t,this),i.isValid()?(a=6e4*(i.utcOffset()-this.utcOffset()),e=Y(e),"year"===e||"month"===e||"quarter"===e?(o=rn(this,i),"quarter"===e?o/=3:"year"===e&&(o/=12)):(r=this-i,o="second"===e?r/1e3:"minute"===e?r/6e4:"hour"===e?r/36e5:"day"===e?(r-a)/864e5:"week"===e?(r-a)/6048e5:r),n?o:k(o)):NaN):NaN}function rn(t,e){var n,i,a=12*(e.year()-t.year())+(e.month()-t.month()),r=t.clone().add(a,"months");return e-r<0?(n=t.clone().add(a-1,"months"),i=(e-r)/(r-n)):(n=t.clone().add(a+1,"months"),i=(e-r)/(n-r)),-(a+i)||0}function on(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function sn(){var t=this.clone().utc();return 0<t.year()&&t.year()<=9999?C(Date.prototype.toISOString)?this.toDate().toISOString():K(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):K(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function ln(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',i=0<this.year()&&this.year()<=9999?"YYYY":"YYYYYY",a="-MM-DD[T]HH:mm:ss.SSS",r=e+'[")]';return this.format(n+i+a+r)}function un(e){e||(e=this.isUtc()?t.defaultFormatUtc:t.defaultFormat);var n=K(this,e);return this.localeData().postformat(n)}function dn(t,e){return this.isValid()&&(x(t)&&t.isValid()||xe(t).isValid())?He({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function cn(t){return this.from(xe(),t)}function hn(t,e){return this.isValid()&&(x(t)&&t.isValid()||xe(t).isValid())?He({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function fn(t){return this.to(xe(),t)}function gn(t){var e;return void 0===t?this._locale._abbr:(e=ie(t),null!=e&&(this._locale=e),this)}function mn(){return this._locale}function pn(t){switch(t=Y(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function vn(t){return t=Y(t),void 0===t||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function bn(){return this._d.valueOf()-6e4*(this._offset||0)}function yn(){return Math.floor(this.valueOf()/1e3)}function xn(){return new Date(this.valueOf())}function kn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function _n(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function wn(){return this.isValid()?this.toISOString():null}function Sn(){return m(this)}function Mn(){return c({},g(this))}function Dn(){return g(this).overflow}function Cn(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Tn(t,e){Z(0,[t,t.length],0,e)}function Pn(t){return On.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function In(t){return On.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function An(){return Mt(this.year(),1,4)}function Fn(){var t=this.localeData()._week;return Mt(this.year(),t.dow,t.doy)}function On(t,e,n,i,a){var r;return null==t?St(this,i,a).year:(r=Mt(t,i,a),e>r&&(e=r),Rn.call(this,t,e,n,i,a))}function Rn(t,e,n,i,a){var r=wt(t,e,n,i,a),o=kt(r.year,0,r.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Ln(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Vn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function Wn(t,e){e[ua]=_(1e3*("0."+t))}function Yn(){return this._isUTC?"UTC":""}function Bn(){return this._isUTC?"Coordinated Universal Time":""}function zn(t){return xe(1e3*t)}function Nn(){return xe.apply(null,arguments).parseZone()}function Hn(t){return t}function En(t,e,n,i){var a=ie(),r=h().set(i,e);return a[n](r,t)}function Un(t,e,n){if(s(t)&&(e=t,t=void 0),t=t||"",null!=e)return En(t,e,n,"month");var i,a=[];for(i=0;i<12;i++)a[i]=En(t,i,n,"month");return a}function jn(t,e,n,i){"boolean"==typeof t?(s(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,s(e)&&(n=e,e=void 0),e=e||"");var a=ie(),r=t?a._week.dow:0;if(null!=n)return En(e,(n+r)%7,i,"day");var o,l=[];for(o=0;o<7;o++)l[o]=En(e,(o+r)%7,i,"day");return l}function Gn(t,e){return Un(t,e,"months")}function qn(t,e){return Un(t,e,"monthsShort")}function Zn(t,e,n){return jn(t,e,n,"weekdays")}function Xn(t,e,n){return jn(t,e,n,"weekdaysShort")}function Jn(t,e,n){return jn(t,e,n,"weekdaysMin")}function Kn(){var t=this._data;return this._milliseconds=tr(this._milliseconds),this._days=tr(this._days),this._months=tr(this._months),t.milliseconds=tr(t.milliseconds),t.seconds=tr(t.seconds),t.minutes=tr(t.minutes),t.hours=tr(t.hours),t.months=tr(t.months),t.years=tr(t.years),this}function Qn(t,e,n,i){var a=He(e,n);return t._milliseconds+=i*a._milliseconds,t._days+=i*a._days,t._months+=i*a._months,t._bubble()}function $n(t,e){return Qn(this,t,e,1)}function ti(t,e){return Qn(this,t,e,-1)}function ei(t){return t<0?Math.floor(t):Math.ceil(t)}function ni(){var t,e,n,i,a,r=this._milliseconds,o=this._days,s=this._months,l=this._data;return r>=0&&o>=0&&s>=0||r<=0&&o<=0&&s<=0||(r+=864e5*ei(ai(s)+o),o=0,s=0),l.milliseconds=r%1e3,t=k(r/1e3),l.seconds=t%60,e=k(t/60),l.minutes=e%60,n=k(e/60),l.hours=n%24,o+=k(n/24),a=k(ii(o)),s+=a,o-=ei(ai(a)),i=k(s/12),s%=12,l.days=o,l.months=s,l.years=i,this}function ii(t){return 4800*t/146097}function ai(t){return 146097*t/4800}function ri(t){var e,n,i=this._milliseconds;if(t=Y(t),"month"===t||"year"===t)return e=this._days+i/864e5,n=this._months+ii(e),"month"===t?n:n/12;switch(e=this._days+Math.round(ai(this._months)),t){case"week":return e/7+i/6048e5;case"day":return e+i/864e5;case"hour":return 24*e+i/36e5;case"minute":return 1440*e+i/6e4;case"second":return 86400*e+i/1e3;case"millisecond":return Math.floor(864e5*e)+i;default:throw new Error("Unknown unit "+t)}}function oi(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*_(this._months/12)}function si(t){return function(){return this.as(t)}}function li(t){return t=Y(t),this[t+"s"]()}function ui(t){return function(){return this._data[t]}}function di(){return k(this.days()/7)}function ci(t,e,n,i,a){return a.relativeTime(e||1,!!n,t,i)}function hi(t,e,n){var i=He(t).abs(),a=pr(i.as("s")),r=pr(i.as("m")),o=pr(i.as("h")),s=pr(i.as("d")),l=pr(i.as("M")),u=pr(i.as("y")),d=a<vr.s&&["s",a]||r<=1&&["m"]||r<vr.m&&["mm",r]||o<=1&&["h"]||o<vr.h&&["hh",o]||s<=1&&["d"]||s<vr.d&&["dd",s]||l<=1&&["M"]||l<vr.M&&["MM",l]||u<=1&&["y"]||["yy",u];return d[2]=e,d[3]=+t>0,d[4]=n,ci.apply(null,d)}function fi(t){return void 0===t?pr:"function"==typeof t&&(pr=t,!0)}function gi(t,e){return void 0!==vr[t]&&(void 0===e?vr[t]:(vr[t]=e,!0))}function mi(t){var e=this.localeData(),n=hi(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function pi(){var t,e,n,i=br(this._milliseconds)/1e3,a=br(this._days),r=br(this._months);t=k(i/60),e=k(t/60),i%=60,t%=60,n=k(r/12),r%=12;var o=n,s=r,l=a,u=e,d=t,c=i,h=this.asSeconds();return h?(h<0?"-":"")+"P"+(o?o+"Y":"")+(s?s+"M":"")+(l?l+"D":"")+(u||d||c?"T":"")+(u?u+"H":"")+(d?d+"M":"")+(c?c+"S":""):"P0D"}var vi,bi;bi=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,i=0;i<n;i++)if(i in e&&t.call(this,e[i],i,e))return!0;return!1};var yi=bi,xi=t.momentProperties=[],ki=!1,_i={};t.suppressDeprecationWarnings=!1,t.deprecationHandler=null;var wi;wi=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)d(t,e)&&n.push(e);return n};var Si,Mi=wi,Di={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Ci={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Ti="Invalid date",Pi="%d",Ii=/\d{1,2}/,Ai={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Fi={},Oi={},Ri=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Li=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Vi={},Wi={},Yi=/\d/,Bi=/\d\d/,zi=/\d{3}/,Ni=/\d{4}/,Hi=/[+-]?\d{6}/,Ei=/\d\d?/,Ui=/\d\d\d\d?/,ji=/\d\d\d\d\d\d?/,Gi=/\d{1,3}/,qi=/\d{1,4}/,Zi=/[+-]?\d{1,6}/,Xi=/\d+/,Ji=/[+-]?\d+/,Ki=/Z|[+-]\d\d:?\d\d/gi,Qi=/Z|[+-]\d\d(?::?\d\d)?/gi,$i=/[+-]?\d+(\.\d{1,3})?/,ta=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ea={},na={},ia=0,aa=1,ra=2,oa=3,sa=4,la=5,ua=6,da=7,ca=8;Si=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1};var ha=Si;Z("M",["MM",2],"Mo",function(){return this.month()+1}),Z("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),Z("MMMM",0,0,function(t){return this.localeData().months(this,t)}),W("month","M"),z("month",8),$("M",Ei),$("MM",Ei,Bi),$("MMM",function(t,e){return e.monthsShortRegex(t)}),$("MMMM",function(t,e){return e.monthsRegex(t)}),it(["M","MM"],function(t,e){e[aa]=_(t)-1}),it(["MMM","MMMM"],function(t,e,n,i){var a=n._locale.monthsParse(t,i,n._strict);null!=a?e[aa]=a:g(n).invalidMonth=t});var fa=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,ga="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ma="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),pa=ta,va=ta;Z("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),Z(0,["YY",2],0,function(){return this.year()%100}),Z(0,["YYYY",4],0,"year"),Z(0,["YYYYY",5],0,"year"),Z(0,["YYYYYY",6,!0],0,"year"),W("year","y"),z("year",1),$("Y",Ji),$("YY",Ei,Bi),$("YYYY",qi,Ni),$("YYYYY",Zi,Hi),$("YYYYYY",Zi,Hi),it(["YYYYY","YYYYYY"],ia),it("YYYY",function(e,n){n[ia]=2===e.length?t.parseTwoDigitYear(e):_(e)}),it("YY",function(e,n){n[ia]=t.parseTwoDigitYear(e)}),it("Y",function(t,e){e[ia]=parseInt(t,10)}),t.parseTwoDigitYear=function(t){return _(t)+(_(t)>68?1900:2e3)};var ba=H("FullYear",!0);Z("w",["ww",2],"wo","week"),Z("W",["WW",2],"Wo","isoWeek"),W("week","w"),W("isoWeek","W"),z("week",5),z("isoWeek",5),$("w",Ei),$("ww",Ei,Bi),$("W",Ei),$("WW",Ei,Bi),at(["w","ww","W","WW"],function(t,e,n,i){e[i.substr(0,1)]=_(t)});var ya={dow:0,doy:6};Z("d",0,"do","day"),Z("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),Z("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),Z("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),Z("e",0,0,"weekday"),Z("E",0,0,"isoWeekday"),W("day","d"),W("weekday","e"),W("isoWeekday","E"),z("day",11),z("weekday",11),z("isoWeekday",11),$("d",Ei),$("e",Ei),$("E",Ei),$("dd",function(t,e){return e.weekdaysMinRegex(t)}),$("ddd",function(t,e){return e.weekdaysShortRegex(t)}),$("dddd",function(t,e){return e.weekdaysRegex(t)}),at(["dd","ddd","dddd"],function(t,e,n,i){var a=n._locale.weekdaysParse(t,i,n._strict);null!=a?e.d=a:g(n).invalidWeekday=t}),at(["d","e","E"],function(t,e,n,i){e[i]=_(t)});var xa="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),ka="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),_a="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wa=ta,Sa=ta,Ma=ta;Z("H",["HH",2],0,"hour"),Z("h",["hh",2],0,jt),Z("k",["kk",2],0,Gt),Z("hmm",0,0,function(){return""+jt.apply(this)+q(this.minutes(),2)}),Z("hmmss",0,0,function(){return""+jt.apply(this)+q(this.minutes(),2)+q(this.seconds(),2)}),Z("Hmm",0,0,function(){return""+this.hours()+q(this.minutes(),2)}),Z("Hmmss",0,0,function(){return""+this.hours()+q(this.minutes(),2)+q(this.seconds(),2)}),qt("a",!0),qt("A",!1),W("hour","h"),z("hour",13),$("a",Zt),$("A",Zt),$("H",Ei),$("h",Ei),$("HH",Ei,Bi),$("hh",Ei,Bi),$("hmm",Ui),$("hmmss",ji),$("Hmm",Ui),$("Hmmss",ji),it(["H","HH"],oa),it(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),it(["h","hh"],function(t,e,n){e[oa]=_(t),g(n).bigHour=!0}),it("hmm",function(t,e,n){var i=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i)),g(n).bigHour=!0}),it("hmmss",function(t,e,n){var i=t.length-4,a=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i,2)),e[la]=_(t.substr(a)),g(n).bigHour=!0}),it("Hmm",function(t,e,n){var i=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i))}),it("Hmmss",function(t,e,n){var i=t.length-4,a=t.length-2;e[oa]=_(t.substr(0,i)),e[sa]=_(t.substr(i,2)),e[la]=_(t.substr(a))});var Da,Ca=/[ap]\.?m?\.?/i,Ta=H("Hours",!0),Pa={calendar:Di,longDateFormat:Ci,invalidDate:Ti,ordinal:Pi,ordinalParse:Ii,relativeTime:Ai,months:ga,monthsShort:ma,week:ya,weekdays:xa,weekdaysMin:_a,weekdaysShort:ka,meridiemParse:Ca},Ia={},Aa={},Fa=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Oa=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Ra=/Z|[+-]\d\d(?::?\d\d)?/,La=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],Va=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],Wa=/^\/?Date\((\-?\d+)/i;
t.createFromInputFallback=M("value provided is not in a recognized ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),t.ISO_8601=function(){};var Ya=M("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:p()}),Ba=M("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=xe.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:p()}),za=function(){return Date.now?Date.now():+new Date};Ce("Z",":"),Ce("ZZ",""),$("Z",Qi),$("ZZ",Qi),it(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Te(Qi,t)});var Na=/([\+\-]|\d\d)/gi;t.updateOffset=function(){};var Ha=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ea=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;He.fn=Se.prototype;var Ua=Ge(1,"add"),ja=Ge(-1,"subtract");t.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",t.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ga=M("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});Z(0,["gg",2],0,function(){return this.weekYear()%100}),Z(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Tn("gggg","weekYear"),Tn("ggggg","weekYear"),Tn("GGGG","isoWeekYear"),Tn("GGGGG","isoWeekYear"),W("weekYear","gg"),W("isoWeekYear","GG"),z("weekYear",1),z("isoWeekYear",1),$("G",Ji),$("g",Ji),$("GG",Ei,Bi),$("gg",Ei,Bi),$("GGGG",qi,Ni),$("gggg",qi,Ni),$("GGGGG",Zi,Hi),$("ggggg",Zi,Hi),at(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,i){e[i.substr(0,2)]=_(t)}),at(["gg","GG"],function(e,n,i,a){n[a]=t.parseTwoDigitYear(e)}),Z("Q",0,"Qo","quarter"),W("quarter","Q"),z("quarter",7),$("Q",Yi),it("Q",function(t,e){e[aa]=3*(_(t)-1)}),Z("D",["DD",2],"Do","date"),W("date","D"),z("date",9),$("D",Ei),$("DD",Ei,Bi),$("Do",function(t,e){return t?e._ordinalParse:e._ordinalParseLenient}),it(["D","DD"],ra),it("Do",function(t,e){e[ra]=_(t.match(Ei)[0],10)});var qa=H("Date",!0);Z("DDD",["DDDD",3],"DDDo","dayOfYear"),W("dayOfYear","DDD"),z("dayOfYear",4),$("DDD",Gi),$("DDDD",zi),it(["DDD","DDDD"],function(t,e,n){n._dayOfYear=_(t)}),Z("m",["mm",2],0,"minute"),W("minute","m"),z("minute",14),$("m",Ei),$("mm",Ei,Bi),it(["m","mm"],sa);var Za=H("Minutes",!1);Z("s",["ss",2],0,"second"),W("second","s"),z("second",15),$("s",Ei),$("ss",Ei,Bi),it(["s","ss"],la);var Xa=H("Seconds",!1);Z("S",0,0,function(){return~~(this.millisecond()/100)}),Z(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),Z(0,["SSS",3],0,"millisecond"),Z(0,["SSSS",4],0,function(){return 10*this.millisecond()}),Z(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),Z(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),Z(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),Z(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),Z(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),W("millisecond","ms"),z("millisecond",16),$("S",Gi,Yi),$("SS",Gi,Bi),$("SSS",Gi,zi);var Ja;for(Ja="SSSS";Ja.length<=9;Ja+="S")$(Ja,Xi);for(Ja="S";Ja.length<=9;Ja+="S")it(Ja,Wn);var Ka=H("Milliseconds",!1);Z("z",0,0,"zoneAbbr"),Z("zz",0,0,"zoneName");var Qa=y.prototype;Qa.add=Ua,Qa.calendar=Xe,Qa.clone=Je,Qa.diff=an,Qa.endOf=vn,Qa.format=un,Qa.from=dn,Qa.fromNow=cn,Qa.to=hn,Qa.toNow=fn,Qa.get=j,Qa.invalidAt=Dn,Qa.isAfter=Ke,Qa.isBefore=Qe,Qa.isBetween=$e,Qa.isSame=tn,Qa.isSameOrAfter=en,Qa.isSameOrBefore=nn,Qa.isValid=Sn,Qa.lang=Ga,Qa.locale=gn,Qa.localeData=mn,Qa.max=Ba,Qa.min=Ya,Qa.parsingFlags=Mn,Qa.set=G,Qa.startOf=pn,Qa.subtract=ja,Qa.toArray=kn,Qa.toObject=_n,Qa.toDate=xn,Qa.toISOString=sn,Qa.inspect=ln,Qa.toJSON=wn,Qa.toString=on,Qa.unix=yn,Qa.valueOf=bn,Qa.creationData=Cn,Qa.year=ba,Qa.isLeapYear=yt,Qa.weekYear=Pn,Qa.isoWeekYear=In,Qa.quarter=Qa.quarters=Ln,Qa.month=ht,Qa.daysInMonth=ft,Qa.week=Qa.weeks=Pt,Qa.isoWeek=Qa.isoWeeks=It,Qa.weeksInYear=Fn,Qa.isoWeeksInYear=An,Qa.date=qa,Qa.day=Qa.days=Yt,Qa.weekday=Bt,Qa.isoWeekday=zt,Qa.dayOfYear=Vn,Qa.hour=Qa.hours=Ta,Qa.minute=Qa.minutes=Za,Qa.second=Qa.seconds=Xa,Qa.millisecond=Qa.milliseconds=Ka,Qa.utcOffset=Ae,Qa.utc=Oe,Qa.local=Re,Qa.parseZone=Le,Qa.hasAlignedHourOffset=Ve,Qa.isDST=We,Qa.isLocal=Be,Qa.isUtcOffset=ze,Qa.isUtc=Ne,Qa.isUTC=Ne,Qa.zoneAbbr=Yn,Qa.zoneName=Bn,Qa.dates=M("dates accessor is deprecated. Use date instead.",qa),Qa.months=M("months accessor is deprecated. Use month instead",ht),Qa.years=M("years accessor is deprecated. Use year instead",ba),Qa.zone=M("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",Fe),Qa.isDSTShifted=M("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Ye);var $a=I.prototype;$a.calendar=A,$a.longDateFormat=F,$a.invalidDate=O,$a.ordinal=R,$a.preparse=Hn,$a.postformat=Hn,$a.relativeTime=L,$a.pastFuture=V,$a.set=T,$a.months=st,$a.monthsShort=lt,$a.monthsParse=dt,$a.monthsRegex=mt,$a.monthsShortRegex=gt,$a.week=Dt,$a.firstDayOfYear=Tt,$a.firstDayOfWeek=Ct,$a.weekdays=Ot,$a.weekdaysMin=Lt,$a.weekdaysShort=Rt,$a.weekdaysParse=Wt,$a.weekdaysRegex=Nt,$a.weekdaysShortRegex=Ht,$a.weekdaysMinRegex=Et,$a.isPM=Xt,$a.meridiem=Jt,te("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===_(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),t.lang=M("moment.lang is deprecated. Use moment.locale instead.",te),t.langData=M("moment.langData is deprecated. Use moment.localeData instead.",ie);var tr=Math.abs,er=si("ms"),nr=si("s"),ir=si("m"),ar=si("h"),rr=si("d"),or=si("w"),sr=si("M"),lr=si("y"),ur=ui("milliseconds"),dr=ui("seconds"),cr=ui("minutes"),hr=ui("hours"),fr=ui("days"),gr=ui("months"),mr=ui("years"),pr=Math.round,vr={s:45,m:45,h:22,d:26,M:11},br=Math.abs,yr=Se.prototype;return yr.abs=Kn,yr.add=$n,yr.subtract=ti,yr.as=ri,yr.asMilliseconds=er,yr.asSeconds=nr,yr.asMinutes=ir,yr.asHours=ar,yr.asDays=rr,yr.asWeeks=or,yr.asMonths=sr,yr.asYears=lr,yr.valueOf=oi,yr._bubble=ni,yr.get=li,yr.milliseconds=ur,yr.seconds=dr,yr.minutes=cr,yr.hours=hr,yr.days=fr,yr.weeks=di,yr.months=gr,yr.years=mr,yr.humanize=mi,yr.toISOString=pi,yr.toString=pi,yr.toJSON=pi,yr.locale=gn,yr.localeData=mn,yr.toIsoString=M("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",pi),yr.lang=Ga,Z("X",0,0,"unix"),Z("x",0,0,"valueOf"),$("x",Ji),$("X",$i),it("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),it("x",function(t,e,n){n._d=new Date(_(t))}),t.version="2.17.1",i(xe),t.fn=Qa,t.min=_e,t.max=we,t.now=za,t.utc=h,t.unix=zn,t.months=Gn,t.isDate=l,t.locale=te,t.invalid=p,t.duration=He,t.isMoment=x,t.weekdays=Zn,t.parseZone=Nn,t.localeData=ie,t.isDuration=Me,t.monthsShort=qn,t.weekdaysMin=Jn,t.defineLocale=ee,t.updateLocale=ne,t.locales=ae,t.weekdaysShort=Xn,t.normalizeUnits=Y,t.relativeTimeRounding=fi,t.relativeTimeThreshold=gi,t.calendarFormat=Ze,t.prototype=Qa,t})},{}],7:[function(t,e,n){var i=t(28)();t(26)(i),t(42)(i),t(22)(i),t(31)(i),t(25)(i),t(21)(i),t(23)(i),t(24)(i),t(29)(i),t(33)(i),t(34)(i),t(32)(i),t(35)(i),t(30)(i),t(27)(i),t(36)(i),t(37)(i),t(38)(i),t(39)(i),t(40)(i),t(45)(i),t(43)(i),t(44)(i),t(46)(i),t(47)(i),t(48)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i),window.Chart=e.exports=i},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,36:36,37:37,38:38,39:39,40:40,42:42,43:43,44:44,45:45,46:46,47:47,48:48,8:8,9:9}],8:[function(t,e,n){"use strict";e.exports=function(t){t.Bar=function(e,n){return n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use strict";e.exports=function(t){t.Bubble=function(e,n){return n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use strict";e.exports=function(t){t.Doughnut=function(e,n){return n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t){t.Line=function(e,n){return n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use strict";e.exports=function(t){t.PolarArea=function(e,n){return n.type="polarArea",new t(e,n)}}},{}],13:[function(t,e,n){"use strict";e.exports=function(t){t.Radar=function(e,n){return n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t){var e={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-1"}],yAxes:[{type:"linear",position:"left",id:"y-axis-1"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}};t.defaults.scatter=e,t.controllers.scatter=t.controllers.line,t.Scatter=function(e,n){return n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bar={hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}},t.controllers.bar=t.DatasetController.extend({dataElementType:t.elements.Rectangle,initialize:function(e,n){t.DatasetController.prototype.initialize.call(this,e,n);var i=this,a=i.getMeta(),r=i.getDataset();a.stack=r.stack,a.bar=!0},getStackCount:function(){var t=this,n=t.getMeta(),i=t.getScaleForId(n.yAxisID),a=[];return e.each(t.chart.data.datasets,function(e,n){var r=t.chart.getDatasetMeta(n);r.bar&&t.chart.isDatasetVisible(n)&&(i.options.stacked===!1||i.options.stacked===!0&&a.indexOf(r.stack)===-1||void 0===i.options.stacked&&(void 0===r.stack||a.indexOf(r.stack)===-1))&&a.push(r.stack)},t),a.length},update:function(t){var n=this;e.each(n.getMeta().data,function(e,i){n.updateElement(e,i,t)},n)},updateElement:function(t,n,i){var a=this,r=a.getMeta(),o=a.getScaleForId(r.xAxisID),s=a.getScaleForId(r.yAxisID),l=s.getBasePixel(),u=a.chart.options.elements.rectangle,d=t.custom||{},c=a.getDataset();t._xScale=o,t._yScale=s,t._datasetIndex=a.index,t._index=n;var h=a.getRuler(n);t._model={x:a.calculateBarX(n,a.index,h),y:i?l:a.calculateBarY(n,a.index),label:a.chart.data.labels[n],datasetLabel:c.label,horizontal:!1,base:i?l:a.calculateBarBase(a.index,n),width:a.calculateBarWidth(h),backgroundColor:d.backgroundColor?d.backgroundColor:e.getValueAtIndexOrDefault(c.backgroundColor,n,u.backgroundColor),borderSkipped:d.borderSkipped?d.borderSkipped:u.borderSkipped,borderColor:d.borderColor?d.borderColor:e.getValueAtIndexOrDefault(c.borderColor,n,u.borderColor),borderWidth:d.borderWidth?d.borderWidth:e.getValueAtIndexOrDefault(c.borderWidth,n,u.borderWidth)},t.pivot()},calculateBarBase:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.yAxisID),r=a.getBaseValue(),o=r;if(a.options.stacked===!0||void 0===a.options.stacked&&void 0!==i.stack){for(var s=n.chart,l=s.data.datasets,u=Number(l[t].data[e]),d=0;d<t;d++){var c=l[d],h=s.getDatasetMeta(d);if(h.bar&&h.yAxisID===a.id&&s.isDatasetVisible(d)&&i.stack===h.stack){var f=Number(c.data[e]);r+=u<0?Math.min(f,o):Math.max(f,o)}}return a.getPixelForValue(r)}return a.getBasePixel()},getRuler:function(){var t=this,e=t.getMeta(),n=t.getScaleForId(e.xAxisID),i=t.getStackCount(),a=n.width/n.ticks.length,r=a*n.options.categoryPercentage,o=(a-a*n.options.categoryPercentage)/2,s=r/i,l=s*n.options.barPercentage,u=s-s*n.options.barPercentage;return{stackCount:i,tickWidth:a,categoryWidth:r,categorySpacing:o,fullBarWidth:s,barWidth:l,barSpacing:u}},calculateBarWidth:function(t){var e=this,n=e.getMeta(),i=e.getScaleForId(n.xAxisID);return i.options.barThickness?i.options.barThickness:t.barWidth},getStackIndex:function(t){var e,n,i=this,a=i.chart.getDatasetMeta(t),r=i.getScaleForId(a.yAxisID),o=[a.stack];for(n=0;n<t;++n)e=this.chart.getDatasetMeta(n),e.bar&&this.chart.isDatasetVisible(n)&&(r.options.stacked===!1||r.options.stacked===!0&&o.indexOf(e.stack)===-1||void 0===r.options.stacked&&(void 0===e.stack||o.indexOf(e.stack)===-1))&&o.push(e.stack);return o.length-1},calculateBarX:function(t,e,n){var i=this,a=i.getMeta(),r=i.getScaleForId(a.xAxisID),o=i.getStackIndex(e),s=r.getPixelForValue(null,t,e,i.chart.isCombo);return s-=i.chart.isCombo?n.tickWidth/2:0,s+n.barWidth/2+n.categorySpacing+n.barWidth*o+n.barSpacing/2+n.barSpacing*o},calculateBarY:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.yAxisID),r=Number(n.getDataset().data[t]);if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var o=a.getBaseValue(),s=o,l=o,u=0;u<e;u++){var d=n.chart.data.datasets[u],c=n.chart.getDatasetMeta(u);if(c.bar&&c.yAxisID===a.id&&n.chart.isDatasetVisible(u)&&i.stack===c.stack){var h=Number(d.data[t]);h<0?l+=h||0:s+=h||0}}return r<0?a.getPixelForValue(l+r):a.getPixelForValue(s+r)}return a.getPixelForValue(r)},draw:function(e){var n,i,a=this,r=e||1,o=a.getMeta().data,s=a.getDataset();for(t.canvasHelpers.clipArea(a.chart.chart.ctx,a.chart.chartArea),n=0,i=o.length;n<i;++n){var l=s.data[n];null===l||void 0===l||isNaN(l)||o[n].transition(r).draw()}t.canvasHelpers.unclipArea(a.chart.chart.ctx)},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;r.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.hoverBackgroundColor,i,e.getHoverColor(r.backgroundColor)),r.borderColor=a.hoverBorderColor?a.hoverBorderColor:e.getValueAtIndexOrDefault(n.hoverBorderColor,i,e.getHoverColor(r.borderColor)),r.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:e.getValueAtIndexOrDefault(n.hoverBorderWidth,i,r.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model,o=this.chart.options.elements.rectangle;r.backgroundColor=a.backgroundColor?a.backgroundColor:e.getValueAtIndexOrDefault(n.backgroundColor,i,o.backgroundColor),r.borderColor=a.borderColor?a.borderColor:e.getValueAtIndexOrDefault(n.borderColor,i,o.borderColor),r.borderWidth=a.borderWidth?a.borderWidth:e.getValueAtIndexOrDefault(n.borderWidth,i,o.borderWidth)}}),t.defaults.horizontalBar={hover:{mode:"label"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var n="";return t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n+": "+t.xLabel}}}},t.controllers.horizontalBar=t.controllers.bar.extend({getStackCount:function(){var t=this,n=t.getMeta(),i=t.getScaleForId(n.xAxisID),a=[];return e.each(t.chart.data.datasets,function(e,n){var r=t.chart.getDatasetMeta(n);r.bar&&t.chart.isDatasetVisible(n)&&(i.options.stacked===!1||i.options.stacked===!0&&a.indexOf(r.stack)===-1||void 0===i.options.stacked&&(void 0===r.stack||a.indexOf(r.stack)===-1))&&a.push(r.stack)},t),a.length},updateElement:function(t,n,i){var a=this,r=a.getMeta(),o=a.getScaleForId(r.xAxisID),s=a.getScaleForId(r.yAxisID),l=o.getBasePixel(),u=t.custom||{},d=a.getDataset(),c=a.chart.options.elements.rectangle;t._xScale=o,t._yScale=s,t._datasetIndex=a.index,t._index=n;var h=a.getRuler(n);t._model={x:i?l:a.calculateBarX(n,a.index),y:a.calculateBarY(n,a.index,h),label:a.chart.data.labels[n],datasetLabel:d.label,horizontal:!0,base:i?l:a.calculateBarBase(a.index,n),height:a.calculateBarHeight(h),backgroundColor:u.backgroundColor?u.backgroundColor:e.getValueAtIndexOrDefault(d.backgroundColor,n,c.backgroundColor),borderSkipped:u.borderSkipped?u.borderSkipped:c.borderSkipped,borderColor:u.borderColor?u.borderColor:e.getValueAtIndexOrDefault(d.borderColor,n,c.borderColor),borderWidth:u.borderWidth?u.borderWidth:e.getValueAtIndexOrDefault(d.borderWidth,n,c.borderWidth)},t.pivot()},calculateBarBase:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.xAxisID),r=a.getBaseValue(),o=r;if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var s=n.chart,l=s.data.datasets,u=Number(l[t].data[e]),d=0;d<t;d++){var c=l[d],h=s.getDatasetMeta(d);if(h.bar&&h.xAxisID===a.id&&s.isDatasetVisible(d)&&i.stack===h.stack){var f=Number(c.data[e]);r+=u<0?Math.min(f,o):Math.max(f,o)}}return a.getPixelForValue(r)}return a.getBasePixel()},getRuler:function(){var t=this,e=t.getMeta(),n=t.getScaleForId(e.yAxisID),i=t.getStackCount(),a=n.height/n.ticks.length,r=a*n.options.categoryPercentage,o=(a-a*n.options.categoryPercentage)/2,s=r/i,l=s*n.options.barPercentage,u=s-s*n.options.barPercentage;return{stackCount:i,tickHeight:a,categoryHeight:r,categorySpacing:o,fullBarHeight:s,barHeight:l,barSpacing:u}},calculateBarHeight:function(t){var e=this,n=e.getMeta(),i=e.getScaleForId(n.yAxisID);return i.options.barThickness?i.options.barThickness:t.barHeight},getStackIndex:function(t){var e,n,i=this,a=i.chart.getDatasetMeta(t),r=i.getScaleForId(a.xAxisID),o=[a.stack];for(n=0;n<t;++n)e=this.chart.getDatasetMeta(n),e.bar&&this.chart.isDatasetVisible(n)&&(r.options.stacked===!1||r.options.stacked===!0&&o.indexOf(e.stack)===-1||void 0===r.options.stacked&&(void 0===e.stack||o.indexOf(e.stack)===-1))&&o.push(e.stack);return o.length-1},calculateBarX:function(t,e){var n=this,i=n.getMeta(),a=n.getScaleForId(i.xAxisID),r=Number(n.getDataset().data[t]);if(a.options.stacked||void 0===a.options.stacked&&void 0!==i.stack){for(var o=a.getBaseValue(),s=o,l=o,u=0;u<e;u++){var d=n.chart.data.datasets[u],c=n.chart.getDatasetMeta(u);if(c.bar&&c.xAxisID===a.id&&n.chart.isDatasetVisible(u)&&i.stack===c.stack){var h=Number(d.data[t]);h<0?l+=h||0:s+=h||0}}return r<0?a.getPixelForValue(l+r):a.getPixelForValue(s+r)}return a.getPixelForValue(r)},calculateBarY:function(t,e,n){var i=this,a=i.getMeta(),r=i.getScaleForId(a.yAxisID),o=i.getStackIndex(e),s=r.getPixelForValue(null,t,e,i.chart.isCombo);return s-=i.chart.isCombo?n.tickHeight/2:0,s+n.barHeight/2+n.categorySpacing+n.barHeight*o+n.barSpacing/2+n.barSpacing*o}})}},{}],16:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bubble={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}},t.controllers.bubble=t.DatasetController.extend({dataElementType:t.elements.Point,update:function(t){var n=this,i=n.getMeta(),a=i.data;e.each(a,function(e,i){n.updateElement(e,i,t)})},updateElement:function(n,i,a){var r=this,o=r.getMeta(),s=r.getScaleForId(o.xAxisID),l=r.getScaleForId(o.yAxisID),u=n.custom||{},d=r.getDataset(),c=d.data[i],h=r.chart.options.elements.point,f=r.index;e.extend(n,{_xScale:s,_yScale:l,_datasetIndex:f,_index:i,_model:{x:a?s.getPixelForDecimal(.5):s.getPixelForValue("object"==typeof c?c:NaN,i,f,r.chart.isCombo),y:a?l.getBasePixel():l.getPixelForValue(c,i,f),radius:a?0:u.radius?u.radius:r.getRadius(c),hitRadius:u.hitRadius?u.hitRadius:e.getValueAtIndexOrDefault(d.hitRadius,i,h.hitRadius)}}),t.DatasetController.prototype.removeHoverStyle.call(r,n,h);var g=n._model;g.skip=u.skip?u.skip:isNaN(g.x)||isNaN(g.y),n.pivot()},getRadius:function(t){return t.r||this.chart.options.elements.point.radius},setHoverStyle:function(n){var i=this;t.DatasetController.prototype.setHoverStyle.call(i,n);var a=i.chart.data.datasets[n._datasetIndex],r=n._index,o=n.custom||{},s=n._model;s.radius=o.hoverRadius?o.hoverRadius:e.getValueAtIndexOrDefault(a.hoverRadius,r,i.chart.options.elements.point.hoverRadius)+i.getRadius(a.data[r])},removeHoverStyle:function(e){var n=this;t.DatasetController.prototype.removeHoverStyle.call(n,e,n.chart.options.elements.point);var i=n.chart.data.datasets[e._datasetIndex].data[e._index],a=e.custom||{},r=e._model;r.radius=a.radius?a.radius:n.getRadius(i)}})}},{}],17:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults;n.doughnut={animation:{animateRotate:!0,animateScale:!1},aspectRatio:1,hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var r=t.getDatasetMeta(0),o=n.datasets[0],s=r.data[a],l=s&&s.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=l.backgroundColor?l.backgroundColor:u(o.backgroundColor,a,d.backgroundColor),h=l.borderColor?l.borderColor:u(o.borderColor,a,d.borderColor),f=l.borderWidth?l.borderWidth:u(o.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(o.data[a])||r.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)a=o.getDatasetMeta(n),a.data[r]&&(a.data[r].hidden=!a.data[r].hidden);o.update()}},cutoutPercentage:50,rotation:Math.PI*-.5,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,n){var i=n.labels[t.index],a=": "+n.datasets[t.datasetIndex].data[t.index];return e.isArray(i)?(i=i.slice(),i[0]+=a):i+=a,i}}}},n.pie=e.clone(n.doughnut),e.extend(n.pie,{cutoutPercentage:0}),t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var n=this,i=n.chart,a=i.chartArea,r=i.options,o=r.elements.arc,s=a.right-a.left-o.borderWidth,l=a.bottom-a.top-o.borderWidth,u=Math.min(s,l),d={x:0,y:0},c=n.getMeta(),h=r.cutoutPercentage,f=r.circumference;if(f<2*Math.PI){var g=r.rotation%(2*Math.PI);g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0);var m=g+f,p={x:Math.cos(g),y:Math.sin(g)},v={x:Math.cos(m),y:Math.sin(m)},b=g<=0&&0<=m||g<=2*Math.PI&&2*Math.PI<=m,y=g<=.5*Math.PI&&.5*Math.PI<=m||g<=2.5*Math.PI&&2.5*Math.PI<=m,x=g<=-Math.PI&&-Math.PI<=m||g<=Math.PI&&Math.PI<=m,k=g<=.5*-Math.PI&&.5*-Math.PI<=m||g<=1.5*Math.PI&&1.5*Math.PI<=m,_=h/100,w={x:x?-1:Math.min(p.x*(p.x<0?1:_),v.x*(v.x<0?1:_)),y:k?-1:Math.min(p.y*(p.y<0?1:_),v.y*(v.y<0?1:_))},S={x:b?1:Math.max(p.x*(p.x>0?1:_),v.x*(v.x>0?1:_)),y:y?1:Math.max(p.y*(p.y>0?1:_),v.y*(v.y>0?1:_))},M={width:.5*(S.x-w.x),height:.5*(S.y-w.y)};u=Math.min(s/M.width,l/M.height),d={x:(S.x+w.x)*-.5,y:(S.y+w.y)*-.5}}i.borderWidth=n.getMaxBorderWidth(c.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(h?i.outerRadius/100*h:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,c.total=n.calculateTotal(),n.outerRadius=i.outerRadius-i.radiusLength*n.getRingIndex(n.index),n.innerRadius=Math.max(n.outerRadius-i.radiusLength,0),e.each(c.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){var a=this,r=a.chart,o=r.chartArea,s=r.options,l=s.animation,u=(o.left+o.right)/2,d=(o.top+o.bottom)/2,c=s.rotation,h=s.rotation,f=a.getDataset(),g=i&&l.animateRotate?0:t.hidden?0:a.calculateCircumference(f.data[n])*(s.circumference/(2*Math.PI)),m=i&&l.animateScale?0:a.innerRadius,p=i&&l.animateScale?0:a.outerRadius,v=e.getValueAtIndexOrDefault;e.extend(t,{_datasetIndex:a.index,_index:n,_model:{x:u+r.offsetX,y:d+r.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:p,innerRadius:m,label:v(f.label,n,r.data.labels[n])}});var b=t._model;this.removeHoverStyle(t),i&&l.animateRotate||(0===n?b.startAngle=s.rotation:b.startAngle=a.getMeta().data[n-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,n=this.getDataset(),i=this.getMeta(),a=0;return e.each(i.data,function(e,i){t=n.data[i],isNaN(t)||e.hidden||(a+=Math.abs(t))}),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var e,n,i=0,a=this.index,r=t.length,o=0;o<r;o++)e=t[o]._model?t[o]._model.borderWidth:0,n=t[o]._chart?t[o]._chart.config.data.datasets[a].hoverBorderWidth:0,i=e>i?e:i,i=n>i?n:i;return i}})}},{}],18:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return n.getValueOrDefault(t.showLine,e.showLines)}var n=t.helpers;t.defaults.line={showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}},t.controllers.line=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,update:function(t){var i,a,r,o=this,s=o.getMeta(),l=s.dataset,u=s.data||[],d=o.chart.options,c=d.elements.line,h=o.getScaleForId(s.yAxisID),f=o.getDataset(),g=e(f,d);for(g&&(r=l.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),l._scale=h,l._datasetIndex=o.index,l._children=u,l._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:r.tension?r.tension:n.getValueOrDefault(f.lineTension,c.tension),backgroundColor:r.backgroundColor?r.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:f.borderWidth||c.borderWidth,borderColor:r.borderColor?r.borderColor:f.borderColor||c.borderColor,borderCapStyle:r.borderCapStyle?r.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:r.borderDash?r.borderDash:f.borderDash||c.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:r.fill?r.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:r.steppedLine?r.steppedLine:n.getValueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:r.cubicInterpolationMode?r.cubicInterpolationMode:n.getValueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode),scaleTop:h.top,scaleBottom:h.bottom,scaleZero:h.getBasePixel()},l.pivot()),i=0,a=u.length;i<a;++i)o.updateElement(u[i],i,t);for(g&&0!==l._model.tension&&o.updateBezierControlPoints(),i=0,a=u.length;i<a;++i)u[i].pivot()},getPointBackgroundColor:function(t,e){var i=this.chart.options.elements.point.backgroundColor,a=this.getDataset(),r=t.custom||{};return r.backgroundColor?i=r.backgroundColor:a.pointBackgroundColor?i=n.getValueAtIndexOrDefault(a.pointBackgroundColor,e,i):a.backgroundColor&&(i=a.backgroundColor),i},getPointBorderColor:function(t,e){var i=this.chart.options.elements.point.borderColor,a=this.getDataset(),r=t.custom||{};return r.borderColor?i=r.borderColor:a.pointBorderColor?i=n.getValueAtIndexOrDefault(a.pointBorderColor,e,i):a.borderColor&&(i=a.borderColor),i},getPointBorderWidth:function(t,e){var i=this.chart.options.elements.point.borderWidth,a=this.getDataset(),r=t.custom||{};return isNaN(r.borderWidth)?isNaN(a.pointBorderWidth)?isNaN(a.borderWidth)||(i=a.borderWidth):i=n.getValueAtIndexOrDefault(a.pointBorderWidth,e,i):i=r.borderWidth,i},updateElement:function(t,e,i){var a,r,o=this,s=o.getMeta(),l=t.custom||{},u=o.getDataset(),d=o.index,c=u.data[e],h=o.getScaleForId(s.yAxisID),f=o.getScaleForId(s.xAxisID),g=o.chart.options.elements.point,m=o.chart.data.labels||[],p=1===m.length||1===u.data.length||o.chart.isCombo;void 0!==u.radius&&void 0===u.pointRadius&&(u.pointRadius=u.radius),void 0!==u.hitRadius&&void 0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),a=f.getPixelForValue("object"==typeof c?c:NaN,e,d,p),r=i?h.getBasePixel():o.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:a,y:r,skip:l.skip||isNaN(a)||isNaN(r),radius:l.radius||n.getValueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:l.pointStyle||n.getValueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:o.getPointBackgroundColor(t,e),borderColor:o.getPointBorderColor(t,e),borderWidth:o.getPointBorderWidth(t,e),tension:s.dataset._model?s.dataset._model.tension:0,steppedLine:!!s.dataset._model&&s.dataset._model.steppedLine,hitRadius:l.hitRadius||n.getValueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var i,a,r,o=this,s=o.chart,l=o.getMeta(),u=o.getScaleForId(l.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=s.data.datasets[i],r=s.getDatasetMeta(i),"line"===r.type&&r.yAxisID===u.id&&s.isDatasetVisible(i)){var h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var f=Number(u.getRightValue(t));return f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){function t(t,e,n){return Math.max(Math.min(t,n),e)}var e,i,a,r,o,s=this,l=s.getMeta(),u=s.chart.chartArea,d=l.data||[];if(l.dataset._model.spanGaps&&(d=d.filter(function(t){return!t._model.skip})),"monotone"===l.dataset._model.cubicInterpolationMode)n.splineCurveMonotone(d);else for(e=0,i=d.length;e<i;++e)a=d[e],r=a._model,o=n.splineCurve(n.previousItem(d,e)._model,r,n.nextItem(d,e)._model,l.dataset._model.tension),r.controlPointPreviousX=o.previous.x,r.controlPointPreviousY=o.previous.y,r.controlPointNextX=o.next.x,r.controlPointNextY=o.next.y;if(s.chart.options.elements.line.capBezierPoints)for(e=0,i=d.length;e<i;++e)r=d[e]._model,r.controlPointPreviousX=t(r.controlPointPreviousX,u.left,u.right),r.controlPointPreviousY=t(r.controlPointPreviousY,u.top,u.bottom),r.controlPointNextX=t(r.controlPointNextX,u.left,u.right),r.controlPointNextY=t(r.controlPointNextY,u.top,u.bottom)},draw:function(n){var i,a,r=this,o=r.getMeta(),s=o.data||[],l=n||1;for(i=0,a=s.length;i<a;++i)s[i].transition(l);for(t.canvasHelpers.clipArea(r.chart.chart.ctx,r.chart.chartArea),e(r.getDataset(),r.chart.options)&&o.dataset.transition(l).draw(),t.canvasHelpers.unclipArea(r.chart.chart.ctx),i=0,a=s.length;i<a;++i)s[i].draw(r.chart.chartArea)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;r.radius=a.hoverRadius||n.getValueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),r.backgroundColor=a.hoverBackgroundColor||n.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,i,n.getHoverColor(r.backgroundColor)),r.borderColor=a.hoverBorderColor||n.getValueAtIndexOrDefault(e.pointHoverBorderColor,i,n.getHoverColor(r.borderColor)),r.borderWidth=a.hoverBorderWidth||n.getValueAtIndexOrDefault(e.pointHoverBorderWidth,i,r.borderWidth)},removeHoverStyle:function(t){var e=this,i=e.chart.data.datasets[t._datasetIndex],a=t._index,r=t.custom||{},o=t._model;void 0!==i.radius&&void 0===i.pointRadius&&(i.pointRadius=i.radius),o.radius=r.radius||n.getValueAtIndexOrDefault(i.pointRadius,a,e.chart.options.elements.point.radius),o.backgroundColor=e.getPointBackgroundColor(t,a),o.borderColor=e.getPointBorderColor(t,a),o.borderWidth=e.getPointBorderWidth(t,a)}})}},{}],19:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.polarArea={scale:{type:"radialLinear",lineArc:!0,ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,aspectRatio:1,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var r=0;r<i[0].data.length;++r)e.push('<li><span style="background-color:'+i[0].backgroundColor[r]+'"></span>'),a[r]&&e.push(a[r]),e.push("</li>");return e.push("</ul>"),e.join("");
},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var r=t.getDatasetMeta(0),o=n.datasets[0],s=r.data[a],l=s.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=l.backgroundColor?l.backgroundColor:u(o.backgroundColor,a,d.backgroundColor),h=l.borderColor?l.borderColor:u(o.borderColor,a,d.borderColor),f=l.borderWidth?l.borderWidth:u(o.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(o.data[a])||r.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,r=e.index,o=this.chart;for(n=0,i=(o.data.datasets||[]).length;n<i;++n)a=o.getDatasetMeta(n),a.data[r].hidden=!a.data[r].hidden;o.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}},t.controllers.polarArea=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,update:function(t){var n=this,i=n.chart,a=i.chartArea,r=n.getMeta(),o=i.options,s=o.elements.arc,l=Math.min(a.right-a.left,a.bottom-a.top);i.outerRadius=Math.max((l-s.borderWidth/2)/2,0),i.innerRadius=Math.max(o.cutoutPercentage?i.outerRadius/100*o.cutoutPercentage:1,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),n.outerRadius=i.outerRadius-i.radiusLength*n.index,n.innerRadius=n.outerRadius-i.radiusLength,r.count=n.countVisibleElements(),e.each(r.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){for(var a=this,r=a.chart,o=a.getDataset(),s=r.options,l=s.animation,u=r.scale,d=e.getValueAtIndexOrDefault,c=r.data.labels,h=a.calculateCircumference(o.data[n]),f=u.xCenter,g=u.yCenter,m=0,p=a.getMeta(),v=0;v<n;++v)isNaN(o.data[v])||p.data[v].hidden||++m;var b=s.startAngle,y=t.hidden?0:u.getDistanceFromCenterForValue(o.data[n]),x=b+h*m,k=x+(t.hidden?0:h),_=l.animateScale?0:u.getDistanceFromCenterForValue(o.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:u,_model:{x:f,y:g,innerRadius:0,outerRadius:i?_:y,startAngle:i&&l.animateRotate?b:x,endAngle:i&&l.animateRotate?b:k,label:d(c,n,c[n])}}),a.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),n=this.getMeta(),i=0;return e.each(n.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},calculateCircumference:function(t){var e=this.getMeta().count;return e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{}],20:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.radar={aspectRatio:1,scale:{type:"radialLinear"},elements:{line:{tension:0}}},t.controllers.radar=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,linkScales:e.noop,update:function(t){var n=this,i=n.getMeta(),a=i.dataset,r=i.data,o=a.custom||{},s=n.getDataset(),l=n.chart.options.elements.line,u=n.chart.scale;void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),e.extend(i.dataset,{_datasetIndex:n.index,_children:r,_loop:!0,_model:{tension:o.tension?o.tension:e.getValueOrDefault(s.lineTension,l.tension),backgroundColor:o.backgroundColor?o.backgroundColor:s.backgroundColor||l.backgroundColor,borderWidth:o.borderWidth?o.borderWidth:s.borderWidth||l.borderWidth,borderColor:o.borderColor?o.borderColor:s.borderColor||l.borderColor,fill:o.fill?o.fill:void 0!==s.fill?s.fill:l.fill,borderCapStyle:o.borderCapStyle?o.borderCapStyle:s.borderCapStyle||l.borderCapStyle,borderDash:o.borderDash?o.borderDash:s.borderDash||l.borderDash,borderDashOffset:o.borderDashOffset?o.borderDashOffset:s.borderDashOffset||l.borderDashOffset,borderJoinStyle:o.borderJoinStyle?o.borderJoinStyle:s.borderJoinStyle||l.borderJoinStyle,scaleTop:u.top,scaleBottom:u.bottom,scaleZero:u.getBasePosition()}}),i.dataset.pivot(),e.each(r,function(e,i){n.updateElement(e,i,t)},n),n.updateBezierControlPoints()},updateElement:function(t,n,i){var a=this,r=t.custom||{},o=a.getDataset(),s=a.chart.scale,l=a.chart.options.elements.point,u=s.getPointPositionForValue(n,o.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:s,_model:{x:i?s.xCenter:u.x,y:i?s.yCenter:u.y,tension:r.tension?r.tension:e.getValueOrDefault(o.lineTension,a.chart.options.elements.line.tension),radius:r.radius?r.radius:e.getValueAtIndexOrDefault(o.pointRadius,n,l.radius),backgroundColor:r.backgroundColor?r.backgroundColor:e.getValueAtIndexOrDefault(o.pointBackgroundColor,n,l.backgroundColor),borderColor:r.borderColor?r.borderColor:e.getValueAtIndexOrDefault(o.pointBorderColor,n,l.borderColor),borderWidth:r.borderWidth?r.borderWidth:e.getValueAtIndexOrDefault(o.pointBorderWidth,n,l.borderWidth),pointStyle:r.pointStyle?r.pointStyle:e.getValueAtIndexOrDefault(o.pointStyle,n,l.pointStyle),hitRadius:r.hitRadius?r.hitRadius:e.getValueAtIndexOrDefault(o.hitRadius,n,l.hitRadius)}}),t._model.skip=r.skip?r.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,n=this.getMeta();e.each(n.data,function(i,a){var r=i._model,o=e.splineCurve(e.previousItem(n.data,a,!0)._model,r,e.nextItem(n.data,a,!0)._model,r.tension);r.controlPointPreviousX=Math.max(Math.min(o.previous.x,t.right),t.left),r.controlPointPreviousY=Math.max(Math.min(o.previous.y,t.bottom),t.top),r.controlPointNextX=Math.max(Math.min(o.next.x,t.right),t.left),r.controlPointNextY=Math.max(Math.min(o.next.y,t.bottom),t.top),i.pivot()})},draw:function(t){var n=this.getMeta(),i=t||1;e.each(n.data,function(t){t.transition(i)}),n.dataset.transition(i).draw(),e.each(n.data,function(t){t.draw()})},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,r=t._model;r.radius=i.hoverRadius?i.hoverRadius:e.getValueAtIndexOrDefault(n.pointHoverRadius,a,this.chart.options.elements.point.hoverRadius),r.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.pointHoverBackgroundColor,a,e.getHoverColor(r.backgroundColor)),r.borderColor=i.hoverBorderColor?i.hoverBorderColor:e.getValueAtIndexOrDefault(n.pointHoverBorderColor,a,e.getHoverColor(r.borderColor)),r.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:e.getValueAtIndexOrDefault(n.pointHoverBorderWidth,a,r.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,r=t._model,o=this.chart.options.elements.point;r.radius=i.radius?i.radius:e.getValueAtIndexOrDefault(n.radius,a,o.radius),r.backgroundColor=i.backgroundColor?i.backgroundColor:e.getValueAtIndexOrDefault(n.pointBackgroundColor,a,o.backgroundColor),r.borderColor=i.borderColor?i.borderColor:e.getValueAtIndexOrDefault(n.pointBorderColor,a,o.borderColor),r.borderWidth=i.borderWidth?i.borderWidth:e.getValueAtIndexOrDefault(n.pointBorderWidth,a,o.borderWidth)}})}},{}],21:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.animation={duration:1e3,easing:"easeOutQuart",onProgress:e.noop,onComplete:e.noop},t.Animation=t.Element.extend({currentStep:null,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var a=this;i||(t.animating=!0);for(var r=0;r<a.animations.length;++r)if(a.animations[r].chartInstance===t)return void(a.animations[r].animationObject=e);a.animations.push({chartInstance:t,animationObject:e}),1===a.animations.length&&a.requestAnimationFrame()},cancelAnimation:function(t){var n=e.findIndex(this.animations,function(e){return e.chartInstance===t});n!==-1&&(this.animations.splice(n,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=e.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1);for(var i=0;i<t.animations.length;)null===t.animations[i].animationObject.currentStep&&(t.animations[i].animationObject.currentStep=0),t.animations[i].animationObject.currentStep+=1+n,t.animations[i].animationObject.currentStep>t.animations[i].animationObject.numSteps&&(t.animations[i].animationObject.currentStep=t.animations[i].animationObject.numSteps),t.animations[i].animationObject.render(t.animations[i].chartInstance,t.animations[i].animationObject),t.animations[i].animationObject.onAnimationProgress&&t.animations[i].animationObject.onAnimationProgress.call&&t.animations[i].animationObject.onAnimationProgress.call(t.animations[i].chartInstance,t.animations[i]),t.animations[i].animationObject.currentStep===t.animations[i].animationObject.numSteps?(t.animations[i].animationObject.onAnimationComplete&&t.animations[i].animationObject.onAnimationComplete.call&&t.animations[i].animationObject.onAnimationComplete.call(t.animations[i].chartInstance,t.animations[i]),t.animations[i].chartInstance.animating=!1,t.animations.splice(i,1)):++i;var a=Date.now(),r=(a-e)/t.frameDuration;t.dropFrames+=r,t.animations.length>0&&t.requestAnimationFrame()}}}},{}],22:[function(t,e,n){"use strict";e.exports=function(t){var e=t.canvasHelpers={};e.drawPoint=function(e,n,i,a,r){var o,s,l,u,d,c;if("object"==typeof n&&(o=n.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return void e.drawImage(n,a-n.width/2,r-n.height/2);if(!(isNaN(i)||i<=0)){switch(n){default:e.beginPath(),e.arc(a,r,i,0,2*Math.PI),e.closePath(),e.fill();break;case"triangle":e.beginPath(),s=3*i/Math.sqrt(3),d=s*Math.sqrt(3)/2,e.moveTo(a-s/2,r+d/3),e.lineTo(a+s/2,r+d/3),e.lineTo(a,r-2*d/3),e.closePath(),e.fill();break;case"rect":c=1/Math.SQRT2*i,e.beginPath(),e.fillRect(a-c,r-c,2*c,2*c),e.strokeRect(a-c,r-c,2*c,2*c);break;case"rectRounded":var h=i/Math.SQRT2,f=a-h,g=r-h,m=Math.SQRT2*i;t.helpers.drawRoundedRectangle(e,f,g,m,m,i/2),e.fill();break;case"rectRot":c=1/Math.SQRT2*i,e.beginPath(),e.moveTo(a-c,r),e.lineTo(a,r+c),e.lineTo(a+c,r),e.lineTo(a,r-c),e.closePath(),e.fill();break;case"cross":e.beginPath(),e.moveTo(a,r+i),e.lineTo(a,r-i),e.moveTo(a-i,r),e.lineTo(a+i,r),e.closePath();break;case"crossRot":e.beginPath(),l=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-l,r-u),e.lineTo(a+l,r+u),e.moveTo(a-l,r+u),e.lineTo(a+l,r-u),e.closePath();break;case"star":e.beginPath(),e.moveTo(a,r+i),e.lineTo(a,r-i),e.moveTo(a-i,r),e.lineTo(a+i,r),l=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-l,r-u),e.lineTo(a+l,r+u),e.moveTo(a-l,r+u),e.lineTo(a+l,r-u),e.closePath();break;case"line":e.beginPath(),e.moveTo(a-i,r),e.lineTo(a+i,r),e.closePath();break;case"dash":e.beginPath(),e.moveTo(a,r),e.lineTo(a+i,r),e.closePath()}e.stroke()}},e.clipArea=function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},e.unclipArea=function(t){t.restore()}}},{}],23:[function(t,e,n){"use strict";e.exports=function(t){function e(e){e=e||{};var n=e.data=e.data||{};return n.datasets=n.datasets||[],n.labels=n.labels||[],e.options=i.configMerge(t.defaults.global,t.defaults[e.type],e.options||{}),e}function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}var i=t.helpers,a=t.plugins,r=t.platform;t.types={},t.instances={},t.controllers={},t.Controller=function(n,a,o){var s=this;a=e(a);var l=r.acquireContext(n,a),u=l&&l.canvas,d=u&&u.height,c=u&&u.width;return o.ctx=l,o.canvas=u,o.config=a,o.width=c,o.height=d,o.aspectRatio=d?c/d:null,s.id=i.uid(),s.chart=o,s.config=a,s.options=a.options,s._bufferedRender=!1,t.instances[s.id]=s,Object.defineProperty(s,"data",{get:function(){return s.config.data}}),l&&u?(s.initialize(),s.update(),s):(console.error("Failed to create chart: can't acquire context from the given item"),s)},i.extend(t.Controller.prototype,{initialize:function(){var t=this;return a.notify(t,"beforeInit"),i.retinaScale(t.chart),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),a.notify(t,"afterInit"),t},clear:function(){return i.clear(this.chart),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,n=e.chart,r=e.options,o=n.canvas,s=r.maintainAspectRatio&&n.aspectRatio||null,l=Math.floor(i.getMaximumWidth(o)),u=Math.floor(s?l/s:i.getMaximumHeight(o));if((n.width!==l||n.height!==u)&&(o.width=n.width=l,o.height=n.height=u,o.style.width=l+"px",o.style.height=u+"px",i.retinaScale(n),!t)){var d={width:l,height:u};a.notify(e,"resize",[d]),e.options.onResize&&e.options.onResize(e,d),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;i.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),i.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var e=this,n=e.options,a=e.scales={},r=[];n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0}),i.each(r,function(n){var r=n.options,o=i.getValueOrDefault(r.type,n.dtype),s=t.scaleService.getScaleConstructor(o);if(s){var l=new s({id:r.id,options:r,ctx:e.chart.ctx,chart:e});a[l.id]=l,n.isDefault&&(e.scale=l)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,n=[],a=[];if(i.each(e.data.datasets,function(i,r){var o=e.getDatasetMeta(r);o.type||(o.type=i.type||e.config.type),n.push(o.type),o.controller?o.controller.updateIndex(r):(o.controller=new t.controllers[o.type](e,r),a.push(o.controller))},e),n.length>1)for(var r=1;r<n.length;r++)if(n[r]!==n[r-1]){e.isCombo=!0;break}return a},resetElements:function(){var t=this;i.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t,e){var r=this;if(n(r),a.notify(r,"beforeUpdate")!==!1){r.tooltip._data=r.data;var o=r.buildOrUpdateControllers();i.each(r.data.datasets,function(t,e){r.getDatasetMeta(e).controller.buildOrUpdateElements()},r),r.updateLayout(),i.each(o,function(t){t.reset()}),r.updateDatasets(),a.notify(r,"afterUpdate"),r._bufferedRender?r._bufferedRequest={lazy:e,duration:t}:r.render(t,e)}},updateLayout:function(){var e=this;a.notify(e,"beforeLayout")!==!1&&(t.layoutService.update(this,this.chart.width,this.chart.height),a.notify(e,"afterScaleUpdate"),a.notify(e,"afterLayout"))},updateDatasets:function(){var t=this;if(a.notify(t,"beforeDatasetsUpdate")!==!1){for(var e=0,n=t.data.datasets.length;e<n;++e)t.getDatasetMeta(e).controller.update();a.notify(t,"afterDatasetsUpdate")}},render:function(e,n){var r=this;if(a.notify(r,"beforeRender")!==!1){var o=r.options.animation,s=function(){a.notify(r,"afterRender");var t=o&&o.onComplete;t&&t.call&&t.call(r)};if(o&&("undefined"!=typeof e&&0!==e||"undefined"==typeof e&&0!==o.duration)){var l=new t.Animation;l.numSteps=(e||o.duration)/16.66,l.easing=o.easing,l.render=function(t,e){var n=i.easingEffects[e.easing],a=e.currentStep/e.numSteps,r=n(a);t.draw(r,a,e.currentStep)},l.onAnimationProgress=o.onProgress,l.onAnimationComplete=s,t.animationService.addAnimation(r,l,e,n)}else r.draw(),s();return r}},draw:function(t){var e=this;e.clear(),void 0!==t&&null!==t||(t=1),a.notify(e,"beforeDraw",[t])!==!1&&(i.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e.tooltip.transition(t).draw(),a.notify(e,"afterDraw",[t]))},drawDatasets:function(t){var e=this;a.notify(e,"beforeDatasetsDraw",[t])!==!1&&(i.each(e.data.datasets,function(n,i){e.isDatasetVisible(i)&&e.getDatasetMeta(i).controller.draw(t)},e,!0),a.notify(e,"afterDatasetsDraw",[t]))},getElementAtEvent:function(e){return t.Interaction.modes.single(this,e)},getElementsAtEvent:function(e){return t.Interaction.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return t.Interaction.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,n,i){var a=t.Interaction.modes[n];return"function"==typeof a?a(this,e,i):[]},getDatasetAtEvent:function(e){return t.Interaction.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(t){var e=this,n=e.data.datasets[t];n._meta||(n._meta={});var i=n._meta[e.id];return i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){var e,n,o,s=this,l=s.chart.canvas;for(s.stop(),n=0,o=s.data.datasets.length;n<o;++n)e=s.getDatasetMeta(n),e.controller&&(e.controller.destroy(),e.controller=null);l&&(s.unbindEvents(),i.clear(s.chart),r.releaseContext(s.chart.ctx),s.chart.canvas=null,s.chart.ctx=null),a.notify(s,"destroy"),delete t.instances[s.id]},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e.chart,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e),e.tooltip.initialize()},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};i.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,i.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var i,a,r,o=n?"setHoverStyle":"removeHoverStyle";for(a=0,r=t.length;a<r;++a)i=t[a],i&&this.getDatasetMeta(i._datasetIndex).controller[o](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(a.notify(e,"beforeEvent",[t])!==!1){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);i|=n&&n.handleEvent(t),a.notify(e,"afterEvent",[t]);var r=e._bufferedRequest;return r?e.render(r.duration,r.lazy):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e=this,n=e.options||{},a=n.hover,r=!1;return e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,a.mode,a),a.onHover&&a.onHover.call(e,t.native,e.active),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,a.mode,!1),e.active.length&&a.mode&&e.updateHoverStyle(e.active,a.mode,!0),r=!i.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,r}})}},{}],24:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t._chartjs?void t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),void a.forEach(function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),r=a.apply(this,e);return i.each(t._chartjs.listeners,function(t){"function"==typeof t[n]&&t[n].apply(t,e)}),r}})}))}function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,r=i.indexOf(e);r!==-1&&i.splice(r,1),i.length>0||(a.forEach(function(e){delete t[e]}),delete t._chartjs)}}var i=t.helpers,a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var t=this,e=t.datasetElementType;return e&&new e({_chart:t.chart.chart,_datasetIndex:t.index})},createMetaData:function(t){var e=this,n=e.dataElementType;return n&&new n({_chart:e.chart.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],r=i.data;for(t=0,e=a.length;t<e;++t)r[t]=r[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,draw:function(t){var e,n,i=t||1,a=this.getMeta().data;for(e=0,n=a.length;e<n;++e)a[e].transition(i).draw()},removeHoverStyle:function(t,e){var n=this.chart.data.datasets[t._datasetIndex],a=t._index,r=t.custom||{},o=i.getValueAtIndexOrDefault,s=t._model;s.backgroundColor=r.backgroundColor?r.backgroundColor:o(n.backgroundColor,a,e.backgroundColor),s.borderColor=r.borderColor?r.borderColor:o(n.borderColor,a,e.borderColor),s.borderWidth=r.borderWidth?r.borderWidth:o(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},r=i.getValueAtIndexOrDefault,o=i.getHoverColor,s=t._model;s.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:r(e.hoverBackgroundColor,n,o(s.backgroundColor)),s.borderColor=a.hoverBorderColor?a.hoverBorderColor:r(e.hoverBorderColor,n,o(s.borderColor)),s.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:r(e.hoverBorderWidth,n,s.borderWidth)},resyncElements:function(){var t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{}],25:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.elements={},t.Element=function(t){e.extend(this,t),this.initialize.apply(this,arguments)},e.extend(t.Element.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=e.clone(t._model)),t._start=e.clone(t._view),t},transition:function(t){var n=this;return n._view||(n._view=e.clone(n._model)),1===t?(n._view=n._model,n._start=null,n):(n._start||n.pivot(),e.each(n._model,function(i,a){if("_"===a[0]);else if(n._view.hasOwnProperty(a))if(i===n._view[a]);else if("string"==typeof i)try{var r=e.color(n._model[a]).mix(e.color(n._start[a]),t);n._view[a]=r.rgbString()}catch(t){n._view[a]=i}else if("number"==typeof i){var o=void 0!==n._start[a]&&isNaN(n._start[a])===!1?n._start[a]:0;n._view[a]=(n._model[a]-o)*t+o}else n._view[a]=i;else"number"!=typeof i||isNaN(n._view[a])?n._view[a]=i:n._view[a]=i*t},n),n)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return e.isNumber(this._model.x)&&e.isNumber(this._model.y)}}),t.Element.extend=e.inherits}},{}],26:[function(t,e,n){"use strict";var i=t(2);e.exports=function(t){function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),t.indexOf("%")!==-1&&(i=i/100*e.parentNode[n])):i=t,i}function n(t){return void 0!==t&&null!==t&&"none"!==t}function a(t,i,a){var r=document.defaultView,o=t.parentNode,s=r.getComputedStyle(t)[i],l=r.getComputedStyle(o)[i],u=n(s),d=n(l),c=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(s,t,a):c,d?e(l,o,a):c):"none"}var r=t.helpers={};r.each=function(t,e,n,i){var a,o;if(r.isArray(t))if(o=t.length,i)for(a=o-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<o;a++)e.call(n,t[a],a);else if("object"==typeof t){var s=Object.keys(t);for(o=s.length,a=0;a<o;a++)e.call(n,t[s[a]],s[a])}},r.clone=function(t){var e={};return r.each(t,function(t,n){r.isArray(t)?e[n]=t.slice(0):"object"==typeof t&&null!==t?e[n]=r.clone(t):e[n]=t}),e},r.extend=function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;n++)r.each(arguments[n],e);return t},r.configMerge=function(e){var n=r.clone(e);return r.each(Array.prototype.slice.call(arguments,1),function(e){r.each(e,function(e,i){var a=n.hasOwnProperty(i),o=a?n[i]:{};"scales"===i?n[i]=r.scaleMerge(o,e):"scale"===i?n[i]=r.configMerge(o,t.scaleService.getScaleDefaults(e.type),e):!a||"object"!=typeof o||r.isArray(o)||null===o||"object"!=typeof e||r.isArray(e)?n[i]=e:n[i]=r.configMerge(o,e)})}),n},r.scaleMerge=function(e,n){var i=r.clone(e);return r.each(n,function(e,n){"xAxes"===n||"yAxes"===n?i.hasOwnProperty(n)?r.each(e,function(e,a){var o=r.getValueOrDefault(e.type,"xAxes"===n?"category":"linear"),s=t.scaleService.getScaleDefaults(o);a>=i[n].length||!i[n][a].type?i[n].push(r.configMerge(s,e)):e.type&&e.type!==i[n][a].type?i[n][a]=r.configMerge(i[n][a],s,e):i[n][a]=r.configMerge(i[n][a],e)}):(i[n]=[],r.each(e,function(e){var a=r.getValueOrDefault(e.type,"xAxes"===n?"category":"linear");i[n].push(r.configMerge(t.scaleService.getScaleDefaults(a),e))})):i.hasOwnProperty(n)&&"object"==typeof i[n]&&null!==i[n]&&"object"==typeof e?i[n]=r.configMerge(i[n],e):i[n]=e}),i},r.getValueAtIndexOrDefault=function(t,e,n){return void 0===t||null===t?n:r.isArray(t)?e<t.length?t[e]:n:t},r.getValueOrDefault=function(t,e){return void 0===t?e:t},r.indexOf=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;n<i;++n)if(t[n]===e)return n;return-1},r.where=function(t,e){if(r.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return r.each(t,function(t){e(t)&&n.push(t)}),n},r.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},r.findNextWhere=function(t,e,n){void 0!==n&&null!==n||(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},r.findPreviousWhere=function(t,e,n){void 0!==n&&null!==n||(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},r.inherits=function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=r.inherits,t&&r.extend(n.prototype,t),n.__super__=e.prototype,n},r.noop=function(){},r.uid=function(){var t=0;return function(){return t++}}(),r.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},r.almostEquals=function(t,e,n){return Math.abs(t-e)<n},r.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},r.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},r.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},r.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1},r.log10=Math.log10?function(t){return Math.log10(t)}:function(t){return Math.log(t)/Math.LN10},r.toRadians=function(t){return t*(Math.PI/180)},r.toDegrees=function(t){return t*(180/Math.PI)},r.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),r=Math.atan2(i,n);return r<-.5*Math.PI&&(r+=2*Math.PI),{angle:r,distance:a}},r.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},r.aliasPixel=function(t){return t%2===0?0:.5},r.splineCurve=function(t,e,n,i){var a=t.skip?e:t,r=e,o=n.skip?e:n,s=Math.sqrt(Math.pow(r.x-a.x,2)+Math.pow(r.y-a.y,2)),l=Math.sqrt(Math.pow(o.x-r.x,2)+Math.pow(o.y-r.y,2)),u=s/(s+l),d=l/(s+l);u=isNaN(u)?0:u,d=isNaN(d)?0:d;var c=i*u,h=i*d;return{previous:{x:r.x-c*(o.x-a.x),y:r.y-c*(o.y-a.y)},next:{x:r.x+h*(o.x-a.x),y:r.y+h*(o.y-a.y)}}},r.EPSILON=Number.EPSILON||1e-14,r.splineCurveMonotone=function(t){var e,n,i,a,o=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),s=o.length;for(e=0;e<s;++e)if(i=o[e],!i.model.skip){if(n=e>0?o[e-1]:null,a=e<s-1?o[e+1]:null,a&&!a.model.skip){var l=a.model.x-i.model.x;i.deltaK=0!==l?(a.model.y-i.model.y)/l:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var u,d,c,h;for(e=0;e<s-1;++e)i=o[e],a=o[e+1],i.model.skip||a.model.skip||(r.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,h=Math.pow(u,2)+Math.pow(d,2),h<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var f;for(e=0;e<s;++e)i=o[e],i.model.skip||(n=e>0?o[e-1]:null,a=e<s-1?o[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},r.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},r.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},r.niceNum=function(t,e){var n,i=Math.floor(r.log10(t)),a=t/Math.pow(10,i);return n=e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10,n*Math.pow(10,i)};var o=r.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((1*t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2===(t/=.5)?1:(n||(n=1*(.3*1.5)),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;
return 1*(t/=1)*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return 1*((t=t/1-1)*t*((e+1)*t+e)+1)},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:function(t){return 1-o.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?1*(7.5625*t*t):t<2/2.75?1*(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375)},easeInOutBounce:function(t){return t<.5?.5*o.easeInBounce(2*t):.5*o.easeOutBounce(2*t-1)+.5}};r.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),r.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,o=t.currentTarget||t.srcElement,s=o.getBoundingClientRect(),l=a.touches;l&&l.length>0?(n=l[0].clientX,i=l[0].clientY):(n=a.clientX,i=a.clientY);var u=parseFloat(r.getStyle(o,"padding-left")),d=parseFloat(r.getStyle(o,"padding-top")),c=parseFloat(r.getStyle(o,"padding-right")),h=parseFloat(r.getStyle(o,"padding-bottom")),f=s.right-s.left-u-c,g=s.bottom-s.top-d-h;return n=Math.round((n-s.left-u)/f*o.width/e.currentDevicePixelRatio),i=Math.round((i-s.top-d)/g*o.height/e.currentDevicePixelRatio),{x:n,y:i}},r.addEvent=function(t,e,n){t.addEventListener?t.addEventListener(e,n):t.attachEvent?t.attachEvent("on"+e,n):t["on"+e]=n},r.removeEvent=function(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent?t.detachEvent("on"+e,n):t["on"+e]=r.noop},r.getConstraintWidth=function(t){return a(t,"max-width","clientWidth")},r.getConstraintHeight=function(t){return a(t,"max-height","clientHeight")},r.getMaximumWidth=function(t){var e=t.parentNode,n=parseInt(r.getStyle(e,"padding-left"),10),i=parseInt(r.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,o=r.getConstraintWidth(t);return isNaN(o)?a:Math.min(a,o)},r.getMaximumHeight=function(t){var e=t.parentNode,n=parseInt(r.getStyle(e,"padding-top"),10),i=parseInt(r.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,o=r.getConstraintHeight(t);return isNaN(o)?a:Math.min(a,o)},r.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},r.retinaScale=function(t){var e=t.currentDevicePixelRatio=window.devicePixelRatio||1;if(1!==e){var n=t.canvas,i=t.height,a=t.width;n.height=i*e,n.width=a*e,t.ctx.scale(e,e),n.style.height=i+"px",n.style.width=a+"px"}},r.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},r.fontString=function(t,e,n){return e+" "+t+"px "+n},r.longestText=function(t,e,n,i){i=i||{};var a=i.data=i.data||{},o=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},o=i.garbageCollect=[],i.font=e),t.font=e;var s=0;r.each(n,function(e){void 0!==e&&null!==e&&r.isArray(e)!==!0?s=r.measureText(t,a,o,s,e):r.isArray(e)&&r.each(e,function(e){void 0===e||null===e||r.isArray(e)||(s=r.measureText(t,a,o,s,e))})});var l=o.length/2;if(l>n.length){for(var u=0;u<l;u++)delete a[o[u]];o.splice(0,l)}return s},r.measureText=function(t,e,n,i,a){var r=e[a];return r||(r=e[a]=t.measureText(a).width,n.push(a)),r>i&&(i=r),i},r.numberOfLabelLines=function(t){var e=1;return r.each(t,function(t){r.isArray(t)&&t.length>e&&(e=t.length)}),e},r.drawRoundedRectangle=function(t,e,n,i,a,r){t.beginPath(),t.moveTo(e+r,n),t.lineTo(e+i-r,n),t.quadraticCurveTo(e+i,n,e+i,n+r),t.lineTo(e+i,n+a-r),t.quadraticCurveTo(e+i,n+a,e+i-r,n+a),t.lineTo(e+r,n+a),t.quadraticCurveTo(e,n+a,e,n+a-r),t.lineTo(e,n+r),t.quadraticCurveTo(e,n,e+r,n),t.closePath()},r.color=function(e){return i?i(e instanceof CanvasGradient?t.defaults.global.defaultColor:e):(console.error("Color.js not found!"),e)},r.isArray=Array.isArray?function(t){return Array.isArray(t)}:function(t){return"[object Array]"===Object.prototype.toString.call(t)},r.arrayEquals=function(t,e){var n,i,a,o;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],o=e[n],a instanceof Array&&o instanceof Array){if(!r.arrayEquals(a,o))return!1}else if(a!==o)return!1;return!0},r.callCallback=function(t,e,n){t&&"function"==typeof t.call&&t.apply(n,e)},r.getHoverColor=function(t){return t instanceof CanvasPattern?t:r.color(t).saturate(.5).darken(.1).rgbString()}}},{2:2}],27:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.native?{x:t.x,y:t.y}:o.getRelativePosition(t,e)}function n(t,e){var n,i,a,r,o,s=t.data.datasets;for(i=0,r=s.length;i<r;++i)if(t.isDatasetVisible(i))for(n=t.getDatasetMeta(i),a=0,o=n.data.length;a<o;++a){var l=n.data[a];l._view.skip||e(l)}}function i(t,e){var i=[];return n(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function a(t,e,i,a){var r=Number.POSITIVE_INFINITY,s=[];return a||(a=o.distanceBetweenPoints),n(t,function(t){if(!i||t.inRange(e.x,e.y)){var n=t.getCenterPoint(),o=a(e,n);o<r?(s=[t],r=o):o===r&&s.push(t)}}),s}function r(t,n,r){var o=e(n,t.chart),s=function(t,e){return Math.abs(t.x-e.x)},l=r.intersect?i(t,o):a(t,o,!1,s),u=[];return l.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n),a=i.data[l[0]._index];a&&!a._view.skip&&u.push(a)}}),u):[]}var o=t.helpers;t.Interaction={modes:{single:function(t,i){var a=e(i,t.chart),r=[];return n(t,function(t){if(t.inRange(a.x,a.y))return r.push(t),r}),r.slice(0,1)},label:r,index:r,dataset:function(t,n,r){var o=e(n,t.chart),s=r.intersect?i(t,o):a(t,o,!1);return s.length>0&&(s=t.getDatasetMeta(s[0]._datasetIndex).data),s},"x-axis":function(t,e){return r(t,e,!0)},point:function(t,n){var a=e(n,t.chart);return i(t,a)},nearest:function(t,n,i){var r=e(n,t.chart),o=a(t,r,i.intersect);return o.length>1&&o.sort(function(t,e){var n=t.getArea(),i=e.getArea(),a=n-i;return 0===a&&(a=t._datasetIndex-e._datasetIndex),a}),o.slice(0,1)},x:function(t,i,a){var r=e(i,t.chart),o=[],s=!1;return n(t,function(t){t.inXRange(r.x)&&o.push(t),t.inRange(r.x,r.y)&&(s=!0)}),a.intersect&&!s&&(o=[]),o},y:function(t,i,a){var r=e(i,t.chart),o=[],s=!1;return n(t,function(t){t.inYRange(r.y)&&o.push(t),t.inRange(r.x,r.y)&&(s=!0)}),a.intersect&&!s&&(o=[]),o}}}}},{}],28:[function(t,e,n){"use strict";e.exports=function(){var t=function(e,n){return this.controller=new t.Controller(e,n,this),this.controller};return t.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}}},t.Chart=t,t}},{}],29:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),t.boxes.push(e)},removeBox:function(t,e){t.boxes&&t.boxes.splice(t.boxes.indexOf(e),1)},update:function(t,n,i){function a(t){var e,n=t.isHorizontal();n?(e=t.update(t.options.fullWidth?y:M,S),D-=e.height):(e=t.update(w,_),M-=e.width),C.push({horizontal:n,minSize:e,box:t})}function r(t){var n=e.findNextWhere(C,function(e){return e.box===t});if(n)if(t.isHorizontal()){var i={left:Math.max(F,T),right:Math.max(O,P),top:0,bottom:0};t.update(t.options.fullWidth?y:M,x/2,i)}else t.update(n.minSize.width,D)}function o(t){var n=e.findNextWhere(C,function(e){return e.box===t}),i={left:0,right:0,top:R,bottom:L};n&&t.update(n.minSize.width,D,i)}function s(t){t.isHorizontal()?(t.left=t.options.fullWidth?d:F,t.right=t.options.fullWidth?n-c:F+M,t.top=N,t.bottom=N+t.height,N=t.bottom):(t.left=z,t.right=z+t.width,t.top=R,t.bottom=R+D,z=t.right)}if(t){var l=t.options.layout,u=l?l.padding:null,d=0,c=0,h=0,f=0;isNaN(u)?(d=u.left||0,c=u.right||0,h=u.top||0,f=u.bottom||0):(d=u,c=u,h=u,f=u);var g=e.where(t.boxes,function(t){return"left"===t.options.position}),m=e.where(t.boxes,function(t){return"right"===t.options.position}),p=e.where(t.boxes,function(t){return"top"===t.options.position}),v=e.where(t.boxes,function(t){return"bottom"===t.options.position}),b=e.where(t.boxes,function(t){return"chartArea"===t.options.position});p.sort(function(t,e){return(e.options.fullWidth?1:0)-(t.options.fullWidth?1:0)}),v.sort(function(t,e){return(t.options.fullWidth?1:0)-(e.options.fullWidth?1:0)});var y=n-d-c,x=i-h-f,k=y/2,_=x/2,w=(n-k)/(g.length+m.length),S=(i-_)/(p.length+v.length),M=y,D=x,C=[];e.each(g.concat(m,p,v),a);var T=0,P=0,I=0,A=0;e.each(p.concat(v),function(t){if(t.getPadding){var e=t.getPadding();T=Math.max(T,e.left),P=Math.max(P,e.right)}}),e.each(g.concat(m),function(t){if(t.getPadding){var e=t.getPadding();I=Math.max(I,e.top),A=Math.max(A,e.bottom)}});var F=d,O=c,R=h,L=f;e.each(g.concat(m),r),e.each(g,function(t){F+=t.width}),e.each(m,function(t){O+=t.width}),e.each(p.concat(v),r),e.each(p,function(t){R+=t.height}),e.each(v,function(t){L+=t.height}),e.each(g.concat(m),o),F=d,O=c,R=h,L=f,e.each(g,function(t){F+=t.width}),e.each(m,function(t){O+=t.width}),e.each(p,function(t){R+=t.height}),e.each(v,function(t){L+=t.height});var V=Math.max(T-F,0);F+=V,O+=Math.max(P-O,0);var W=Math.max(I-R,0);R+=W,L+=Math.max(A-L,0);var Y=i-R-L,B=n-F-O;B===M&&Y===D||(e.each(g,function(t){t.height=Y}),e.each(m,function(t){t.height=Y}),e.each(p,function(t){t.options.fullWidth||(t.width=B)}),e.each(v,function(t){t.options.fullWidth||(t.width=B)}),D=Y,M=B);var z=d+V,N=h+W;e.each(g.concat(p),s),z+=M,N+=D,e.each(m,s),e.each(v,s),t.chartArea={left:F,top:R,right:F+M,bottom:R+D},e.each(b,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(M,D)})}}}}},{}],30:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var i=new t.Legend({ctx:e.chart.ctx,options:n,chart:e});e.legend=i,t.layoutService.addBox(e,i)}var i=t.helpers,a=i.noop;t.defaults.global.legend={display:!0,position:"top",fullWidth:!0,reverse:!1,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return i.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:i.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},t.Legend=t.Element.extend({initialize:function(t){i.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:a,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:a,beforeSetDimensions:a,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:a,beforeBuildLabels:a,buildLabels:function(){var t=this,e=t.options.labels,n=e.generateLabels.call(t,t.chart);e.filter&&(n=n.filter(function(n){return e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:a,beforeFit:a,fit:function(){var n=this,a=n.options,r=a.labels,o=a.display,s=n.ctx,l=t.defaults.global,u=i.getValueOrDefault,d=u(r.fontSize,l.defaultFontSize),c=u(r.fontStyle,l.defaultFontStyle),h=u(r.fontFamily,l.defaultFontFamily),f=i.fontString(d,c,h),g=n.legendHitBoxes=[],m=n.minSize,p=n.isHorizontal();if(p?(m.width=n.maxWidth,m.height=o?10:0):(m.width=o?10:0,m.height=n.maxHeight),o)if(s.font=f,p){var v=n.lineWidths=[0],b=n.legendItems.length?d+r.padding:0;s.textAlign="left",s.textBaseline="top",i.each(n.legendItems,function(t,i){var a=e(r,d),o=a+d/2+s.measureText(t.text).width;v[v.length-1]+o+r.padding>=n.width&&(b+=d+r.padding,v[v.length]=n.left),g[i]={left:0,top:0,width:o,height:d},v[v.length-1]+=o+r.padding}),m.height+=b}else{var y=r.padding,x=n.columnWidths=[],k=r.padding,_=0,w=0,S=d+y;i.each(n.legendItems,function(t,n){var i=e(r,d),a=i+d/2+s.measureText(t.text).width;w+S>m.height&&(k+=_+r.padding,x.push(_),_=0,w=0),_=Math.max(_,a),w+=S,g[n]={left:0,top:0,width:a,height:d}}),k+=_,x.push(_),m.width+=k}n.width=m.width,n.height=m.height},afterFit:a,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,a=n.options,r=a.labels,o=t.defaults.global,s=o.elements.line,l=n.width,u=n.lineWidths;if(a.display){var d,c=n.ctx,h=i.getValueOrDefault,f=h(r.fontColor,o.defaultFontColor),g=h(r.fontSize,o.defaultFontSize),m=h(r.fontStyle,o.defaultFontStyle),p=h(r.fontFamily,o.defaultFontFamily),v=i.fontString(g,m,p);c.textAlign="left",c.textBaseline="top",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=e(r,g),y=n.legendHitBoxes,x=function(e,n,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,o.defaultColor),c.lineCap=h(i.lineCap,s.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,s.borderDashOffset),c.lineJoin=h(i.lineJoin,s.borderJoinStyle),c.lineWidth=h(i.lineWidth,s.borderWidth),c.strokeStyle=h(i.strokeStyle,o.defaultColor);var r=0===h(i.lineWidth,s.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,s.borderDash)),a.labels&&a.labels.usePointStyle){var l=g*Math.SQRT2/2,u=l/Math.SQRT2,d=e+u,f=n+u;t.canvasHelpers.drawPoint(c,i.pointStyle,l,d,f)}else r||c.strokeRect(e,n,b,g),c.fillRect(e,n,b,g);c.restore()}},k=function(t,e,n,i){c.fillText(n.text,b+g/2+t,e),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(b+g/2+t,e+g/2),c.lineTo(b+g/2+t+i,e+g/2),c.stroke())},_=n.isHorizontal();d=_?{x:n.left+(l-u[0])/2,y:n.top+r.padding,line:0}:{x:n.left+r.padding,y:n.top+r.padding,line:0};var w=g+r.padding;i.each(n.legendItems,function(t,e){var i=c.measureText(t.text).width,a=b+g/2+i,o=d.x,s=d.y;_?o+a>=l&&(s=d.y+=w,d.line++,o=d.x=n.left+(l-u[d.line])/2):s+w>n.bottom&&(o=d.x=o+n.columnWidths[d.line]+r.padding,s=d.y=n.top+r.padding,d.line++),x(o,s,t),y[e].left=o,y[e].top=s,k(o,s,t,i),_?d.x+=a+r.padding:d.y+=w})}},handleEvent:function(t){var e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var r=t.x,o=t.y;if(r>=e.left&&r<=e.right&&o>=e.top&&o<=e.bottom)for(var s=e.legendHitBoxes,l=0;l<s.length;++l){var u=s[l];if(r>=u.left&&r<=u.left+u.width&&o>=u.top&&o<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[l]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[l]),a=!0;break}}}return a}}),t.plugins.register({beforeInit:function(t){var e=t.options.legend;e&&n(t,e)},beforeUpdate:function(e){var a=e.options.legend;a?(a=i.configMerge(t.defaults.global.legend,a),e.legend?e.legend.options=a:n(e,a)):(t.layoutService.removeBox(e,e.legend),delete e.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}})}},{}],31:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.plugins={},t.plugins={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){e.indexOf(t)===-1&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var n=e.indexOf(t);n!==-1&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,r,o,s,l=this.descriptors(t),u=l.length;for(i=0;i<u;++i)if(a=l[i],r=a.plugin,s=r[e],"function"==typeof s&&(o=[t].concat(n||[]),o.push(a.options),s.apply(r,o)===!1))return!1;return!0},descriptors:function(n){var i=n._plugins||(n._plugins={});if(i.id===this._cacheId)return i.descriptors;var a=[],r=[],o=n&&n.config||{},s=t.defaults.global.plugins,l=o.options&&o.options.plugins||{};return this._plugins.concat(o.plugins||[]).forEach(function(t){var n=a.indexOf(t);if(n===-1){var i=t.id,o=l[i];o!==!1&&(o===!0&&(o=e.clone(s[i])),a.push(t),r.push({plugin:t,options:o||{}}))}}),i.descriptors=r,i.id=this._cacheId,r}},t.pluginService=t.plugins,t.PluginBase=e.inherits({})}},{}],32:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){return i.isArray(e)?i.longestText(t,n,e):t.measureText(e).width}function n(e){var n=i.getValueOrDefault,a=t.defaults.global,r=n(e.fontSize,a.defaultFontSize),o=n(e.fontStyle,a.defaultFontStyle),s=n(e.fontFamily,a.defaultFontFamily);return{size:r,style:o,family:s,font:i.fontString(r,o,s)}}var i=t.helpers;t.defaults.scale={display:!0,position:"left",gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{labelString:"",display:!1},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:t.Ticks.formatters.values}},t.Scale=t.Element.extend({getPadding:function(){var t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},beforeUpdate:function(){i.callCallback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=i.extend({left:0,right:0,top:0,bottom:0},n),a.longestTextCache=a.longestTextCache||{},a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),a.buildTicks(),a.afterBuildTicks(),a.beforeTickToLabelConversion(),a.convertTicksToLabels(),a.afterTickToLabelConversion(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:function(){i.callCallback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){i.callCallback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){i.callCallback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){i.callCallback(this.options.beforeDataLimits,[this])},determineDataLimits:i.noop,afterDataLimits:function(){i.callCallback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){i.callCallback(this.options.beforeBuildTicks,[this])},buildTicks:i.noop,afterBuildTicks:function(){i.callCallback(this.options.afterBuildTicks,[this])},before