You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2016/10/31 15:45:56 UTC

[01/37] usergrid git commit: fix miked link

Repository: usergrid
Updated Branches:
  refs/heads/usergrid-1318-queue f56e1b0d1 -> 7cc5c1c07


http://git-wip-us.apache.org/repos/asf/usergrid/blob/2298062e/website/tmp/dependencies
----------------------------------------------------------------------
diff --git a/website/tmp/dependencies b/website/tmp/dependencies
index 543a902..d23a3b7 100644
--- a/website/tmp/dependencies
+++ b/website/tmp/dependencies
@@ -1,5 +1,5 @@
 {:	data{:
-edges[[iPi[iQiF[iQiN[iQi[iSiF[iSiN[iSi[iTiF[iTiN[iTi:
vertices[U0[:	itemI"/bootstrap/bootstrap/:ET[;I"/community/;	T[;I"/css/bootflat-extensions/;	T[;I"/css/bootflat-square/;	T[;I"/css/bootflat/;	T[;I"/css/font-awesome/;	T[;I"/css/usergrid-site/;	T[;I"/favicon/;	T[;I"#/font/fontawesome-webfont-eot/;	T[;I"#/font/fontawesome-webfont-svg/;	T[;I"#/font/fontawesome-webfont-ttf/;	T[;I"$/font/fontawesome-webfont-woff/;	T[;I"/font/FontAwesome/;	T[;I"/img/alberto/;	T[;I"/img/alex/;	T[;I""/img/apache_usergrid_favicon/;	T[;I"%/img/apache_usergrid_logo_white/;	T[;I"+/img/apache_usergrid_logo_white_small/;	T[;I"/img/check_flat/default/;	T[;I"/img/dave/;	T[;I"
/img/ed/;	T[;I"/img/egg-logo/;	T[;I"/img/github/;	T[;I"/img/grey/;	T[;I"/img/intellij/;	T[;I"/img/jeff/;	T[;I"/img/michael_r/;	T[;I"/img/mike_d/;	T[;I"/img/nate/;	T[;I"/img/rod/;	T[;I"/img/scott/;	T[;I"/img/s
 hawn/;	T[;I"/img/stliu/;	T[;I"/img/strong/;	T[;I"/img/structure101/;	T[;I"/img/sungju/;	T[;I"/img/tim/;	T[;I"/img/todd/;	T[;I"/img/usergrid-logo/;	T[;I"/img/usergrid/;	T[;I"/img/usergrid_160/;	T[;I"/img/usergrid_200/;	T[;I"/img/usergrid_300/;	T[;I"#/img/usergrid_300_transparent/;	T[;I"/img/usergrid_400/;	T[;I"/img/usergrid_800/;	T[;I"/img/usergrid_card/;	T[;I"/img/usergrid_logo/;	T[;I"/img/usergrid_logo_205_50/;	T[;I"/img/usergrid_logo_260_50/;	T[;I"/img/usergrid_logo_720/;	T[;I"/img/usergrid_logo_720p/;	T[;I" /img/usergrid_logo_900_200/;	T[;I"/img/usergrid_logo_white/;	T[;I"/img/usergrid_profile_128/;	T[;I"/img/usergrid_profile_256/;	T[;I"%/img/usergrid_profile_256_white/;	T[;I"'/img/usergrid_profile_512_margins/;	T[;I"$/img/usergrid_profile_64_white/;	T[;I"&/img/usergrid_profile_background/;	T[;I"!/img/usergrid_screencast_bg/;	T[;I"/img/usergrid_small_100/;	T[;I"/im
 g/usergrid_wiki/;	T[;I"/img/yourkit/;	T[;I"/;	T[;I"/js/bootstrap/;	T[;I"/js/head/;	T[;I"/js/html5shiv/;	T[;I"/js/jquery-1/;	T[;I"/js/jquery/;	T[;I"/js/respond/;	T[;I"/js/usergrid-site/;	T[;I"/releases/;	T[;I"/static/github-btn/;	T[:layoutI"/community/;	T[;
+edges[[iPi[iQi[iQiF[iQiN[iSi[iSiF[iSiN[iTi[iTiF[iTiN:
vertices[U0[:	itemI"/bootstrap/bootstrap/:ET[;I"/community/;	T[;I"/css/bootflat-extensions/;	T[;I"/css/bootflat-square/;	T[;I"/css/bootflat/;	T[;I"/css/font-awesome/;	T[;I"/css/usergrid-site/;	T[;I"/favicon/;	T[;I"#/font/fontawesome-webfont-eot/;	T[;I"#/font/fontawesome-webfont-svg/;	T[;I"#/font/fontawesome-webfont-ttf/;	T[;I"$/font/fontawesome-webfont-woff/;	T[;I"/font/FontAwesome/;	T[;I"/img/alberto/;	T[;I"/img/alex/;	T[;I""/img/apache_usergrid_favicon/;	T[;I"%/img/apache_usergrid_logo_white/;	T[;I"+/img/apache_usergrid_logo_white_small/;	T[;I"/img/check_flat/default/;	T[;I"/img/dave/;	T[;I"
/img/ed/;	T[;I"/img/egg-logo/;	T[;I"/img/github/;	T[;I"/img/grey/;	T[;I"/img/intellij/;	T[;I"/img/jeff/;	T[;I"/img/michael_r/;	T[;I"/img/miked/;	T[;I"/img/nate/;	T[;I"/img/rod/;	T[;I"/img/scott/;	T[;I"/img/sh
 awn/;	T[;I"/img/stliu/;	T[;I"/img/strong/;	T[;I"/img/structure101/;	T[;I"/img/sungju/;	T[;I"/img/tim/;	T[;I"/img/todd/;	T[;I"/img/usergrid-logo/;	T[;I"/img/usergrid/;	T[;I"/img/usergrid_160/;	T[;I"/img/usergrid_200/;	T[;I"/img/usergrid_300/;	T[;I"#/img/usergrid_300_transparent/;	T[;I"/img/usergrid_400/;	T[;I"/img/usergrid_800/;	T[;I"/img/usergrid_card/;	T[;I"/img/usergrid_logo/;	T[;I"/img/usergrid_logo_205_50/;	T[;I"/img/usergrid_logo_260_50/;	T[;I"/img/usergrid_logo_720/;	T[;I"/img/usergrid_logo_720p/;	T[;I" /img/usergrid_logo_900_200/;	T[;I"/img/usergrid_logo_white/;	T[;I"/img/usergrid_profile_128/;	T[;I"/img/usergrid_profile_256/;	T[;I"%/img/usergrid_profile_256_white/;	T[;I"'/img/usergrid_profile_512_margins/;	T[;I"$/img/usergrid_profile_64_white/;	T[;I"&/img/usergrid_profile_background/;	T[;I"!/img/usergrid_screencast_bg/;	T[;I"/img/usergrid_small_100/;	T[;I"/img
 /usergrid_wiki/;	T[;I"/img/yourkit/;	T[;I"/;	T[;I"/js/bootstrap/;	T[;I"/js/head/;	T[;I"/js/html5shiv/;	T[;I"/js/jquery-1/;	T[;I"/js/jquery/;	T[;I"/js/respond/;	T[;I"/js/usergrid-site/;	T[;I"/releases/;	T[;I"/static/github-btn/;	T[:layoutI"/community/;	T[;
 I"/default/;	T[;
 I"/docs/;	T[;
 I"
/footer/;	T[;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/2298062e/website/tmp/rule_memory
----------------------------------------------------------------------
diff --git a/website/tmp/rule_memory b/website/tmp/rule_memory
index 38d24e4..6c9028f 100644
Binary files a/website/tmp/rule_memory and b/website/tmp/rule_memory differ


[30/37] usergrid git commit: Correcting links to keys for USERGRID-1281

Posted by sn...@apache.org.
Correcting links to keys for USERGRID-1281


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/11ad1d76
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/11ad1d76
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/11ad1d76

Branch: refs/heads/usergrid-1318-queue
Commit: 11ad1d76b54e3698445f85de058d27d60d8a2990
Parents: 3dbc2e9
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Oct 24 09:04:31 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Oct 24 09:04:31 2016 -0400

----------------------------------------------------------------------
 content/releases/index.html         |    5 +-
 website/content/releases/index.html |    5 +-
 website/tmp/checksums               |    5 +-
 website/tmp/compiled_content        | 7058 +++++++++++++++++++++++++++++-
 website/tmp/dependencies            |   14 +-
 website/tmp/rule_memory             |  Bin 5214 -> 13045 bytes
 6 files changed, 7070 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/content/releases/index.html
----------------------------------------------------------------------
diff --git a/content/releases/index.html b/content/releases/index.html
index fae6c86..beb5bca 100644
--- a/content/releases/index.html
+++ b/content/releases/index.html
@@ -98,10 +98,7 @@
 					Project releases are approved by vote of the Apache Usergrid Project Management Committee (PMC). Support for a release is provided by project volunteers on the project <a href="http://usergrid.apache.org/community/#mailing-lists">mailing lists</a>. Bugs found in a release may be discussed on the list and reported through the <a href="https://issues.apache.org/jira/browse/USERGRID">issue tracker</a>. The user mailing list and issue tracker are the only support options hosted by the Apache Usergrid project.
 				</p>
 				<p>
-					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/">https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
-				</p>
-				<p>
-					The PGP signatures can be verified using PGP or GPG. First download the <a href="https://www.apache.org/dist/usergrid/KEYS">KEYS</a> as well as the <a href="https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/">asc signature</a> file for the particular distribution. Then verify the signatures using:
+					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://www.apache.org/dist/usergrid/usergrid-2/v2.1.0/">https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
 				</p>
 				<p>
        				% pgpk -a KEYS

http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/website/content/releases/index.html
----------------------------------------------------------------------
diff --git a/website/content/releases/index.html b/website/content/releases/index.html
index 6e56cb4..28fb6d7 100644
--- a/website/content/releases/index.html
+++ b/website/content/releases/index.html
@@ -31,10 +31,7 @@
 					Project releases are approved by vote of the Apache Usergrid Project Management Committee (PMC). Support for a release is provided by project volunteers on the project <a href="http://usergrid.apache.org/community/#mailing-lists">mailing lists</a>. Bugs found in a release may be discussed on the list and reported through the <a href="https://issues.apache.org/jira/browse/USERGRID">issue tracker</a>. The user mailing list and issue tracker are the only support options hosted by the Apache Usergrid project.
 				</p>
 				<p>
-					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/">https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
-				</p>
-				<p>
-					The PGP signatures can be verified using PGP or GPG. First download the <a href="https://www.apache.org/dist/usergrid/KEYS">KEYS</a> as well as the <a href="https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/">asc signature</a> file for the particular distribution. Then verify the signatures using:
+					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://www.apache.org/dist/usergrid/usergrid-2/v2.1.0/">https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
 				</p>
 				<p>
        				% pgpk -a KEYS

http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/website/tmp/checksums
----------------------------------------------------------------------
diff --git a/website/tmp/checksums b/website/tmp/checksums
index c0cb9ea..f586065 100644
--- a/website/tmp/checksums
+++ b/website/tmp/checksums
@@ -1,2 +1,3 @@
-{:	data{Y[:	itemI"/bootstrap/bootstrap/:ETI"!hf/YgyBw2aS/hmm6j1wsR+VyT4U=;F[;I"/community/;TI"!pwtIBwAueAvgp+ybpr/dtGlXi+w=;F[;I"/css/bootflat-extensions/;TI"!El9uPBBBRscq9cLBImCnWGBLPw8=;F[;I"/css/bootflat-square/;TI"!FIjPDScslBmLYlEH1FXSCSmZxEc=;F[;I"/css/bootflat/;TI"!nbCxOCBpqNVm4MEuKdsgB3oMp7c=;F[;I"/css/font-awesome/;TI"!Q0zEdwWKU+fabxlUHI2h/z2JHc8=;F[;I"/css/usergrid-site/;TI"!7fozZEJoGq0PVWSpld8FEJelH2c=;F[;I"/favicon/;TI"!YYb/EVyTF9vMvnaIVyF3smIhIXc=;F[;I"#/font/fontawesome-webfont-eot/;TI"!rwQmrDFEGSEngjHws5F6qwKdifM=;F[;I"#/font/fontawesome-webfont-svg/;TI"!ELwafuoqIedOF0774W0FJ9F8qew=;F[;I"#/font/fontawesome-webfont-ttf/;TI"!9ewmZH7ECLxmKKEqQZdriePxEUU=;F[;I"$/font/fontawesome-webfont-woff/;TI"!DlWhx0n49wPabrQ6XPFQ/OyuI9U=;F[;I"/font/FontAwesome/;TI"!reIHnLVbBy12FugKxw/H1qpPg50=;F[;I"/img/alberto/;TI"!TnCNVw6+obWrw3gfYksMToac4lA=;F[;I"/img/alex/;TI"!W4YEQ4PVPTtfFOleXNMAv5
 +/3EM=;F[;I""/img/apache_usergrid_favicon/;TI"!Sp71K78dKnXoDQtwz679moyQkg4=;F[;I"%/img/apache_usergrid_logo_white/;TI"!RZIHSuv2iLmcdfHve7+pfY0BPlE=;F[;I"+/img/apache_usergrid_logo_white_small/;TI"!Vw8FHysYg1IafFOIx/4R8T0Z1IM=;F[;I"/img/check_flat/default/;TI"!a+sCaKZzMiI1EX7aJvz/vgkdmu8=;F[;I"/img/dave/;TI"!32nef8XAQROAK/A9/xunlYr+B7E=;F[;I"
/img/ed/;TI"!qWvLa4sDbcvg7f+XglIFasknFe0=;F[;I"/img/egg-logo/;TI"!Spu569g5GTQNd3Tv0b2e9efqHIQ=;F[;I"/img/github/;TI"!AF3rVcD2izVZb/HZYsiqTQ5/GJs=;F[;I"/img/grey/;TI"!Tf4JrWeo5wYuoDaUK2SePI4UUVg=;F[;I"/img/intellij/;TI"!f4Yl0vEdOjIrNQ26imxPk8axpfM=;F[;I"/img/jeff/;TI"!fhKnLNFaHzbEaWUzDnPpN4GA9Kg=;F[;I"/img/michael_r/;TI"!lJRIM6pzTiRHDVsIjdfAKGqXsP8=;F[;I"/img/mike_d/;TI"!VzkdDF9Raqf/2U4yAAVpRpBLZV0=;F[;I"/img/nate/;TI"!Nrxe8GMmbasJx0NJnNSrzQFT+zc=;F[;I"/img/rod/;TI"!uwPmqQkcBUeg8dCnXe5YzmFBAh4=;F[;I"/img/scott/;TI"!N57YtkcM/W6sa4opxUPFWp+SE
 Sk=;F[;I"/img/shawn/;TI"!/rWJyqerGDsq9zg6KYT0JGFW3Hs=;F[;I"/img/stliu/;TI"!Clc3kTGRrWk3lr9ALrliMqrdziM=;F[;I"/img/strong/;TI"!twgQxndqHDbpNQrEEy4hQfRMkuU=;F[;I"/img/structure101/;TI"!RtUPu5haD8sQbtSR0JFh9NbHE20=;F[;I"/img/sungju/;TI"!IHJmc4BdEKtDL2kyr9hc0uVHDMs=;F[;I"/img/tim/;TI"!IalmCGc5Uj9gMzoAHmEdnaFHj84=;F[;I"/img/todd/;TI"!U0AH/iwc+f00PfQzO0gxzceCft4=;F[;I"/img/usergrid-logo/;TI"!O06aJsGIzRvVdCDyDbPHg4iy1xg=;F[;I"/img/usergrid/;TI"!+U55EsvAWhkeQ5RXvmclZVtMfOc=;F[;I"/img/usergrid_160/;TI"!eDjNVa5dz5Oz9AT0+12S+K4rxsw=;F[;I"/img/usergrid_200/;TI"!+Fp+4fhOuTEJaK3ccAxyOE5vzvE=;F[;I"/img/usergrid_300/;TI"!35vgPh4CQIrBEYVfA7oXoMQcDY0=;F[;I"#/img/usergrid_300_transparent/;TI"!AhTlthzJ6i74BJiIyh5J+TCQZF0=;F[;I"/img/usergrid_400/;TI"!vvPNbc3L3rvMpgbjF5GsMHAQeAM=;F[;I"/img/usergrid_800/;TI"!VdqSNUFSWAsG9QfFrjBZ2plJVMU=;F[;I"/img/usergrid_card/;TI"!E/rBsCDhlLKirQQlhMXe10fG6cU=;
 F[;I"/img/usergrid_logo/;TI"!9YwPY53bXRCafHsxKVVox04TQQY=;F[;I"/img/usergrid_logo_205_50/;TI"!2bSy1Cy1qZkktkzXgI2MvffsODs=;F[;I"/img/usergrid_logo_260_50/;TI"!6BS+jO0FiIITPYRkGBOshKSdWkw=;F[;I"/img/usergrid_logo_720/;TI"!c0mNtdlORdkxUs1X9koZhELRqTY=;F[;I"/img/usergrid_logo_720p/;TI"!O9RgZbjmG85reUPIFXLWhA0o1S4=;F[;I" /img/usergrid_logo_900_200/;TI"!wH8a4COZz1AUCgjKGKg2U3ipO70=;F[;I"/img/usergrid_logo_white/;TI"!EDMI+g8raJmM/dyPqciNGpxioHo=;F[;I"/img/usergrid_profile_128/;TI"!zzJ0VFSNbH1wvvovqjs1Xloptyo=;F[;I"/img/usergrid_profile_256/;TI"!T/8bSAN1lQ9/C+KIXJtu8TXMEnQ=;F[;I"%/img/usergrid_profile_256_white/;TI"!We+xA3nTlGKI81diF7748gj5/Cc=;F[;I"'/img/usergrid_profile_512_margins/;TI"!LgkCerHcdx/XCVs0Q7kI5WSn/Tk=;F[;I"$/img/usergrid_profile_64_white/;TI"!I/hYFotRDmwrGWQLEPKdGuioz90=;F[;I"&/img/usergrid_profile_background/;TI"!D66EaLemrW31c6O94GGe54JFhgQ=;F[;I"!/img/usergrid_screencast_bg/;TI"!e+HF
 DaRudTDPD2/yIKbUSH8KUpc=;F[;I"/img/usergrid_small_100/;TI"!oV130VnfxyXQ03LDRN2gqxWqcIM=;F[;I"/img/usergrid_wiki/;TI"!gWgcQPtQfaWTccJaaC0eAICz39E=;F[;I"/img/yourkit/;TI"!RG8GZ8bvX2BH8CZZwxS7S0xO8+U=;F[;I"/;TI"!nWgrmh1l8TOQf6K4P4O+3E8OLys=;F[;I"/js/bootstrap/;TI"!oK9sfjf8QQoLsae42mfdc2+3nA4=;F[;I"/js/head/;TI"!h+whrBuR0oxNl9lygBr3lE3g9DM=;F[;I"/js/html5shiv/;TI"!5vvy+hplkMV1o6pd96rnceetUWE=;F[;I"/js/jquery-1/;TI"!hXdICqLLXAh4tvm2i3DGEd27F+M=;F[;I"/js/jquery/;TI"!D9p02/YhgH3GCU3vz1FrBeQrdZM=;F[;I"/js/respond/;TI"!Lu6CdOuBNSlbYj4Asn9qRmxdGxk=;F[;I"/js/usergrid-site/;TI"!8Pw2vvKcCVTM6XFwAUzapKLc+Vk=;F[;I"/releases/;TI"!hZJ7ecgrD3mm9cR/6Sr28sFRGvw=;F[;I"/static/github-btn/;TI"!t1ga1ZWggUzYrqyvU1PDqfjhd6w=;F[:layoutI"/community/;TI"!Vz6WtgEl8BB6t96FGbzN5hhVc4c=;F[;I"/default/;TI"!k9I6lOQ4z4+nHoc8WQw7P2MoKbY=;F[;I"/docs/;TI"!tmBld5ZHivR/56iHwp6I0LUoPlc=;F[;I"
/footer/;TI"!iL
 zZaL9jsE9qH/1mj/yosIoCfH0=;F[;I"
/header/;TI"!Diks9ApifD4Ze6SOwHw1aW++SOA=;F[:code_snippetI"lib/default.rb;TI"!obtwYGHKsZcksb03nMTPrlOqd5U=;F[;	I"lib/helpers_.rb;TI"!huKhcwQYeoQiIuYmRpgzAwKwrbc=;F:configI"!Sxvusj+Tnw1yNJuSGRkZ7fv3R2Q=;F:
-rulesI"!nclWn6tIAjzNd8AV/It9HpNy9y0=;F[;I"/img/miked/;TI"!77uUleHKLebnSrPvTm7rlv5I/NE=;F:versioni
\ No newline at end of file
+{:	data{^[:	itemI"/bootstrap/bootstrap/:ETI"!6vr4v1CjpriacexQpLY3x8kQhcU=;F[;I"/community/;TI"!In7VgHmzkS4eu+AsmBFSK1znIyA=;F[;I"/css/bootflat-extensions/;TI"!mJCxovrL6WM2cZ4IOkZELgMp8xE=;F[;I"/css/bootflat-square/;TI"!ivBF6c9Yh/e3ckf2zfrUSqbGD8A=;F[;I"/css/bootflat/;TI"!5ZfxgJcqlsr25Ikh4H7bqFkKL7g=;F[;I"/css/font-awesome/;TI"!9ohcn4n2TRA5be62eIog6FzgBvM=;F[;I"/css/usergrid-site/;TI"!EPqcS0ettaDujaUZKHFwoXS+kkA=;F[;I"/favicon/;TI"!mE8fpTjf+AeM2Tutmn9fH0S2+WI=;F[;I"#/font/fontawesome-webfont-eot/;TI"!c9qDrve2EEuT2lky7i56Z/JPC5c=;F[;I"#/font/fontawesome-webfont-svg/;TI"!nI6/EVoqSBCWFgj83D5mo03t3J4=;F[;I"#/font/fontawesome-webfont-ttf/;TI"!SUQj3dg68zcdueBo4zPCo/NpYcI=;F[;I"$/font/fontawesome-webfont-woff/;TI"!ZAgugLhsQF0XSG8QuSUq9bvkDPw=;F[;I"/font/FontAwesome/;TI"!usenELsdgn94AwxhaNnctRMOrhs=;F[;I"/img/alberto/;TI"!n449OU32gjpLu5vOI93qZ3mfe8k=;F[;I"/img/alex/;TI"!nJBmJfljC08c/He/NG4i3V
 wfiMI=;F[;I""/img/apache_usergrid_favicon/;TI"!skfgoZ0zrCDt3FuNOe3PerrSfpE=;F[;I"%/img/apache_usergrid_logo_white/;TI"!QDCJlR3FmM9AMp8ZCEPhWiOgVlw=;F[;I"+/img/apache_usergrid_logo_white_small/;TI"!xJUG4s7hwtoOSNA0y3nrJkb2zHU=;F[;I"/img/check_flat/default/;TI"!wNdRuzGOBXpxn/N8U/6EscC4tXs=;F[;I"/img/dave/;TI"!SWxIGfiIlW7dOgnVmhp1AbZmUH8=;F[;I"
/img/ed/;TI"!ED6rFpQaEPqFzSb87KL4iSW5zrs=;F[;I"/img/egg-logo/;TI"!XxKY7338BKirbikk9UPbNj4ZjMU=;F[;I"/img/github/;TI"!xtwJufQqWNTDOLUcchwQE8YCMKU=;F[;I"/img/grey/;TI"!hrcPaGZzSEnozNBVFdLlqaTrsdM=;F[;I"/img/intellij/;TI"!q/WbiRqXZRh1TESp8P+KPuYoBgA=;F[;I"/img/jeff/;TI"!gUJN0O1+W6JwTyi7rsz9vnDGo48=;F[;I"/img/michael_r/;TI"!ZbtOW/mGuv+zKZ1glLjSn3VEO1g=;F[;I"/img/mike_d/;TI"!VzkdDF9Raqf/2U4yAAVpRpBLZV0=;F[;I"/img/nate/;TI"!ozwPU74Elic7u6an56GHRkYpzVE=;F[;I"/img/rod/;TI"!ktn/zX6WtR40ByjhA5xADbtU1pY=;F[;I"/img/scott/;TI"!tv4ImuWBymm+gfoCk53B9Eat4
 i8=;F[;I"/img/shawn/;TI"!4FfGVxWxqAGL9ZeJFIHAK42Osd8=;F[;I"/img/stliu/;TI"!lrDfTtFnljmjy+U0VzjYc9dZGDU=;F[;I"/img/strong/;TI"!tUck5JxFudUtUIJFG/YKrghtzrE=;F[;I"/img/structure101/;TI"!jMweDxmTa79a6lQt9jsOz/bC9qE=;F[;I"/img/sungju/;TI"!oS6tlFPav7tkNF7Kbnq5wZG1nZo=;F[;I"/img/tim/;TI"!Z9J6sA1IM2KQ7Uwf++SUUmT3rbQ=;F[;I"/img/todd/;TI"!wTGCPl38pptazLN1wsZItNycvJg=;F[;I"/img/usergrid-logo/;TI"!5jShqGeIPuOZ2K8MHTv1gyIrOyc=;F[;I"/img/usergrid/;TI"!QyLVRwEFAB8DBPQ3bOJmoWJOCzk=;F[;I"/img/usergrid_160/;TI"!0USkylu9K1fo8biK5btcNW2Pawo=;F[;I"/img/usergrid_200/;TI"!i0bd5C3BUCS0Ci64SZ+Hzq15jBM=;F[;I"/img/usergrid_300/;TI"!gWPISr2niZXLwMx0jhznKVTQBl4=;F[;I"#/img/usergrid_300_transparent/;TI"!2Thm92mZPJ57A7z2qXTJ6torljA=;F[;I"/img/usergrid_400/;TI"!Hyiqo41vkwt4RoOQHneimoHrTUI=;F[;I"/img/usergrid_800/;TI"!aKtInyU1rIp9cW6pj4EYXFmw+XI=;F[;I"/img/usergrid_card/;TI"!lC71u7tXTUGwExwc77lSWaSKkpc=;
 F[;I"/img/usergrid_logo/;TI"!d9r/v5/5A3igzGcBf3195W2LcIA=;F[;I"/img/usergrid_logo_205_50/;TI"!4W/J/S0wQd6n8h0QQG4ZTjanmpg=;F[;I"/img/usergrid_logo_260_50/;TI"!iHeZLI/5/KpRKXBQJmLWS5J0Udw=;F[;I"/img/usergrid_logo_720/;TI"!BAFQ/bSnBy8znG1tMfIc/vTs/yU=;F[;I"/img/usergrid_logo_720p/;TI"!yPxX4ldt1hQHkXVQTIA8j/h37Sc=;F[;I" /img/usergrid_logo_900_200/;TI"!s1KgGNffeoZLRYQMAlCw03dYa5M=;F[;I"/img/usergrid_logo_white/;TI"!yBJNnofk9VWWk2cNvSoySmF+ofU=;F[;I"/img/usergrid_profile_128/;TI"!WF2cEfaMQ5ZYnnS5R1/Scks6Ahw=;F[;I"/img/usergrid_profile_256/;TI"!L27AuPpAFWrV1jYt/zOqiS39cJ4=;F[;I"%/img/usergrid_profile_256_white/;TI"!/BVe6H7wf0UUYePfFy9IZNv10ek=;F[;I"'/img/usergrid_profile_512_margins/;TI"!PKoRYAWwHWQNjvUWjDVStsJMuLQ=;F[;I"$/img/usergrid_profile_64_white/;TI"!6JacqTbmIRxgP7rOcDARQ/voHrc=;F[;I"&/img/usergrid_profile_background/;TI"!z63NFEp/HEsCl4Xhr7Fp3h6cWjY=;F[;I"!/img/usergrid_screencast_bg/;TI"!ObBa
 DOKIQnrrQ3lwF89kCjPDcpg=;F[;I"/img/usergrid_small_100/;TI"!f78GioR4jxVPnj24I+SHgN+Vzb8=;F[;I"/img/usergrid_wiki/;TI"!E1LipRrS9423eG+hpZIM6rIXQac=;F[;I"/img/yourkit/;TI"!700m1eeukBKxfnsUb1JkX2jHeLw=;F[;I"/;TI"!Nwcfr0o2eEmhWN/IY866Tii0U2U=;F[;I"/js/bootstrap/;TI"!wR+G8tAUJCGmkLndla8yWpBQvnU=;F[;I"/js/head/;TI"!gV3IIxbm7zRyXBWedW0kScdSR2Q=;F[;I"/js/html5shiv/;TI"!fGUnwmPXyEPtR4er8obRyLDxiYQ=;F[;I"/js/jquery-1/;TI"!7yZZfm+7gLRTi+RUbhfil2af52Y=;F[;I"/js/jquery/;TI"!ogLmmFIdxo79dtpXaxPeERtXnq8=;F[;I"/js/respond/;TI"!mtwm5yF6KWdo4/fYHlO4MP1SE90=;F[;I"/js/usergrid-site/;TI"!KrV+9AWKXuNdvl6yff7kzZvJxxE=;F[;I"/releases/;TI"!9BKfYWGsYJzJqYHPBc8VTKrz+DE=;F[;I"/static/github-btn/;TI"!mzvYfdHpuRzeE5noLdxQOpetNJg=;F[:layoutI"/community/;TI"!Vz6WtgEl8BB6t96FGbzN5hhVc4c=;F[;I"/default/;TI"!k9I6lOQ4z4+nHoc8WQw7P2MoKbY=;F[;I"/docs/;TI"!tmBld5ZHivR/56iHwp6I0LUoPlc=;F[;I"
/footer/;TI"!iL
 zZaL9jsE9qH/1mj/yosIoCfH0=;F[;I"
/header/;TI"!Diks9ApifD4Ze6SOwHw1aW++SOA=;F[:code_snippetI"lib/default.rb;TI"!VsWFbGwDOJYgSTH6OLahIOQ/R7c=;F[;	I"lib/helpers_.rb;TI"!7RcUm8wgHGu6wIppfBkJgkHH7hI=;F:configI"!Rfu55a/a8tK2wsY9t6+tKuoZ4kI=;F:
+rulesI"!nclWn6tIAjzNd8AV/It9HpNy9y0=;F[;I"/img/miked/;TI"!2Pv9+EEz7lRzxgLeQ/Pio34fZ4w=;F[;o:Nanoc::Identifier:
+@type:legacy:@stringI"/community/;TI"!qhNPBon1/ad0HpchMEd2S1UBwQY=;F[;o;;
;;I"/default/;TI"!js9HQcSk9Wfgz4Gd7CJd6EP4dgE=;F[;o;;
;;I"/docs/;TI"!g3Ovs2WfYo0cCf9n+smD9rq3E5E=;F[;o;;
;;I"
/footer/;TI"!kjqqYwLvrgWys5v5nERws6VzABQ=;F[;o;;
;;I"
/header/;TI"!G36viwjyIZUbHRl3piqQR0C59gI=;F:versioni
\ No newline at end of file


[11/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/ddcc14f4
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/ddcc14f4
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/ddcc14f4

Branch: refs/heads/usergrid-1318-queue
Commit: ddcc14f4d697780e035ca6cf1834d6f6f29a141b
Parents: 967f7c8 279c020
Author: Dave Johnson <sn...@apache.org>
Authored: Tue Apr 26 11:01:34 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Tue Apr 26 11:01:34 2016 -0400

----------------------------------------------------------------------
 content/docs/README.html                        |   8 +-
 .../file-storage-configuration.html             |   8 +-
 content/docs/assets-and-files/folders.html      |   8 +-
 .../assets-and-files/legacy-asset-support.html  |   8 +-
 .../assets-and-files/retrieving-assets.html     |   8 +-
 .../docs/assets-and-files/uploading-assets.html |   8 +-
 .../creating-and-incrementing-counters.html     |   8 +-
 .../events-and-counters.html                    |   8 +-
 .../retrieving-counters.html                    |   8 +-
 .../docs/data-queries/advanced-query-usage.html |   8 +-
 .../docs/data-queries/operators-and-types.html  |   8 +-
 content/docs/data-queries/query-parameters.html |   8 +-
 .../docs/data-queries/querying-your-data.html   |   8 +-
 content/docs/data-storage/collections.html      |   8 +-
 content/docs/data-storage/data-store-dbms.html  |   8 +-
 content/docs/data-storage/entities.html         |   8 +-
 .../docs/data-storage/optimizing-access.html    |   8 +-
 .../entity-connections/connecting-entities.html |   8 +-
 .../disconnecting-entities.html                 |   8 +-
 .../entity-connections/retrieving-entities.html |   8 +-
 content/docs/genindex.html                      |   8 +-
 content/docs/geolocation/geolocation.html       |   8 +-
 content/docs/index.html                         |   8 +-
 content/docs/installation/deployment-guide.html |   8 +-
 .../docs/installation/ug1-deploy-to-tomcat.html |   8 +-
 .../installation/ug1-launcher-quick-start.html  |   8 +-
 .../docs/installation/ug2-deploy-to-tomcat.html |   8 +-
 content/docs/introduction/async-vs-sync.html    |   8 +-
 content/docs/introduction/data-model.html       |   8 +-
 content/docs/introduction/overview.html         |   8 +-
 .../docs/introduction/usergrid-features.html    |   8 +-
 content/docs/jersey2skeleton/README.html        |   8 +-
 content/docs/objects.inv                        | Bin 686 -> 686 bytes
 content/docs/orgs-and-apps/admin-user.html      |   8 +-
 content/docs/orgs-and-apps/application.html     |   8 +-
 content/docs/orgs-and-apps/managing.html        |   8 +-
 content/docs/orgs-and-apps/organization.html    |   8 +-
 .../push-notifications/adding-push-support.html |   8 +-
 .../creating-and-managing-notifications.html    |   8 +-
 .../push-notifications/creating-notifiers.html  |   8 +-
 .../push-notifications/getting-started.html     |   8 +-
 .../managing-users-and-devices.html             |   8 +-
 content/docs/push-notifications/overview.html   |   8 +-
 .../docs/push-notifications/registering.html    |   8 +-
 content/docs/push-notifications/tbd.html        |   8 +-
 .../push-notifications/troubleshooting.html     |   8 +-
 content/docs/push-notifications/tutorial.html   |   8 +-
 .../docs/push-notifications/users-devices.html  |   8 +-
 content/docs/reference/contribute-code.html     |   8 +-
 content/docs/reference/presos-and-videos.html   |   8 +-
 content/docs/rest-endpoints/api-docs.html       |   8 +-
 content/docs/sdks/ios-new.html                  |   8 +-
 content/docs/sdks/sdk-outline.html              |   8 +-
 content/docs/sdks/tbd.html                      |   8 +-
 content/docs/search.html                        |   8 +-
 .../docs/security-and-auth/app-security.html    |   8 +-
 .../authenticating-api-requests.html            |   8 +-
 ...nticating-users-and-application-clients.html |   8 +-
 .../changing-token-time-live-ttl.html           |   8 +-
 .../docs/security-and-auth/facebook-sign.html   |   8 +-
 .../revoking-tokens-logout.html                 |   8 +-
 .../security-and-auth/securing-your-app.html    |   8 +-
 .../user-authentication-types.html              |   8 +-
 .../security-and-auth/using-permissions.html    |   8 +-
 content/docs/security-and-auth/using-roles.html |   8 +-
 content/docs/user-management/activity.html      |   8 +-
 content/docs/user-management/group.html         |   8 +-
 content/docs/user-management/groups.html        |   8 +-
 .../docs/user-management/messagee-example.html  |   8 +-
 .../docs/user-management/user-connections.html  |   8 +-
 .../docs/user-management/user-management.html   |   8 +-
 .../docs/user-management/working-user-data.html |   8 +-
 .../creating-a-new-application.html             |   8 +-
 .../docs/using-usergrid/creating-account.html   |   8 +-
 .../using-usergrid/using-a-sandbox-app.html     |   8 +-
 content/docs/using-usergrid/using-the-api.html  |   8 +-
 deployment/pcf/README.md                        |   2 +
 docs/conf.py                                    |   4 +-
 release/binary-release.sh                       |  10 +-
 release/pom.xml                                 |   2 +-
 release/release-candidate.sh                    |  62 +-
 release/release.sh                              |  84 +-
 release/src/main/assembly/binary.xml            |  27 +-
 stack/build-tools/pom.xml                       |   2 +-
 stack/config/pom.xml                            |   2 +-
 .../main/resources/usergrid-default.properties  |  27 +-
 stack/core/pom.xml                              |  16 +-
 .../apache/usergrid/batch/job/OnlyOnceJob.java  |  22 +-
 .../corepersistence/ApplicationIdCache.java     |   6 +-
 .../corepersistence/ApplicationIdCacheImpl.java |  64 +-
 .../usergrid/corepersistence/CoreModule.java    |   8 +-
 .../corepersistence/CpEntityManager.java        | 247 ++++-
 .../corepersistence/CpEntityManagerFactory.java |  49 +-
 .../corepersistence/CpManagerCache.java         |   2 +-
 .../corepersistence/CpRelationManager.java      | 149 ++-
 .../usergrid/corepersistence/CpSetup.java       | 100 +-
 .../corepersistence/EntityManagerFig.java       |   4 +
 .../usergrid/corepersistence/GuiceFactory.java  |   1 +
 .../usergrid/corepersistence/ManagerCache.java  |   2 +-
 .../asyncevents/AmazonAsyncEventService.java    | 844 -----------------
 .../asyncevents/AsyncEventService.java          |  19 +-
 .../asyncevents/AsyncEventServiceImpl.java      | 910 +++++++++++++++++++
 .../asyncevents/AsyncIndexProvider.java         |   4 +-
 .../asyncevents/EventBuilder.java               |  24 +-
 .../asyncevents/EventBuilderImpl.java           |  52 +-
 .../asyncevents/IndexDocNotFoundException.java  |  37 +
 .../asyncevents/model/AsyncEvent.java           |   9 +-
 .../model/DeIndexOldVersionsEvent.java          |  50 +
 .../asyncevents/model/EdgeDeleteEvent.java      |   4 +-
 .../model/ElasticsearchIndexEvent.java          |   2 +-
 .../asyncevents/model/EntityDeleteEvent.java    |   3 +
 .../model/InitializeApplicationIndexEvent.java  |   2 +-
 .../index/IndexProcessorFig.java                |  21 +-
 .../corepersistence/index/IndexSchemaCache.java |  50 +
 .../index/IndexSchemaCacheFactory.java          |  44 +
 .../index/IndexSchemaCacheFig.java              |  39 +
 .../index/IndexSchemaCacheImpl.java             | 119 +++
 .../corepersistence/index/IndexServiceImpl.java | 100 +-
 .../index/ReIndexRequestBuilder.java            |   7 +
 .../index/ReIndexRequestBuilderImpl.java        |  32 +
 .../index/ReIndexServiceImpl.java               |  49 +-
 .../migration/MigrationModuleVersionPlugin.java | 137 ---
 .../pipeline/builder/IdBuilder.java             |   6 +
 .../pipeline/read/FilterFactory.java            |   8 +-
 .../read/search/CandidateEntityFilter.java      |  10 +-
 .../read/traverse/AbstractReadGraphFilter.java  |  18 +-
 .../pipeline/read/traverse/IdFilter.java        |  52 ++
 .../results/IdQueryExecutor.java                |  66 ++
 .../service/ApplicationServiceImpl.java         |  37 +-
 .../service/CollectionSearch.java               |   9 +
 .../service/CollectionService.java              |   5 +
 .../service/CollectionServiceImpl.java          |  23 +
 .../service/ServiceSchedulerFig.java            |   2 +-
 .../usergrid/persistence/EntityManager.java     |   7 +
 .../persistence/EntityManagerFactory.java       |   6 +-
 .../persistence/MultiQueryIterator.java         |   2 +-
 .../persistence/NotificationGraphIterator.java  | 163 ++++
 .../persistence/PagingResultsIterator.java      |  25 +-
 .../apache/usergrid/persistence/PathQuery.java  |  67 +-
 .../org/apache/usergrid/persistence/Query.java  |   2 +
 .../apache/usergrid/persistence/Results.java    |  20 +
 .../persistence/cassandra/ApplicationCF.java    |   2 +-
 .../persistence/cassandra/CassandraService.java |   2 -
 .../usergrid/persistence/cassandra/Setup.java   |  28 +-
 .../persistence/entities/Notification.java      | 106 ++-
 .../main/resources/usergrid-core-context.xml    |   5 +-
 .../corepersistence/StaleIndexCleanupTest.java  | 184 +---
 .../index/AmazonAsyncEventServiceTest.java      | 103 ---
 .../index/AsyncEventServiceImplTest.java        |  96 ++
 .../index/AsyncIndexServiceTest.java            |   3 +-
 .../usergrid/corepersistence/index/RxTest.java  | 129 +++
 .../MigrationModuleVersionPluginTest.java       | 259 ------
 .../usergrid/persistence/CoreSchemaManager.java |  14 +-
 .../cassandra/EntityManagerFactoryImplIT.java   |   8 +-
 stack/corepersistence/cache/pom.xml             |   2 +-
 .../impl/ScopedCacheSerializationImpl.java      |   9 +-
 stack/corepersistence/collection/pom.xml        |   2 +-
 .../impl/EntityCollectionManagerImpl.java       |  10 +-
 .../mvcc/stage/write/WriteUniqueVerify.java     |   9 +-
 .../serialization/SerializationFig.java         |   3 +
 stack/corepersistence/common/pom.xml            |   2 +-
 .../core/astyanax/CassandraClusterImpl.java     |  36 +-
 .../persistence/core/astyanax/CassandraFig.java |   8 +
 .../persistence/core/astyanax/ColumnSearch.java |   7 +-
 .../core/astyanax/MultiRowColumnIterator.java   |  37 +-
 .../astyanax/MultiRowShardColumnIterator.java   | 462 ++++++++++
 .../core/consistency/TimeServiceImpl.java       |   5 +-
 .../core/executor/TaskExecutorFactory.java      |  10 +-
 .../persistence/core/shard/SmartShard.java      |  61 ++
 .../astyanax/MultiRowColumnIteratorTest.java    |  14 +-
 stack/corepersistence/graph/pom.xml             |   2 +-
 .../usergrid/persistence/graph/GraphFig.java    |  17 +
 .../graph/impl/GraphManagerImpl.java            |   2 +-
 .../impl/EdgeMetadataSerializationV2Impl.java   |   4 +-
 .../impl/shard/NodeShardCache.java              |   7 +-
 .../graph/serialization/impl/shard/Shard.java   |  33 +-
 .../impl/shard/impl/EdgeSearcher.java           | 113 ++-
 .../shard/impl/EdgeShardSerializationImpl.java  |  56 +-
 .../shard/impl/NodeShardAllocationImpl.java     |  38 +-
 .../impl/shard/impl/NodeShardCacheImpl.java     |  29 +-
 .../shard/impl/ShardEntryGroupIterator.java     |  12 +
 .../shard/impl/ShardGroupCompactionImpl.java    | 179 +++-
 .../impl/ShardedEdgeSerializationImpl.java      |  51 +-
 .../impl/shard/impl/ShardsColumnIterator.java   |  64 +-
 .../shard/impl/serialize/ShardSerializer.java   |  86 ++
 .../graph/GraphManagerShardConsistencyIT.java   | 215 +++--
 .../impl/shard/EdgeShardSerializationTest.java  |  12 +-
 .../impl/shard/NodeShardAllocationTest.java     |  44 +-
 .../impl/shard/ShardGroupCompactionTest.java    |   4 +-
 .../graph/src/test/resources/log4j.properties   |   6 +
 stack/corepersistence/map/pom.xml               |   2 +-
 .../persistence/map/impl/MapManagerImpl.java    |   6 +
 stack/corepersistence/model/pom.xml             |   2 +-
 .../model/entity/MapToEntityConverter.java      |  18 +-
 stack/corepersistence/pom.xml                   |   4 +-
 stack/corepersistence/queryindex/pom.xml        |   2 +-
 .../persistence/index/EntityIndexBatch.java     |  13 +-
 .../usergrid/persistence/index/IndexFig.java    |   5 +-
 .../index/impl/EntityToMapConverter.java        |  93 +-
 .../index/impl/EsEntityIndexBatchImpl.java      |  21 +-
 .../index/impl/EsEntityIndexImpl.java           |  25 +-
 .../index/impl/EsIndexProducerImpl.java         |   5 +-
 .../persistence/index/impl/EsProvider.java      |  20 +-
 .../index/impl/FailureMonitorImpl.java          |   2 +-
 .../persistence/index/impl/IndexOperation.java  |   9 +-
 .../index/impl/IndexOperationMessage.java       |   2 +-
 .../persistence/index/impl/EntityIndexTest.java |   2 +-
 stack/corepersistence/queue/pom.xml             |   2 +-
 .../persistence/queue/LocalQueueManager.java    |   6 +-
 .../usergrid/persistence/queue/QueueFig.java    |  21 +
 .../persistence/queue/QueueManager.java         |   6 +-
 .../persistence/queue/QueueMessage.java         |  10 +
 .../queue/impl/SNSQueueManagerImpl.java         |  48 +-
 .../persistence/queue/QueueManagerTest.java     |  10 +-
 .../apache/usergrid/mongo/BasicMongoTest.java   |   8 +-
 .../apache/usergrid/mongo/MongoQueryTest.java   |  18 +-
 stack/pom.xml                                   |   4 +-
 stack/rest/pom.xml                              |   2 +-
 .../org/apache/usergrid/rest/ApiResponse.java   |   7 +-
 .../org/apache/usergrid/rest/RootResource.java  |  31 +-
 .../rest/applications/ApplicationResource.java  |   2 +-
 .../rest/applications/CollectionResource.java   | 233 +++++
 .../rest/applications/ServiceResource.java      | 140 ++-
 .../notifiers/NotifierResource.java             |   3 +-
 .../notifiers/NotifiersResource.java            |   3 +-
 .../rest/applications/users/UserResource.java   |  26 +-
 .../rest/applications/users/UsersResource.java  |   3 +-
 .../IllegalArgumentExceptionMapper.java         |   4 +-
 .../ServiceResourceNotFoundExceptionMapper.java |   9 +-
 .../rest/management/ManagementResource.java     | 308 -------
 .../applications/ApplicationResource.java       |  34 +-
 .../rest/management/users/UserResource.java     |   2 +-
 .../organizations/OrganizationResource.java     |   8 +-
 .../security/SecuredResourceFilterFactory.java  |  31 +-
 .../OAuth2AccessTokenSecurityFilter.java        |   3 +-
 .../usergrid/rest/system/DatabaseResource.java  |   4 +-
 .../usergrid/rest/system/IndexResource.java     |   6 +
 .../resources/usergrid-rest-deploy-context.xml  |   7 +
 .../rest/applications/ApplicationCreateIT.java  |   3 +-
 .../rest/applications/ApplicationDeleteIT.java  |  17 +-
 .../applications/ApplicationResourceIT.java     |   2 +-
 .../collection/CollectionsResourceIT.java       | 764 +++++++++++++++-
 .../collection/paging/PagingResourceIT.java     |  70 +-
 .../collection/users/PermissionsResourceIT.java |   6 +-
 .../usergrid/rest/management/AdminUsersIT.java  | 102 ++-
 .../rest/management/ManagementResourceIT.java   |  58 +-
 .../rest/test/resource/AbstractRestIT.java      |   1 +
 .../rest/test/resource/ClientSetup.java         |  10 +
 .../test/resource/endpoints/NamedResource.java  |  22 +
 .../resources/usergrid-custom-test.properties   |   4 +
 stack/services/pom.xml                          |  19 +-
 .../usergrid/management/ManagementService.java  |   7 +-
 .../cassandra/ManagementServiceImpl.java        | 113 ++-
 .../usergrid/security/shiro/ShiroCache.java     |  41 +-
 .../security/shiro/ShiroCacheManager.java       |  15 +-
 .../shiro/credentials/AdminUserAccessToken.java |   3 +
 .../credentials/ApplicationAccessToken.java     |   3 +
 .../ApplicationClientCredentials.java           |   5 +
 .../credentials/OrganizationAccessToken.java    |   3 +
 .../shiro/principals/AdminUserPrincipal.java    |   3 +
 .../principals/ApplicationGuestPrincipal.java   |   4 +-
 .../shiro/principals/ApplicationPrincipal.java  |   4 +-
 .../principals/ApplicationUserPrincipal.java    |   3 +
 .../shiro/principals/OrganizationPrincipal.java |   4 +-
 .../security/shiro/utils/LocalShiroCache.java   |  80 ++
 .../usergrid/security/tokens/TokenService.java  |   3 +
 .../tokens/cassandra/TokenServiceImpl.java      | 372 +++++++-
 .../services/AbstractCollectionService.java     |  56 ++
 .../services/AbstractConnectionsService.java    |  13 +
 .../usergrid/services/AbstractService.java      |  14 +-
 .../org/apache/usergrid/services/Service.java   |   3 +
 .../usergrid/services/ServiceManager.java       |   4 +-
 .../usergrid/services/ServiceRequest.java       |   5 +
 .../applications/ApplicationsService.java       |  14 +
 .../usergrid/services/groups/GroupsService.java |   4 +
 .../notifications/NotificationDeviceFilter.java |  45 +
 .../notifications/NotificationsService.java     |  32 +-
 .../services/notifications/QueueListener.java   |  41 +-
 .../services/notifications/TaskManager.java     |  33 +-
 .../services/notifications/gcm/GCMAdapter.java  |   7 +-
 .../impl/ApplicationQueueManagerImpl.java       | 285 ++++--
 .../services/queues/ImportQueueManager.java     |   4 +-
 .../usergrid/services/queues/QueueListener.java |   4 +-
 .../usergrid/services/roles/RolesService.java   |   2 +
 .../usergrid/services/users/UsersService.java   |   2 +
 .../services/users/roles/RolesService.java      |   4 +
 .../resources/usergrid-services-context.xml     |  11 +-
 .../migration/AppInfoMigrationPluginTest.java   |   8 +-
 .../apns/NotificationsServiceIT.java            |  32 +-
 .../gcm/NotificationsServiceIT.java             |  58 +-
 .../resources/usergrid-custom-test.properties   |   1 +
 stack/test-utils/pom.xml                        |   2 +-
 .../usergrid/cassandra/SchemaManager.java       |   3 -
 .../usergrid/cassandra/FakeSchemaManager.java   |   8 +-
 stack/tools/pom.xml                             |   4 +-
 tests/integration/test/main.js                  |  18 +-
 .../test/notifications/notifications.js         |  83 +-
 .../test/queries/integerComparison.js           |  31 +-
 tests/integration/test/setup.js                 |   4 +-
 tests/performance/runLoadNestedEntities.sh      |  98 ++
 .../datagenerators/EntityDataGenerator.scala    |  40 +
 .../org/apache/usergrid/enums/EntityType.scala  |   3 +-
 302 files changed, 7717 insertions(+), 3398 deletions(-)
----------------------------------------------------------------------



[06/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/cbe501af
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/cbe501af
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/cbe501af

Branch: refs/heads/usergrid-1318-queue
Commit: cbe501afabe7c3453595947ead1811dfb28ad2ea
Parents: 0fd9939 c3299bc
Author: Dave Johnson <sn...@apache.org>
Authored: Fri Nov 6 15:37:26 2015 -0500
Committer: Dave Johnson <sn...@apache.org>
Committed: Fri Nov 6 15:37:26 2015 -0500

----------------------------------------------------------------------
 .../installation/ug2-deploy-to-tomcat.txt       |   2 +
 .../docs/installation/ug2-deploy-to-tomcat.html |   2 +
 docs/installation/ug2-deploy-to-tomcat.md       |   2 +
 .../corepersistence/CpEntityManagerFactory.java |   7 +-
 .../corepersistence/CpRelationManager.java      |  16 +-
 .../asyncevents/AmazonAsyncEventService.java    |  99 +--
 .../asyncevents/AsyncEventService.java          |   5 +
 .../asyncevents/EventBuilder.java               |  25 +-
 .../asyncevents/EventBuilderImpl.java           |  60 +-
 .../index/IndexProcessorFig.java                |  15 +-
 .../corepersistence/index/IndexServiceImpl.java |   5 +-
 .../pipeline/read/FilterResult.java             |   7 +
 .../read/traverse/AbstractReadGraphFilter.java  | 136 +++-
 .../read/traverse/EdgeCursorSerializer.java     |   8 +-
 .../read/traverse/EntityLoadVerifyFilter.java   |  24 +-
 .../traverse/ReadGraphCollectionFilter.java     |  11 +-
 .../ReadGraphConnectionByTypeFilter.java        |  11 +-
 .../traverse/ReadGraphConnectionFilter.java     |  11 +-
 .../results/ObservableQueryExecutor.java        |   7 +
 .../service/StatusServiceImpl.java              |   3 +-
 .../usergrid/persistence/CredentialsInfo.java   |  46 ++
 .../persistence/ObservableIterator.java         |  83 ---
 .../index/AsyncIndexServiceTest.java            |   3 +-
 .../corepersistence/index/IndexServiceTest.java |  12 +-
 .../usergrid/corepersistence/index/RxTest.java  |   4 +-
 .../pipeline/cursor/CursorTest.java             |  24 +-
 .../service/ConnectionServiceImplTest.java      |   5 +-
 .../persistence/ApplicationServiceIT.java       |   4 +-
 .../usergrid/persistence/RebuildIndexTest.java  | 118 +++-
 .../persistence/core/astyanax/CassandraFig.java |   2 +-
 .../core/astyanax/MultiRowColumnIterator.java   |  46 +-
 .../persistence/core/rx/ObservableIterator.java |   2 +-
 .../usergrid/persistence/graph/GraphFig.java    |   4 +-
 .../persistence/graph/GraphManager.java         |  14 +-
 .../usergrid/persistence/graph/MarkedEdge.java  |  15 +-
 .../persistence/graph/guice/GraphModule.java    |  11 +-
 .../graph/impl/GraphManagerImpl.java            |  90 ++-
 .../graph/impl/SimpleMarkedEdge.java            |  62 +-
 .../impl/stage/NodeDeleteListenerImpl.java      |  27 +-
 .../impl/EdgeSerializationImpl.java             |  17 +-
 .../impl/shard/AsyncTaskExecutor.java           |  34 +
 .../graph/serialization/impl/shard/Shard.java   |  15 +
 .../impl/shard/ShardEntryGroup.java             |  13 +-
 .../impl/shard/ShardGroupCompaction.java        |   4 -
 .../impl/shard/ShardGroupDeletion.java          |  78 +++
 .../impl/shard/impl/AsyncTaskExecutorImpl.java  |  53 ++
 .../shard/impl/NodeShardAllocationImpl.java     |  81 ++-
 .../shard/impl/ShardGroupColumnIterator.java    |  72 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |  10 +-
 .../impl/shard/impl/ShardGroupDeletionImpl.java | 230 +++++++
 .../impl/shard/impl/ShardsColumnIterator.java   |  10 +
 .../persistence/graph/GraphManagerIT.java       |  76 +--
 .../persistence/graph/GraphManagerLoadTest.java |  10 +-
 .../graph/GraphManagerShardConsistencyIT.java   | 382 ++++++++---
 .../graph/GraphManagerStressTest.java           |  16 +-
 .../impl/shard/ShardEntryGroupTest.java         |  14 +
 .../impl/shard/ShardGroupCompactionTest.java    |  30 +-
 .../shard/impl/ShardGroupDeletionImplTest.java  | 341 +++++++++
 stack/corepersistence/pom.xml                   |   2 +-
 .../persistence/index/CandidateResult.java      |  11 +-
 .../persistence/index/EntityIndexBatch.java     |   2 +-
 .../usergrid/persistence/index/IndexFig.java    |   6 +
 .../index/impl/DeIndexOperation.java            |   5 +
 .../index/impl/EsEntityIndexBatchImpl.java      |  34 +-
 .../index/impl/EsEntityIndexImpl.java           | 188 +++--
 .../persistence/index/impl/IndexingUtils.java   |   2 +-
 .../persistence/index/impl/EntityIndexTest.java |  14 +-
 .../usergrid/persistence/queue/QueueFig.java    |   2 +-
 stack/loadtests/README.md                       |  14 +-
 stack/loadtests/runAuditDeleteEntities.sh       |  65 ++
 .../runAuditGetAllAppCollectionEntities.sh      |   6 +-
 .../loadtests/runAuditGetCollectionEntities.sh  |   6 +-
 .../runAuditVerifyCollectionEntities.sh         |   2 +-
 stack/loadtests/runLoadEntitiesUnlimited.sh     |   1 +
 stack/loadtests/runOrgAppSetup.sh               |  17 +-
 .../datagenerators/FeederGenerator.scala        |  16 +-
 .../usergrid/enums/ConfigProperties.scala       |   8 +-
 .../apache/usergrid/enums/ScenarioType.scala    |   3 +-
 .../apache/usergrid/helpers/Extractors.scala    |  18 +-
 .../usergrid/scenarios/AuditScenarios.scala     | 203 ++++--
 .../scenarios/EntityCollectionScenarios.scala   | 102 ++-
 .../org/apache/usergrid/settings/Settings.scala |  42 +-
 .../usergrid/simulations/AuditSimulation.scala  |  15 +-
 .../simulations/ConfigurableSimulation.scala    |   2 +-
 stack/loadtests/testConfig.sh                   |   4 +-
 .../org/apache/usergrid/rest/IndexResource.java | 350 ----------
 .../apache/usergrid/rest/MigrateResource.java   | 275 --------
 .../apache/usergrid/rest/SystemResource.java    | 111 ---
 .../rest/applications/ApplicationResource.java  |  50 ++
 .../rest/applications/users/UserResource.java   | 134 +++-
 .../organizations/OrganizationsResource.java    |  33 +
 .../rest/system/ConnectionResource.java         | 216 ++++++
 .../usergrid/rest/system/DatabaseResource.java  |   2 +
 .../usergrid/rest/system/IndexResource.java     | 353 ++++++++++
 .../usergrid/rest/system/MigrateResource.java   | 277 ++++++++
 .../usergrid/rest/system/SystemResource.java    | 121 ++++
 .../collection/users/UserResourceIT.java        | 117 ++++
 stack/scripts/create_test_data.py               | 222 ++++++
 stack/scripts/migrate_entity_data.py            |  18 +-
 stack/scripts/multitenant_migrate.py            | 683 +++++++++++++++++++
 .../management/AppInfoMigrationPlugin.java      |   5 +-
 .../usergrid/management/ManagementService.java  |  14 +-
 .../cassandra/ManagementServiceImpl.java        |  43 +-
 103 files changed, 4737 insertions(+), 1591 deletions(-)
----------------------------------------------------------------------



[07/37] usergrid git commit: Merge branch 'master' into asf-site.

Posted by sn...@apache.org.
Merge branch 'master' into asf-site.

Conflicts:
	website/tmp/checksums
	website/tmp/compiled_content
	website/tmp/dependencies
	website/tmp/rule_memory


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/6474c036
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/6474c036
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/6474c036

Branch: refs/heads/usergrid-1318-queue
Commit: 6474c03694014f3d9ddbcb52b85cf61f4aa6f836
Parents: cbe501a a77ec46e
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Feb 4 09:56:55 2016 -0800
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Feb 4 09:56:55 2016 -0800

----------------------------------------------------------------------
 .gitignore                                      |     3 +-
 README.md                                       |     9 +-
 content/docs/README.html                        |     2 +-
 .../data-queries/operators-and-types.txt        |    25 +-
 content/docs/_sources/index.txt                 |     2 +-
 .../_sources/installation/deployment-guide.txt  |   484 +
 content/docs/_sources/introduction/overview.txt |     4 +-
 .../file-storage-configuration.html             |     2 +-
 content/docs/assets-and-files/folders.html      |     2 +-
 .../assets-and-files/legacy-asset-support.html  |     2 +-
 .../assets-and-files/retrieving-assets.html     |     2 +-
 .../docs/assets-and-files/uploading-assets.html |     2 +-
 .../creating-and-incrementing-counters.html     |     2 +-
 .../events-and-counters.html                    |     2 +-
 .../retrieving-counters.html                    |     2 +-
 .../docs/data-queries/advanced-query-usage.html |     2 +-
 .../docs/data-queries/operators-and-types.html  |    41 +-
 content/docs/data-queries/query-parameters.html |     2 +-
 .../docs/data-queries/querying-your-data.html   |     2 +-
 content/docs/data-storage/collections.html      |     2 +-
 content/docs/data-storage/data-store-dbms.html  |     2 +-
 content/docs/data-storage/entities.html         |     2 +-
 .../docs/data-storage/optimizing-access.html    |     2 +-
 .../entity-connections/connecting-entities.html |     2 +-
 .../disconnecting-entities.html                 |     2 +-
 .../entity-connections/retrieving-entities.html |     2 +-
 content/docs/genindex.html                      |     2 +-
 content/docs/geolocation/geolocation.html       |     2 +-
 .../creating-a-new-application.html             |     2 +-
 .../docs/getting-started/creating-account.html  |     2 +-
 .../getting-started/using-a-sandbox-app.html    |     2 +-
 content/docs/getting-started/using-the-api.html |     2 +-
 content/docs/index.html                         |    15 +-
 content/docs/installation/deployment-guide.html |   848 +
 .../docs/installation/ug1-deploy-to-tomcat.html |     2 +-
 .../installation/ug1-launcher-quick-start.html  |     6 +-
 .../docs/installation/ug2-deploy-to-tomcat.html |    31 +-
 content/docs/introduction/async-vs-sync.html    |     2 +-
 content/docs/introduction/data-model.html       |     2 +-
 content/docs/introduction/overview.html         |    11 +-
 .../docs/introduction/usergrid-features.html    |     2 +-
 content/docs/jersey2skeleton/README.html        |     2 +-
 content/docs/orgs-and-apps/admin-user.html      |     2 +-
 content/docs/orgs-and-apps/application.html     |     2 +-
 content/docs/orgs-and-apps/managing.html        |     2 +-
 content/docs/orgs-and-apps/organization.html    |     2 +-
 .../push-notifications/adding-push-support.html |     2 +-
 .../creating-and-managing-notifications.html    |     2 +-
 .../push-notifications/creating-notifiers.html  |     2 +-
 .../push-notifications/getting-started.html     |     2 +-
 .../managing-users-and-devices.html             |     2 +-
 content/docs/push-notifications/overview.html   |     2 +-
 .../docs/push-notifications/registering.html    |     2 +-
 content/docs/push-notifications/tbd.html        |     2 +-
 .../push-notifications/troubleshooting.html     |     2 +-
 content/docs/push-notifications/tutorial.html   |     2 +-
 .../docs/push-notifications/users-devices.html  |     2 +-
 content/docs/reference/contribute-code.html     |     2 +-
 content/docs/reference/presos-and-videos.html   |     6 +-
 content/docs/rest-endpoints/api-docs.html       |     2 +-
 content/docs/sdks/ios-new.html                  |     2 +-
 content/docs/sdks/sdk-outline.html              |     2 +-
 content/docs/sdks/tbd.html                      |     2 +-
 content/docs/search.html                        |     2 +-
 content/docs/searchindex.js                     |     2 +-
 .../docs/security-and-auth/app-security.html    |     2 +-
 .../authenticating-api-requests.html            |     2 +-
 ...nticating-users-and-application-clients.html |     2 +-
 .../changing-token-time-live-ttl.html           |     2 +-
 .../docs/security-and-auth/facebook-sign.html   |     2 +-
 .../revoking-tokens-logout.html                 |     2 +-
 .../security-and-auth/securing-your-app.html    |     2 +-
 .../user-authentication-types.html              |     2 +-
 .../security-and-auth/using-permissions.html    |     2 +-
 content/docs/security-and-auth/using-roles.html |     2 +-
 content/docs/user-management/activity.html      |     2 +-
 content/docs/user-management/group.html         |     2 +-
 content/docs/user-management/groups.html        |     2 +-
 .../docs/user-management/messagee-example.html  |     2 +-
 .../docs/user-management/user-connections.html  |     2 +-
 .../docs/user-management/user-management.html   |     2 +-
 .../docs/user-management/working-user-data.html |     2 +-
 deployment/aws/README.md                        |   172 +
 deployment/aws/assembly.xml                     |    74 +
 deployment/aws/aws-sample.properties            |    19 +
 deployment/aws/gatling-cluster-cf.json          |   386 +
 deployment/aws/pom.xml                          |   238 +
 deployment/aws/src/main/cql/update_locks.cql    |    23 +
 deployment/aws/src/main/cql/update_usergrid.cql |    27 +
 .../main/cql/update_usergrid_applications.cql   |    46 +
 .../src/main/dist/init_instance/create_raid0.sh |    54 +
 .../main/dist/init_instance/init_db_server.sh   |    76 +
 .../main/dist/init_instance/init_es_server.sh   |    71 +
 .../dist/init_instance/init_graphite_server.sh  |    69 +
 .../dist/init_instance/init_opscenter_server.sh |   287 +
 .../main/dist/init_instance/init_rest_server.sh |   257 +
 .../dist/init_instance/install_cassandra.sh     |    51 +
 .../main/dist/init_instance/install_collectd.sh |   350 +
 .../dist/init_instance/install_elasticsearch.sh |   123 +
 .../init_instance/install_opscenter_agent.sh    |    42 +
 .../dist/init_instance/install_oraclejdk.sh     |    55 +
 .../main/dist/init_instance/install_yourkit.sh  |    39 +
 .../main/dist/init_instance/update_keyspaces.sh |    75 +
 .../aws/src/main/dist/lib/log4j.properties      |    53 +
 deployment/aws/src/main/dist/update.sh          |    35 +
 .../aws/src/main/groovy/NodeRegistry.groovy     |   227 +
 .../src/main/groovy/configure_cassandra.groovy  |   125 +
 .../main/groovy/configure_elasticsearch.groovy  |   169 +
 .../groovy/configure_opscenter_agent.groovy     |    50 +
 .../groovy/configure_opscenter_cassandra.groovy |   120 +
 .../groovy/configure_opscenter_usergrid.groovy  |    58 +
 .../src/main/groovy/configure_portal_new.groovy |    28 +
 .../src/main/groovy/configure_usergrid.groovy   |   193 +
 .../aws/src/main/groovy/create_dashboard.groovy |    79 +
 .../src/main/groovy/get_first_instance.groovy   |    46 +
 .../src/main/groovy/registry_register.groovy    |    38 +
 .../aws/src/main/groovy/tag_instance.groovy     |    55 +
 .../src/main/groovy/wait_for_instances.groovy   |    47 +
 deployment/aws/ugcluster-cf.json                |  2062 +
 docs/data-queries/operators-and-types.md        |    25 +-
 docs/index.rst                                  |     2 +-
 docs/installation/deployment-guide.md           |   484 +
 docs/introduction/overview.md                   |     4 +-
 docs/push.tgz                                   |   Bin 1651449 -> 0 bytes
 portal/Gruntfile.js                             |     5 +-
 portal/bower.json                               |     2 +-
 portal/getStatus.js                             |    37 +
 portal/package.json                             |     2 +-
 portal/status.html                              |    35 +
 .../apache/usergrid/android/sdk/UGClient.java   |    12 +-
 sdks/ios/README.md                              |    53 +-
 sdks/nodejs/lib/usergrid.js                     |     4 +-
 stack/Coverage.md                               |     2 +-
 stack/awscluster/README.md                      |   163 -
 stack/awscluster/assembly.xml                   |    74 -
 stack/awscluster/aws-sample.properties          |    19 -
 stack/awscluster/gatling-cluster-cf.json        |   386 -
 stack/awscluster/pom.xml                        |   237 -
 stack/awscluster/src/main/cql/update_locks.cql  |    23 -
 .../awscluster/src/main/cql/update_usergrid.cql |    27 -
 .../main/cql/update_usergrid_applications.cql   |    46 -
 .../src/main/dist/init_instance/create_raid0.sh |    54 -
 .../main/dist/init_instance/init_db_server.sh   |    76 -
 .../main/dist/init_instance/init_es_server.sh   |    71 -
 .../dist/init_instance/init_graphite_server.sh  |    69 -
 .../dist/init_instance/init_opscenter_server.sh |   287 -
 .../main/dist/init_instance/init_rest_server.sh |   257 -
 .../dist/init_instance/install_cassandra.sh     |    51 -
 .../main/dist/init_instance/install_collectd.sh |   350 -
 .../dist/init_instance/install_elasticsearch.sh |   123 -
 .../init_instance/install_opscenter_agent.sh    |    42 -
 .../dist/init_instance/install_oraclejdk.sh     |    55 -
 .../main/dist/init_instance/install_yourkit.sh  |    39 -
 .../main/dist/init_instance/update_keyspaces.sh |    75 -
 .../src/main/dist/lib/log4j.properties          |    54 -
 stack/awscluster/src/main/dist/update.sh        |    35 -
 .../awscluster/src/main/dist/webapps/dummy.txt  |     0
 .../src/main/groovy/NodeRegistry.groovy         |   227 -
 .../src/main/groovy/configure_cassandra.groovy  |   129 -
 .../main/groovy/configure_elasticsearch.groovy  |   169 -
 .../groovy/configure_opscenter_agent.groovy     |    50 -
 .../groovy/configure_opscenter_cassandra.groovy |   120 -
 .../groovy/configure_opscenter_usergrid.groovy  |    58 -
 .../src/main/groovy/configure_portal_new.groovy |    28 -
 .../src/main/groovy/configure_usergrid.groovy   |   207 -
 .../src/main/groovy/create_dashboard.groovy     |    79 -
 .../src/main/groovy/get_first_instance.groovy   |    46 -
 .../src/main/groovy/registry_register.groovy    |    38 -
 .../src/main/groovy/tag_instance.groovy         |    55 -
 .../src/main/groovy/wait_for_instances.groovy   |    47 -
 stack/awscluster/ugcluster-cf.json              |  2062 -
 stack/build-tools/pom.xml                       |    11 +
 stack/config/pom.xml                            |    10 +
 .../main/resources/usergrid-default.properties  |    40 +-
 .../src/test/resources/usergrid-test.properties |    20 +-
 stack/core/pom.xml                              |    16 +-
 .../usergrid/batch/UsergridJobFactory.java      |     2 +-
 .../apache/usergrid/batch/job/OnlyOnceJob.java  |     3 +-
 .../batch/service/JobSchedulerService.java      |    55 +-
 .../batch/service/SchedulerServiceImpl.java     |    34 +-
 .../hazelcast/HazelcastLifecycleMonitor.java    |     8 +-
 .../corepersistence/ApplicationIdCacheImpl.java |     4 +-
 .../usergrid/corepersistence/CoreModule.java    |   134 +-
 .../corepersistence/CpEntityManager.java        |   196 +-
 .../corepersistence/CpEntityManagerFactory.java |    37 +-
 .../corepersistence/CpRelationManager.java      |   130 +-
 .../usergrid/corepersistence/CpSetup.java       |    16 +-
 .../usergrid/corepersistence/CpWalker.java      |    19 +-
 .../usergrid/corepersistence/GuiceFactory.java  |     6 +-
 .../asyncevents/AmazonAsyncEventService.java    |    63 +-
 .../asyncevents/AsyncEventsSchedulerFig.java    |    76 +
 .../asyncevents/AsyncIndexProvider.java         |     2 +-
 .../asyncevents/EventBuilderImpl.java           |    91 +-
 .../asyncevents/EventExecutionScheduler.java    |    37 +
 .../index/IndexProcessorFig.java                |     2 +-
 .../corepersistence/index/IndexServiceImpl.java |    12 +-
 .../index/ReIndexServiceImpl.java               |     6 +-
 .../migration/DeDupConnectionDataMigration.java |     2 +-
 .../pipeline/PipelineModule.java                |     2 +-
 .../pipeline/PipelineOperations.java            |    30 -
 .../search/AbstractElasticSearchFilter.java     |     4 +-
 .../read/search/CandidateEntityFilter.java      |    15 +-
 .../pipeline/read/search/CandidateIdFilter.java |     6 +-
 .../read/search/SearchCollectionFilter.java     |     2 -
 .../read/search/SearchConnectionFilter.java     |     8 +-
 .../read/traverse/AbstractReadGraphFilter.java  |    49 +-
 .../read/traverse/EntityLoadVerifyFilter.java   |     4 +-
 .../traverse/ReadGraphCollectionFilter.java     |     3 +-
 .../traverse/ReadGraphConnectionFilter.java     |     3 +-
 .../results/ObservableQueryExecutor.java        |     9 +-
 .../rx/impl/AllApplicationsObservable.java      |     2 -
 .../corepersistence/rx/impl/AsyncRepair.java    |    38 +
 .../rx/impl/ResponseImportTasks.java            |    38 +
 .../service/ConnectionServiceImpl.java          |    16 +-
 .../service/ServiceSchedulerFig.java            |    66 +
 .../corepersistence/util/CpNamingUtils.java     |    23 +-
 .../usergrid/count/CassandraCounterStore.java   |    13 +-
 .../usergrid/count/CassandraSubmitter.java      |     4 +-
 .../apache/usergrid/count/SimpleBatcher.java    |     2 +-
 .../usergrid/count/Slf4JBatchSubmitter.java     |     6 +-
 .../locking/cassandra/AstyanaxLockImpl.java     |    92 +
 .../cassandra/AstyanaxLockManagerImpl.java      |   211 +
 .../locking/cassandra/HectorLockImpl.java       |    86 -
 .../cassandra/HectorLockManagerImpl.java        |   142 -
 .../usergrid/locking/guice/LockModule.java      |    40 +
 .../locking/singlenode/SingleNodeLockImpl.java  |    71 -
 .../singlenode/SingleNodeLockManagerImpl.java   |    94 -
 .../zookeeper/ZooKeeperLockManagerImpl.java     |   115 -
 .../locking/zookeeper/ZookeeperLockImpl.java    |    88 -
 .../org/apache/usergrid/mq/CounterQuery.java    |     4 -
 .../java/org/apache/usergrid/mq/Message.java    |     4 +-
 .../main/java/org/apache/usergrid/mq/Query.java |    16 +-
 .../usergrid/mq/cassandra/CassandraMQUtils.java |     8 +-
 .../mq/cassandra/QueueManagerFactoryImpl.java   |     5 +-
 .../usergrid/mq/cassandra/QueueManagerImpl.java |    24 +-
 .../apache/usergrid/mq/cassandra/QueuesCF.java  |     2 +-
 .../mq/cassandra/io/AbstractSearch.java         |     9 +-
 .../mq/cassandra/io/ConsumerTransaction.java    |    32 +-
 .../mq/cassandra/io/NoTransactionSearch.java    |     2 +-
 .../usergrid/persistence/EntityManager.java     |     5 +-
 .../persistence/EntityManagerFactory.java       |     8 +-
 .../org/apache/usergrid/persistence/Schema.java |    26 +-
 .../cassandra/CassandraPersistenceUtils.java    |     8 +-
 .../persistence/cassandra/CassandraService.java |    65 +-
 .../cassandra/ConnectionRefImpl.java            |     4 +-
 .../persistence/cassandra/CounterUtils.java     |    28 +-
 .../usergrid/persistence/cassandra/Setup.java   |     4 -
 .../cassandra/util/Slf4jTraceTagReporter.java   |     4 +-
 .../cassandra/util/TraceTagAspect.java          |    11 +-
 .../cassandra/util/TraceTagManager.java         |    10 +-
 .../persistence/entities/Notification.java      |   177 +-
 .../usergrid/persistence/entities/Notifier.java |    51 +-
 .../usergrid/system/ServerEnvironmentProps.java |    27 +
 .../usergrid/system/UsergridSystemMonitor.java  |     4 +-
 .../org/apache/usergrid/utils/AESUtils.java     |     8 +-
 .../apache/usergrid/utils/ConversionUtils.java  |     6 +-
 .../org/apache/usergrid/utils/IndexUtils.java   |     4 +-
 .../org/apache/usergrid/utils/JsonUtils.java    |    22 +-
 .../org/apache/usergrid/utils/ListUtils.java    |    10 +-
 .../org/apache/usergrid/utils/MailUtils.java    |     2 +-
 .../org/apache/usergrid/utils/MapUtils.java     |     8 +-
 .../org/apache/usergrid/utils/StringUtils.java  |     4 +-
 .../org/apache/usergrid/utils/UUIDUtils.java    |    16 +-
 .../main/resources/usergrid-core-context.xml    |    36 +-
 .../org/apache/usergrid/AbstractCoreIT.java     |     6 +-
 .../org/apache/usergrid/CoreApplication.java    |    11 +-
 .../org/apache/usergrid/CoreITSetupImpl.java    |    16 +-
 .../apache/usergrid/batch/BulkTestUtils.java    |     1 -
 .../usergrid/batch/job/CountdownLatchJob.java   |     1 -
 .../usergrid/batch/job/DelayExecution.java      |     1 -
 .../usergrid/batch/job/DelayHeartbeat.java      |     1 -
 .../usergrid/batch/job/FailureJobExecution.java |     1 -
 .../usergrid/batch/job/OnlyOnceExceution.java   |   123 -
 .../usergrid/batch/job/OnlyOnceExecution.java   |   122 +
 .../job/OnlyOnceUnlockOnFailExceution.java      |   133 -
 .../job/OnlyOnceUnlockOnFailExecution.java      |   132 +
 .../usergrid/batch/job/SchedulerRuntime1IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime2IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime3IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime4IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime5IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime6IT.java |     5 +-
 .../usergrid/batch/job/SchedulerRuntime7IT.java |     7 +-
 .../usergrid/batch/job/SchedulerRuntime8IT.java |     3 +-
 .../batch/job/SchedulerRuntimeIntervalIT.java   |     3 +-
 .../usergrid/batch/job/TestJobListener.java     |    12 +-
 .../usergrid/batch/job/TestJobListenerTest.java |     6 +-
 .../clustering/hazelcast/HazelcastTest.java     |     5 +-
 .../corepersistence/CpEntityMapUtilsTest.java   |    28 +-
 .../corepersistence/StaleIndexCleanupTest.java  |    99 +-
 .../usergrid/corepersistence/index/RxTest.java  |     5 +-
 .../count/BatchCountParallelismTest.java        |    16 +-
 .../usergrid/locking/AstyanaxLockManagerIT.java |   164 +
 .../locking/cassandra/HectorLockManagerIT.java  |   185 -
 .../SingleNodeLockTestSingleNode.java           |   170 -
 .../zookeeper/AbstractZooKeeperTest.java        |   127 -
 .../usergrid/locking/zookeeper/ZooPut.java      |   114 -
 .../zookeeper/ZookeeperLockManagerTest.java     |   186 -
 .../java/org/apache/usergrid/mq/MessagesIT.java |    70 +-
 .../org/apache/usergrid/mq/QueuePathsTest.java  |    18 +-
 .../usergrid/persistence/CollectionIT.java      |   118 +-
 .../usergrid/persistence/CoreSchemaManager.java |    12 +-
 .../apache/usergrid/persistence/CounterIT.java  |    62 +-
 .../persistence/EntityConnectionsIT.java        |    56 +-
 .../persistence/EntityDictionaryIT.java         |    24 +-
 .../usergrid/persistence/EntityManagerIT.java   |   112 +-
 .../apache/usergrid/persistence/EntityTest.java |     2 -
 .../org/apache/usergrid/persistence/GeoIT.java  |   152 +-
 .../persistence/GeoQueryBooleanTest.java        |     8 +-
 .../apache/usergrid/persistence/IndexIT.java    |    43 +-
 .../persistence/PerformanceEntityReadTest.java  |     4 +-
 .../persistence/PerformanceEntityWriteTest.java |     4 +-
 .../usergrid/persistence/RebuildIndexTest.java  |    19 +-
 .../apache/usergrid/persistence/SchemaTest.java |    18 +-
 .../query/IntersectionTransitivePagingIT.java   |     4 +-
 .../query/IntersectionUnionPagingIT.java        |    12 +-
 .../persistence/query/IteratingQueryIT.java     |   104 +-
 .../persistence/query/NotSubPropertyIT.java     |     8 +-
 .../persistence/query/ParenthesisProblemIT.java |    81 +
 .../apache/usergrid/utils/IndexUtilsTest.java   |     6 +-
 .../apache/usergrid/utils/JsonUtilsTest.java    |     4 +-
 .../apache/usergrid/utils/ListUtilsTest.java    |     6 +-
 .../org/apache/usergrid/utils/MapUtilsTest.java |     6 +-
 .../apache/usergrid/utils/TestInflector.java    |     6 +-
 .../apache/usergrid/utils/UUIDUtilsTest.java    |     4 +-
 stack/core/src/test/resources/log4j.properties  |     1 -
 .../impl/ScopedCacheSerializationImpl.java      |    18 +-
 .../persistence/cache/ScopedCacheTest.java      |    15 +-
 .../collection/guice/CollectionModule.java      |    32 +
 .../guice/CollectionTaskExecutor.java           |    35 -
 .../EntityCollectionManagerFactoryImpl.java     |     5 +-
 .../impl/EntityCollectionManagerImpl.java       |    20 +-
 .../mvcc/stage/delete/MarkCommit.java           |     6 +-
 .../collection/mvcc/stage/delete/MarkStart.java |     4 +-
 .../mvcc/stage/delete/UniqueCleanup.java        |    12 +-
 .../mvcc/stage/delete/VersionCompact.java       |     2 +-
 .../mvcc/stage/write/RollbackAction.java        |     2 +-
 .../mvcc/stage/write/WriteCommit.java           |    17 +-
 .../mvcc/stage/write/WriteOptimisticVerify.java |     4 +-
 .../collection/mvcc/stage/write/WriteStart.java |    15 +-
 .../mvcc/stage/write/WriteUniqueVerify.java     |     2 +-
 .../scheduler/CollectionExecutorScheduler.java  |    52 +
 .../scheduler/CollectionSchedulerFig.java       |    53 +
 .../MvccEntitySerializationStrategyImpl.java    |    24 +-
 ...vccEntitySerializationStrategyProxyImpl.java |     4 +-
 .../MvccEntitySerializationStrategyV1Impl.java  |     8 +-
 .../MvccEntitySerializationStrategyV2Impl.java  |    13 +-
 .../MvccEntitySerializationStrategyV3Impl.java  |    16 +-
 .../MvccLogEntrySerializationProxyImpl.java     |     4 +-
 .../MvccLogEntrySerializationStrategyImpl.java  |    12 +-
 ...MvccLogEntrySerializationStrategyV1Impl.java |    18 +-
 ...MvccLogEntrySerializationStrategyV2Impl.java |    18 +-
 .../UniqueValueSerializationStrategyImpl.java   |    35 +-
 ...iqueValueSerializationStrategyProxyImpl.java |     4 +-
 .../UniqueValueSerializationStrategyV1Impl.java |    31 +-
 .../UniqueValueSerializationStrategyV2Impl.java |    31 +-
 .../migration/MvccEntityDataMigrationImpl.java  |     6 +-
 .../collection/EntityCollectionManagerIT.java   |    68 +
 .../EntityCollectionManagerStressTest.java      |    15 +-
 .../changelog/ChangeLogGeneratorImplTest.java   |     8 +-
 .../mvcc/stage/AbstractEntityStageTest.java     |     1 -
 .../mvcc/stage/delete/MarkCommitTest.java       |     2 +-
 .../mvcc/stage/delete/UniqueCleanupTest.java    |     1 -
 .../mvcc/stage/write/WriteCommitTest.java       |     2 +-
 .../stage/write/WriteOptimisticVerifyTest.java  |     4 +-
 .../impl/SerializationComparison.java           |     5 +-
 ...niqueValueSerializationStrategyImplTest.java |     4 +-
 stack/corepersistence/common/pom.xml            |   350 +-
 .../core/astyanax/AstyanaxKeyspaceProvider.java |    46 +-
 .../core/astyanax/CassandraCluster.java         |    20 +
 .../core/astyanax/CassandraClusterImpl.java     |   199 +
 .../persistence/core/astyanax/CassandraFig.java |    72 +-
 .../astyanax/MultiKeyColumnNameIterator.java    |     8 +-
 .../core/astyanax/MultiRowColumnIterator.java   |    16 +-
 .../core/astyanax/MultiTenantColumnFamily.java  |    47 +
 .../MultiTenantColumnFamilyDefinition.java      |   138 +
 .../core/astyanax/MultiTennantColumnFamily.java |    47 -
 .../MultiTennantColumnFamilyDefinition.java     |   138 -
 .../core/executor/TaskExecutorFactory.java      |   108 +-
 .../persistence/core/guice/CommonModule.java    |    36 +-
 .../core/metrics/MetricsFactoryImpl.java        |     6 +-
 .../migration/data/AbstractMigrationPlugin.java |     6 +-
 .../data/DataMigrationManagerImpl.java          |    11 +-
 .../data/MigrationInfoSerializationImpl.java    |    24 +-
 .../core/migration/schema/Migration.java        |     4 +-
 .../migration/schema/MigrationManagerImpl.java  |    14 +-
 .../persistence/core/rx/ObservableIterator.java |     4 +-
 .../persistence/core/rx/OrderedMerge.java       |     6 +-
 .../persistence/core/rx/RxSchedulerFig.java     |    71 -
 .../core/rx/RxTaskSchedulerImpl.java            |    81 +-
 .../core/astyanax/ColumnNameIteratorTest.java   |     5 +-
 .../MultiKeyColumnNameIteratorTest.java         |     5 +-
 .../astyanax/MultiRowColumnIteratorTest.java    |     5 +-
 .../persistence/core/astyanax/TestUtils.java    |    14 +-
 .../persistence/core/rx/OrderedMergeTest.java   |    43 +-
 stack/corepersistence/graph/pom.xml             |     1 +
 .../usergrid/persistence/graph/GraphFig.java    |     2 +-
 .../persistence/graph/guice/GraphModule.java    |     7 -
 .../graph/impl/GraphManagerImpl.java            |    14 +-
 .../graph/impl/stage/EdgeDeleteRepairImpl.java  |    18 +-
 .../graph/impl/stage/EdgeMetaRepairImpl.java    |    46 +-
 .../impl/stage/NodeDeleteListenerImpl.java      |    20 +-
 .../EdgeMetadataSerializationProxyImpl.java     |     4 +-
 .../impl/EdgeMetadataSerializationV1Impl.java   |    36 +-
 .../impl/EdgeMetadataSerializationV2Impl.java   |    36 +-
 .../impl/EdgeSerializationImpl.java             |    61 +-
 .../serialization/impl/EdgesObservableImpl.java |    16 +-
 .../impl/NodeSerializationImpl.java             |    14 +-
 .../impl/TargetIdObservableImpl.java            |     4 +-
 .../impl/migration/EdgeDataMigrationImpl.java   |     2 +-
 .../impl/shard/DirectedEdgeMeta.java            |     4 +-
 .../impl/shard/EdgeColumnFamilies.java          |    12 +-
 .../impl/shard/EdgeShardStrategy.java           |    10 +-
 .../impl/shard/NodeShardApproximation.java      |    66 -
 .../impl/shard/ShardEntryGroup.java             |    21 +-
 .../impl/shard/ShardedEdgeSerialization.java    |     2 +-
 .../serialization/impl/shard/count/Counter.java |   131 -
 .../shard/count/NodeShardApproximationImpl.java |   272 -
 .../count/NodeShardCounterSerialization.java    |    48 -
 .../NodeShardCounterSerializationImpl.java      |   186 -
 .../impl/shard/count/ShardKey.java              |    75 -
 .../shard/impl/EdgeShardSerializationImpl.java  |    17 +-
 .../shard/impl/NodeShardAllocationImpl.java     |    37 +-
 .../impl/shard/impl/NodeShardCacheImpl.java     |     2 +-
 .../shard/impl/ShardGroupColumnIterator.java    |    14 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |    37 +-
 .../impl/shard/impl/ShardGroupDeletionImpl.java |    44 +-
 .../impl/ShardedEdgeSerializationImpl.java      |    89 +-
 .../impl/shard/impl/ShardsColumnIterator.java   |    23 +-
 .../shard/impl/SizebasedEdgeColumnFamilies.java |    46 +-
 .../shard/impl/SizebasedEdgeShardStrategy.java  |    13 +-
 .../persistence/graph/GraphManagerLoadTest.java |    18 +-
 .../graph/GraphManagerShardConsistencyIT.java   |    81 +-
 .../graph/GraphManagerShardingIT.java           |   208 -
 .../graph/GraphManagerStressTest.java           |    54 +-
 .../graph/impl/NodeDeleteListenerTest.java      |     9 +-
 .../serialization/EdgeSerializationTest.java    |    11 +-
 .../graph/serialization/TestCount.java          |     4 +-
 .../impl/shard/EdgeShardSerializationTest.java  |    44 +
 .../impl/shard/NodeShardAllocationTest.java     |    54 +-
 .../impl/shard/ShardEntryGroupTest.java         |    59 +
 .../serialization/impl/shard/ShardTest.java     |    65 +
 .../shard/count/NodeShardApproximationTest.java |   627 -
 .../NodeShardCounterSerializationTest.java      |   124 -
 .../shard/impl/ShardGroupDeletionImplTest.java  |     5 +
 ...-cassandra-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 619559 -> 0 bytes
 ...-cassandra-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 161970 -> 0 bytes
 ...astyanax-cassandra-1.56.49-SNAPSHOT-UG-1.jar |   Bin 224466 -> 0 bytes
 ...astyanax-cassandra-1.56.49-SNAPSHOT-UG-1.pom |   112 -
 .../astyanax-cassandra/maven-metadata-local.xml |    12 -
 ...ax-contrib-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 33178 -> 0 bytes
 ...ax-contrib-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 2314 -> 0 bytes
 .../astyanax-contrib-1.56.49-SNAPSHOT-UG-1.jar  |   Bin 4842 -> 0 bytes
 .../astyanax-contrib-1.56.49-SNAPSHOT-UG-1.pom  |   112 -
 .../astyanax-contrib/maven-metadata-local.xml   |    12 -
 ...yanax-core-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 522906 -> 0 bytes
 ...yanax-core-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 141910 -> 0 bytes
 .../astyanax-core-1.56.49-SNAPSHOT-UG-1.jar     |   Bin 212858 -> 0 bytes
 .../astyanax-core-1.56.49-SNAPSHOT-UG-1.pom     |    88 -
 .../astyanax-core/maven-metadata-local.xml      |    12 -
 ...ity-mapper-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 97513 -> 0 bytes
 ...ity-mapper-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 30591 -> 0 bytes
 ...anax-entity-mapper-1.56.49-SNAPSHOT-UG-1.jar |   Bin 68952 -> 0 bytes
 ...anax-entity-mapper-1.56.49-SNAPSHOT-UG-1.pom |   118 -
 .../maven-metadata-local.xml                    |    12 -
 ...x-examples-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 38284 -> 0 bytes
 ...x-examples-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 4457 -> 0 bytes
 .../astyanax-examples-1.56.49-SNAPSHOT-UG-1.jar |   Bin 8506 -> 0 bytes
 .../astyanax-examples-1.56.49-SNAPSHOT-UG-1.pom |   106 -
 .../astyanax-examples/maven-metadata-local.xml  |    12 -
 ...anax-queue-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 180462 -> 0 bytes
 ...anax-queue-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 44057 -> 0 bytes
 .../astyanax-queue-1.56.49-SNAPSHOT-UG-1.jar    |   Bin 86586 -> 0 bytes
 .../astyanax-queue-1.56.49-SNAPSHOT-UG-1.pom    |   112 -
 .../astyanax-queue/maven-metadata-local.xml     |    12 -
 ...ax-recipes-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 204424 -> 0 bytes
 ...ax-recipes-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 58161 -> 0 bytes
 .../astyanax-recipes-1.56.49-SNAPSHOT-UG-1.jar  |   Bin 100246 -> 0 bytes
 .../astyanax-recipes-1.56.49-SNAPSHOT-UG-1.pom  |   106 -
 .../astyanax-recipes/maven-metadata-local.xml   |    12 -
 ...nax-thrift-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 197342 -> 0 bytes
 ...nax-thrift-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 76509 -> 0 bytes
 .../astyanax-thrift-1.56.49-SNAPSHOT-UG-1.jar   |   Bin 239007 -> 0 bytes
 .../astyanax-thrift-1.56.49-SNAPSHOT-UG-1.pom   |   112 -
 .../astyanax-thrift/maven-metadata-local.xml    |    12 -
 .../astyanax-1.56.49-SNAPSHOT-UG-1-javadoc.jar  |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1-sources.jar  |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1.jar          |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1.pom          |   136 -
 .../astyanax/astyanax/maven-metadata-local.xml  |    12 -
 stack/corepersistence/map/pom.xml               |     1 +
 .../map/impl/MapSerializationImpl.java          |    28 +-
 .../org/apache/usergrid/ExperimentalTest.java   |    22 +
 .../java/org/apache/usergrid/StressTest.java    |    22 +
 .../persistence/model/entity/EntityMap.java     |    50 +-
 .../model/entity/EntityToMapConverter.java      |     9 +-
 .../model/entity/MapToEntityConverter.java      |   237 +-
 .../persistence/model/field/ArrayField.java     |     4 +-
 .../persistence/model/field/BooleanField.java   |     4 +-
 .../persistence/model/field/ByteArrayField.java |     8 +-
 .../persistence/model/field/DistanceField.java  |    42 +
 .../persistence/model/field/FieldTypeName.java  |     4 +-
 .../persistence/model/field/FloatField.java     |     4 +-
 .../persistence/model/field/IntegerField.java   |     4 +-
 .../persistence/model/field/ListField.java      |     4 +-
 .../persistence/model/field/LocationField.java  |     4 +-
 .../persistence/model/field/LongField.java      |     4 +-
 .../persistence/model/field/NullField.java      |    44 +
 .../model/field/SerializedObjectField.java      |     8 +-
 .../persistence/model/field/SetField.java       |     6 +-
 .../persistence/model/field/StringField.java    |     6 +-
 .../persistence/model/field/UUIDField.java      |     4 +-
 .../model/entity/MapToEntityConverterTest.java  |   179 +
 .../persistence/model/field/EntityTest.java     |     9 +-
 stack/corepersistence/pom.xml                   |   120 +-
 stack/corepersistence/queryindex/pom.xml        |     5 +-
 .../persistence/index/GeoCandidateResult.java   |    40 +
 .../index/impl/DeIndexOperation.java            |     4 +-
 .../persistence/index/impl/EntityField.java     |    11 +
 .../index/impl/EntityMappingParser.java         |    25 +-
 .../index/impl/EntityToMapConverter.java        |     3 +-
 .../index/impl/EsEntityIndexBatchImpl.java      |    22 +-
 .../index/impl/EsEntityIndexImpl.java           |    57 +-
 .../index/impl/EsIndexProducerImpl.java         |    18 +-
 .../persistence/index/impl/EsProvider.java      |     8 +-
 .../index/impl/FailureMonitorImpl.java          |     7 +-
 .../persistence/index/impl/FieldParser.java     |     5 +-
 .../index/impl/IndexOperationMessage.java       |     4 +-
 .../persistence/index/impl/IndexingUtils.java   |    63 +-
 .../EsIndexMappingMigrationPlugin.java          |     4 +-
 .../persistence/index/query/ParsedQuery.java    |     4 +
 .../index/query/ParsedQueryBuilder.java         |     4 +-
 .../index/utils/ConversionUtils.java            |     6 +-
 .../persistence/index/utils/ListUtils.java      |    10 +-
 .../persistence/index/utils/UUIDUtils.java      |     6 +-
 .../persistence/index/impl/EntityIndexTest.java |    79 +-
 .../index/impl/EntityToMapConverterTest.java    |   193 +-
 .../persistence/index/impl/GeoPagingTest.java   |     3 +-
 .../index/impl/IndexLoadTestsIT.java            |     4 +
 .../index/impl/IndexingUtilsTest.java           |    36 +
 stack/corepersistence/queue/pom.xml             |   179 +-
 .../persistence/queue/LocalQueueManager.java    |     5 +
 .../persistence/queue/impl/QueueScopeImpl.java  |     3 -
 .../queue/impl/SNSQueueManagerImpl.java         |    77 +-
 .../queue/util/AmazonNotificationUtils.java     |    22 +-
 .../usergrid/launcher/EmbeddedServerHelper.java |    10 +-
 .../resources/usergrid-standalone.properties    |    12 +-
 stack/loadtests/.gitignore                      |     1 -
 stack/loadtests/README.md                       |   207 -
 stack/loadtests/pom.xml                         |   149 -
 stack/loadtests/runAuditDeleteEntities.sh       |    65 -
 .../runAuditGetAllAppCollectionEntities.sh      |    68 -
 .../loadtests/runAuditGetCollectionEntities.sh  |    68 -
 .../runAuditVerifyCollectionEntities.sh         |    69 -
 stack/loadtests/runCollectionQueryTest.sh       |    88 -
 .../runCustomInjectRandomEntityByUuidTest.sh    |   108 -
 stack/loadtests/runDeleteEntities.sh            |    92 -
 .../loadtests/runGetEntitiesByNameSequential.sh |   101 -
 stack/loadtests/runGetEntitiesByUuid.sh         |    92 -
 stack/loadtests/runLoadEntities.sh              |    97 -
 stack/loadtests/runLoadEntitiesUnlimited.sh     |   104 -
 .../loadtests/runLoadLargeMultiFieldEntities.sh |   107 -
 stack/loadtests/runLoadNoNameEntities.sh        |    98 -
 stack/loadtests/runLoadSortableEntities.sh      |    98 -
 stack/loadtests/runOrgAppSetup.sh               |    91 -
 .../loadtests/runRandomEntityByNameQueryTest.sh |    91 -
 stack/loadtests/runRandomEntityByNameTest.sh    |    91 -
 stack/loadtests/runUpdateEntities.sh            |    91 -
 stack/loadtests/runtests_deprecated.sh          |   120 -
 .../datagenerators/EntityDataGenerator.scala    |   183 -
 .../datagenerators/FeederGenerator.scala        |   304 -
 .../datagenerators/datafiles/dist.all.last.txt  | 88799 -----------------
 .../datafiles/dist.female.first.txt             |  4275 -
 .../datafiles/dist.male.first.txt               |  1219 -
 .../usergrid/datagenerators/firstNames.txt      |  5494 -
 .../usergrid/datagenerators/lastNames.txt       | 88799 -----------------
 .../org/apache/usergrid/enums/AuthType.scala    |    31 -
 .../usergrid/enums/ConfigProperties.scala       |   181 -
 .../usergrid/enums/CsvFeedPatternType.scala     |    30 -
 .../usergrid/enums/EndConditionType.scala       |    29 -
 .../org/apache/usergrid/enums/EntityType.scala  |    30 -
 .../apache/usergrid/enums/ScenarioType.scala    |    38 -
 .../org/apache/usergrid/enums/TokenType.scala   |    29 -
 .../apache/usergrid/helpers/Extractors.scala    |   154 -
 .../org/apache/usergrid/helpers/Headers.scala   |    70 -
 .../org/apache/usergrid/helpers/Setup.scala     |   312 -
 .../org/apache/usergrid/helpers/Utils.scala     |   102 -
 .../scenarios/ApplicationScenarios.scala        |    53 -
 .../usergrid/scenarios/AuditScenarios.scala     |   342 -
 .../scenarios/ConnectionScenarios.scala         |    66 -
 .../usergrid/scenarios/DeviceScenarios.scala    |    85 -
 .../scenarios/EntityCollectionScenarios.scala   |   407 -
 .../usergrid/scenarios/EntityScenarios.scala    |    80 -
 .../usergrid/scenarios/GeoScenarios.scala       |    49 -
 .../scenarios/NotificationScenarios.scala       |    80 -
 .../usergrid/scenarios/NotifierScenarios.scala  |    70 -
 .../scenarios/OrganizationScenarios.scala       |    60 -
 .../usergrid/scenarios/TokenScenarios.scala     |    56 -
 .../usergrid/scenarios/UserScenarios.scala      |   210 -
 .../org/apache/usergrid/settings/Settings.scala |   612 -
 .../usergrid/simulations/AuditSimulation.scala  |    86 -
 .../simulations/ConfigurableSimulation.scala    |   105 -
 .../simulations/CustomInjectionSimulation.scala |   107 -
 .../simulations/deprecated/AppSimulation.scala  |    41 -
 .../deprecated/ConnectionsSimulation.scala      |    51 -
 .../deprecated/DeleteUsersSimulation.scala      |    56 -
 .../deprecated/GetEntitySimulation.scala        |    44 -
 .../deprecated/GetUserPagesSimulation.scala     |    51 -
 .../deprecated/GetUsersSimulation.scala         |    51 -
 .../deprecated/PostCustomEntitySimulation.scala |    76 -
 .../deprecated/PostUsersSimulation.scala        |    51 -
 .../PushNotificationTargetUserSimulation.scala  |    45 -
 .../deprecated/PutCustomEntitySimulation.scala  |    75 -
 .../deprecated/PutUsersSimulation.scala         |    56 -
 .../deprecated/SetupSimulation.scala            |    43 -
 stack/loadtests/src/main/scripts/gatling-mvn.sh |    31 -
 stack/loadtests/src/main/scripts/gatling-ug.sh  |    51 -
 .../src/test/resources/dummyAuditUuid.csv       |     1 -
 .../loadtests/src/test/resources/dummyUuid.csv  |     1 -
 stack/loadtests/src/test/resources/gatling.conf |   150 -
 .../src/test/resources/logback-test.xml         |    39 -
 stack/loadtests/src/test/resources/logback.xml  |    38 -
 .../loadtests/src/test/resources/recorder.conf  |    37 -
 stack/loadtests/src/test/scala/Engine.scala     |    29 -
 .../src/test/scala/IDEPathHelper.scala          |    38 -
 stack/loadtests/src/test/scala/Recorder.scala   |    28 -
 stack/loadtests/testConfig.sh                   |    67 -
 .../usergrid/mongo/AbstractMongoTest.java       |     2 +-
 stack/pom.xml                                   |  3054 +-
 stack/rest/pom.xml                              |    42 +-
 .../usergrid/rest/AbstractContextResource.java  |    68 +-
 .../org/apache/usergrid/rest/ApiResponse.java   |    74 +-
 .../org/apache/usergrid/rest/RootResource.java  |     9 +-
 .../rest/ServerEnvironmentProperties.java       |    22 +-
 .../apache/usergrid/rest/SwaggerServlet.java    |    18 +-
 .../rest/applications/ApplicationResource.java  |    61 +-
 .../rest/applications/AuthResource.java         |    30 +-
 .../rest/applications/ServiceResource.java      |    95 +-
 .../applications/assets/AssetsResource.java     |    44 +-
 .../notifiers/NotifierResource.java             |    51 +-
 .../notifiers/NotifiersResource.java            |    51 +-
 .../rest/applications/queues/QueueResource.java |    50 +-
 .../queues/QueueSubscriberResource.java         |    25 +-
 .../queues/QueueSubscriptionResource.java       |    25 +-
 .../queues/QueueTransactionsResource.java       |     4 +
 .../rest/applications/users/UserResource.java   |    93 +-
 .../rest/applications/users/UsersResource.java  |    33 +-
 .../exceptions/AbstractExceptionMapper.java     |    17 +-
 .../AwsPropertiesNotFoundExceptionMapper.java   |     3 +-
 .../ElasticsearchExecutionExceptionMapper.java  |    38 +
 .../GCMInvalidRequestExceptionMapper.java       |    62 +
 .../exceptions/NotAllowedExceptionMapper.java   |    34 +
 ...rganizationApplicationNotFoundException.java |     6 +-
 .../UnsupportedOperationExceptionMapper.java    |    35 +
 .../UnsupportedRestOperationException.java      |    25 +
 ...UnsupportedRestOperationExceptionMapper.java |    34 +
 ...upportedServiceOperationExceptionMapper.java |    34 +
 .../rest/filters/ContentTypeFilter.java         |    20 +-
 .../rest/filters/JSONPCallbackFilter.java       |     4 +-
 .../usergrid/rest/filters/MeteringFilter.java   |     8 +-
 .../usergrid/rest/filters/TracingFilter.java    |     7 +-
 .../rest/management/ManagementResource.java     |    29 +-
 .../organizations/OrganizationResource.java     |   153 +-
 .../organizations/OrganizationsResource.java    |    12 +-
 .../applications/ApplicationResource.java       |    11 +-
 .../applications/ApplicationsResource.java      |     4 +-
 .../applications/imports/ImportsResource.java   |     6 +-
 .../organizations/users/UsersResource.java      |     8 +-
 .../rest/management/users/UserResource.java     |    76 +-
 .../rest/management/users/UsersResource.java    |    18 +-
 .../organizations/OrganizationsResource.java    |     4 +-
 .../organizations/OrganizationResource.java     |     6 +-
 .../rest/security/CrossOriginRequestFilter.java |     4 +-
 .../security/SecuredResourceFilterFactory.java  |   154 +-
 .../annotations/CheckPermissionsForPath.java    |    32 +
 .../security/shiro/RestSecurityManager.java     |     2 +-
 .../shiro/filters/BasicAuthSecurityFilter.java  |     9 +-
 .../ClientCredentialsSecurityFilter.java        |     4 +-
 .../OAuth2AccessTokenSecurityFilter.java        |     5 +-
 .../rest/system/ApplicationsResource.java       |    10 +-
 .../usergrid/rest/system/DatabaseResource.java  |     4 +-
 .../usergrid/rest/system/IndexResource.java     |     6 +-
 .../usergrid/rest/system/MigrateResource.java   |    10 +-
 .../usergrid/rest/test/PropertiesResource.java  |     3 +-
 .../rest/test/RefreshIndexResource.java         |     5 +-
 .../usergrid/rest/utils/CertificateUtils.java   |   108 +
 .../usergrid/rest/ExceptionResourceIT.java      |    91 +
 .../apache/usergrid/rest/IndexResourceIT.java   |     6 +-
 .../apache/usergrid/rest/NotificationsIT.java   |     2 +
 .../apache/usergrid/rest/PartialUpdateTest.java |     8 +-
 .../org/apache/usergrid/rest/TomcatRuntime.java |    12 +-
 .../applications/ApplicationResourceIT.java     |   111 +-
 .../usergrid/rest/applications/SecurityIT.java  |   115 +
 .../applications/assets/AssetResourceIT.java    |    90 +-
 .../applications/assets/AwsAssetResourceIT.java |    41 +-
 .../applications/assets/aws/NoAWSCredsRule.java |     4 +-
 .../collection/CollectionsResourceIT.java       |    20 +-
 .../activities/ActivityResourceIT.java          |     2 +-
 .../collection/groups/GroupResourceIT.java      |   115 +-
 .../collection/paging/PagingResourceIT.java     |    13 +-
 .../users/ConnectionResourceTest.java           |     2 +-
 .../collection/users/UserResourceIT.java        |    13 +-
 .../users/extensions/TestResource.java          |     6 +-
 .../applications/events/EventsResourceIT.java   |     4 +-
 .../applications/notifiers/NotifiersIT.java     |   116 +
 .../applications/queries/AndOrQueryTest.java    |     6 +-
 .../applications/queries/GeoPagingTest.java     |     7 +-
 .../applications/queries/MatrixQueryTests.java  |     2 -
 .../rest/applications/queries/OrderByTest.java  |     9 +-
 .../applications/queries/QueryTestBase.java     |     4 +-
 .../rest/applications/utils/TestUtils.java      |     1 -
 .../rest/filters/ContentTypeResourceIT.java     |     4 -
 .../usergrid/rest/management/AdminUsersIT.java  |   257 +-
 .../rest/management/ExportResourceIT.java       |    22 +-
 .../rest/management/ImportResourceIT.java       |    15 +-
 .../rest/management/OrganizationsIT.java        |    71 +-
 .../rest/management/RegistrationIT.java         |    16 +-
 .../organizations/AdminEmailEncodingIT.java     |     5 +-
 .../rest/test/resource/AbstractRestIT.java      |    10 +-
 .../rest/test/resource/ClientSetup.java         |    75 +-
 .../usergrid/rest/test/resource/DumbClient.java |    58 -
 .../resource/endpoints/CollectionEndpoint.java  |    20 +-
 .../endpoints/OrganizationResource.java         |     3 +-
 .../endpoints/mgmt/ApplicationResource.java     |     8 +-
 .../resource/endpoints/mgmt/OrgResource.java    |     9 +-
 .../rest/test/resource/model/ApiResponse.java   |     3 -
 .../rest/test/resource/model/Collection.java    |     7 +-
 stack/rest/src/test/resources/log4j.properties  |     1 -
 .../src/test/resources/pushtest_dev_recent.p12  |   Bin 0 -> 3227 bytes
 stack/rest/src/test/resources/test.txt          |    17 +
 .../resources/usergrid-custom-test.properties   |     2 +-
 .../resources/valid_non_apple_2036_01_07.p12    |   Bin 0 -> 2661 bytes
 stack/scripts/multitenant_migrate.py            |    48 +-
 stack/services/pom.xml                          |   890 +-
 .../management/AccountCreationProps.java        |   131 +-
 .../management/AppInfoMigrationPlugin.java      |     9 +-
 .../usergrid/management/ManagementService.java  |   373 +-
 .../usergrid/management/OrganizationConfig.java |   213 +-
 .../management/OrganizationConfigProps.java     |    73 +
 .../usergrid/management/OrganizationInfo.java   |    27 +-
 .../cassandra/AccountCreationPropsImpl.java     |     2 +-
 .../cassandra/ManagementServiceImpl.java        |   730 +-
 .../cassandra/OrganizationConfigPropsImpl.java  |   224 +
 .../usergrid/management/export/ExportJob.java   |     7 +-
 .../management/export/ExportServiceImpl.java    |     7 +-
 .../management/export/S3ExportImpl.java         |     3 +-
 .../management/importer/FileImportJob.java      |     6 +-
 .../usergrid/management/importer/ImportJob.java |     8 +-
 .../management/importer/ImportServiceImpl.java  |   586 +-
 .../management/importer/S3ImportImpl.java       |     7 +-
 .../usergrid/security/AuthPrincipalType.java    |     4 +-
 .../security/crypto/EncryptionServiceImpl.java  |     8 +-
 .../usergrid/security/oauth/AccessInfo.java     |     2 +-
 .../security/providers/AbstractProvider.java    |    42 +-
 .../security/providers/FacebookProvider.java    |     9 +-
 .../security/providers/FoursquareProvider.java  |     6 +-
 .../providers/PingIdentityProvider.java         |    97 +-
 .../apache/usergrid/security/shiro/Realm.java   |    18 +-
 .../usergrid/security/shiro/ShiroCache.java     |    15 +-
 .../security/shiro/ShiroCacheManager.java       |     2 +-
 .../principals/ApplicationUserPrincipal.java    |     4 +-
 .../shiro/principals/OrganizationPrincipal.java |    38 +-
 .../shiro/principals/PrincipalIdentifier.java   |     8 +-
 .../security/shiro/utils/SubjectUtils.java      |     4 +-
 .../usergrid/security/tokens/TokenCategory.java |     4 +-
 .../usergrid/security/tokens/TokenInfo.java     |    19 +
 .../usergrid/security/tokens/TokenService.java  |     9 +-
 .../tokens/cassandra/TokenServiceImpl.java      |    43 +-
 .../services/AbstractCollectionService.java     |    53 +-
 .../services/AbstractConnectionsService.java    |    14 +-
 .../AbstractPathBasedColllectionService.java    |    10 +-
 .../usergrid/services/AbstractService.java      |    26 +-
 .../apache/usergrid/services/ServiceInfo.java   |     7 +-
 .../usergrid/services/ServiceManager.java       |    18 +-
 .../services/ServiceManagerFactory.java         |     6 +-
 .../usergrid/services/ServiceParameter.java     |    44 +-
 .../usergrid/services/ServiceRequest.java       |     4 +-
 .../usergrid/services/ServiceResults.java       |     8 +-
 .../services/activities/ActivitiesService.java  |     4 +-
 .../applications/ApplicationsService.java       |     8 +-
 .../usergrid/services/assets/AssetsService.java |    12 +-
 .../services/assets/data/AssetMimeHandler.java  |     4 +-
 .../services/assets/data/AssetUtils.java        |     4 +-
 .../assets/data/AwsSdkS3BinaryStore.java        |    23 +-
 .../assets/data/LocalFileBinaryStore.java       |     4 +-
 .../services/assets/data/S3BinaryStore.java     |    36 +-
 .../services/devices/DevicesService.java        |    12 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/devices/users/UsersService.java    |     4 +-
 .../AwsPropertiesNotFoundException.java         |     3 -
 .../usergrid/services/groups/GroupsService.java |     8 +-
 .../groups/activities/ActivitiesService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/groups/roles/RolesService.java     |     4 +-
 .../services/groups/users/UsersService.java     |     4 +-
 .../users/activities/ActivitiesService.java     |     4 +-
 .../groups/users/devices/DevicesService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/guice/ServiceModuleImpl.java       |     3 +
 .../services/messages/MessagesService.java      |     4 +-
 .../notifications/ApplicationQueueMessage.java  |     5 +-
 .../notifications/InactiveDeviceManager.java    |     8 +-
 .../services/notifications/JobScheduler.java    |    15 +-
 .../notifications/NotificationServiceProxy.java |     3 -
 .../notifications/NotificationsService.java     |    48 +-
 .../services/notifications/ProviderAdapter.java |     5 +-
 .../services/notifications/QueueJob.java        |    16 +-
 .../services/notifications/QueueListener.java   |    88 +-
 .../services/notifications/TaskManager.java     |    49 +-
 .../services/notifications/TestAdapter.java     |    16 +-
 .../notifications/apns/APNsAdapter.java         |    11 +-
 .../apns/RejectedAPNsListener.java              |     4 +-
 .../services/notifications/gcm/GCMAdapter.java  |   127 +-
 .../impl/ApplicationQueueManagerImpl.java       |   141 +-
 .../services/notifications/wns/WNSAdapter.java  |    15 +-
 .../services/notifiers/NotifiersService.java    |     4 +-
 .../services/queues/ImportQueueListener.java    |     4 +-
 .../usergrid/services/queues/QueueListener.java |    62 +-
 .../usergrid/services/roles/RolesService.java   |     4 +-
 .../services/roles/groups/GroupsService.java    |     4 +-
 .../services/roles/users/UsersService.java      |     4 +-
 .../usergrid/services/users/UsersService.java   |     6 +-
 .../users/activities/ActivitiesService.java     |     4 +-
 .../services/users/devices/DevicesService.java  |    20 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../users/following/FollowingService.java       |     4 +-
 .../services/users/groups/GroupsService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/users/roles/RolesService.java      |     4 +-
 .../org/apache/usergrid/utils/PythonUtils.java  |   103 -
 .../src/main/python/pyusergrid/__init__.py      |    15 -
 .../main/python/pyusergrid/services/__init__.py |    15 -
 .../pyusergrid/services/pytest/PytestService.py |    31 -
 .../pyusergrid/services/pytest/__init__.py      |    15 -
 .../python/pyusergrid/services/pytest/test.py   |    29 -
 stack/services/src/main/python/test/__init__.py |    15 -
 stack/services/src/main/python/test/test.py     |    29 -
 .../resources/usergrid-services-context.xml     |   133 +-
 .../org/apache/usergrid/NewOrgAppAdminRule.java |     4 +-
 .../org/apache/usergrid/ServiceApplication.java |    14 +-
 .../migration/AppInfoMigrationPluginTest.java   |    10 +-
 .../apache/usergrid/management/EmailFlowIT.java |    43 +-
 .../management/OrganizationConfigIT.java        |   213 +
 .../usergrid/management/OrganizationIT.java     |     4 +-
 .../org/apache/usergrid/management/RoleIT.java  |    10 +-
 .../cassandra/ManagementServiceIT.java          |    55 +-
 .../management/export/ExportServiceIT.java      |    88 +-
 .../management/export/MockS3ExportImpl.java     |     2 +-
 .../importer/ImportConnectionsTest.java         |     2 +-
 .../management/importer/ImportServiceIT.java    |    32 +-
 .../usergrid/management/importer/S3Upload.java  |     1 -
 .../org/apache/usergrid/python/JythonTest.java  |    39 -
 .../security/providers/FacebookProviderIT.java  |     6 +-
 .../providers/PingIdentityProviderIT.java       |     6 +-
 .../security/tokens/TokenServiceIT.java         |    10 +-
 .../usergrid/services/ServiceInvocationIT.java  |     4 +-
 .../AbstractServiceNotificationIT.java          |     3 +-
 .../notifications/NotifiersServiceIT.java       |    11 +-
 .../apns/MockSuccessfulProviderAdapter.java     |   103 -
 .../apns/NotificationsServiceIT.java            |   294 +-
 .../gcm/MockSuccessfulProviderAdapter.java      |    89 -
 .../gcm/NotificationsServiceIT.java             |   227 +-
 .../notifications/wns/WNSAdapterTest.java       |    44 +
 .../src/test/resources/log4j.properties         |     1 -
 .../src/test/resources/pushtest_dev.p12         |   Bin 3203 -> 0 bytes
 .../src/test/resources/pushtest_prod.p12        |   Bin 3205 -> 0 bytes
 .../java/org/apache/usergrid/TomcatMain.java    |    10 +-
 .../usergrid/cassandra/AvailablePortFinder.java |    18 +-
 .../usergrid/cassandra/CassandraResource.java   |     6 +-
 .../usergrid/cassandra/ClearShiroSubject.java   |     8 +-
 .../usergrid/cassandra/SpringResource.java      |    10 +-
 .../usergrid/cassandra/FakeSchemaManager.java   |     4 -
 .../usergrid/cassandra/SpringResourceTest.java  |    10 +-
 stack/tools/pom.xml                             |    20 +-
 .../org/apache/usergrid/tools/AppAudit.java     |     2 +-
 .../java/org/apache/usergrid/tools/Cli.java     |    35 +-
 .../apache/usergrid/tools/DupAdminRepair.java   |   297 -
 .../org/apache/usergrid/tools/DupOrgRepair.java |   263 -
 .../usergrid/tools/EntityInsertBenchMark.java   |   272 -
 .../usergrid/tools/EntityReadBenchMark.java     |   353 -
 .../java/org/apache/usergrid/tools/Export.java  |    26 +-
 .../org/apache/usergrid/tools/ExportAdmins.java |    26 +-
 .../org/apache/usergrid/tools/ExportApp.java    |   138 +-
 .../usergrid/tools/ExportDataCreator.java       |    41 +-
 .../java/org/apache/usergrid/tools/Import.java  |    11 +-
 .../org/apache/usergrid/tools/ImportAdmins.java |   161 +-
 .../org/apache/usergrid/tools/IndexRebuild.java |   184 -
 .../java/org/apache/usergrid/tools/Metrics.java |     2 +-
 .../usergrid/tools/OrganizationExport.java      |     2 +-
 .../apache/usergrid/tools/PopulateSample.java   |     4 +-
 .../RepairingMismatchedApplicationMetadata.java |   119 -
 .../org/apache/usergrid/tools/ToolBase.java     |    15 +-
 .../usergrid/tools/UniqueIndexCleanup.java      |   386 -
 .../org/apache/usergrid/tools/UserManager.java  |     3 +-
 .../apache/usergrid/tools/WarehouseExport.java  |   133 +-
 .../apache/usergrid/tools/WarehouseUpsert.java  |    30 +-
 .../apache/usergrid/tools/bean/MetricQuery.java |    11 +-
 stack/tools/src/main/resources/log4j.properties |    34 +-
 .../main/resources/toolsApplicationContext.xml  |   124 +-
 .../apache/usergrid/tools/ExportAppTest.java    |    62 +-
 .../usergrid/tools/ExportImportAdminsTest.java  |    43 +-
 .../test/resources/usergrid-test-context.xml    |    63 +
 .../websocket/WebSocketChannelHandler.java      |    16 +-
 .../test/resources/testApplicationContext.xml   |   273 +-
 tests/integration/.gitignore                    |     3 +
 tests/integration/LICENSE                       |   327 +
 tests/integration/README.md                     |     8 +
 tests/integration/config/default.js             |    28 +
 tests/integration/config/index.js               |    28 +
 tests/integration/index.js                      |    23 +
 tests/integration/lib/connections.js            |    63 +
 tests/integration/lib/devices.js                |    43 +
 tests/integration/lib/entities.js               |   126 +
 tests/integration/lib/groups.js                 |    43 +
 tests/integration/lib/notifications.js          |    34 +
 tests/integration/lib/random.js                 |    39 +
 tests/integration/lib/response.js               |    23 +
 tests/integration/lib/token.js                  |    64 +
 tests/integration/lib/urls.js                   |    40 +
 tests/integration/lib/users.js                  |    48 +
 tests/integration/package.json                  |    17 +
 .../test/authentication/management.js           |    40 +
 tests/integration/test/authentication/org.js    |    39 +
 tests/integration/test/authentication/shawn     |     1 +
 tests/integration/test/authentication/user.js   |    40 +
 tests/integration/test/authorization/shawn      |     1 +
 tests/integration/test/collections/brandon      |     1 +
 tests/integration/test/connections/brandon      |     1 +
 tests/integration/test/entities/brandon         |     1 +
 tests/integration/test/entities/create.js       |    47 +
 tests/integration/test/entities/deleteAll.js    |    39 +
 tests/integration/test/entities/get.js          |    60 +
 tests/integration/test/entities/update.js       |    44 +
 tests/integration/test/groups/groups.js         |   192 +
 tests/integration/test/main.js                  |    69 +
 tests/integration/test/management/shawn         |     1 +
 tests/integration/test/mocha.opts               |     3 +
 .../test/queries/integerComparison.js           |    77 +
 tests/integration/test/setup.js                 |   111 +
 tests/integration/test/teardown.js              |    80 +
 tests/integration/test/users/create.js          |    47 +
 tests/performance/.gitignore                    |     1 +
 tests/performance/LICENSE                       |   327 +
 tests/performance/README.md                     |   207 +
 tests/performance/pom.xml                       |   149 +
 tests/performance/runAuditDeleteEntities.sh     |    65 +
 .../runAuditGetAllAppCollectionEntities.sh      |    68 +
 .../runAuditGetCollectionEntities.sh            |    68 +
 .../runAuditVerifyCollectionEntities.sh         |    69 +
 tests/performance/runCollectionQueryTest.sh     |    88 +
 .../runCustomInjectRandomEntityByUuidTest.sh    |   108 +
 tests/performance/runDeleteEntities.sh          |    92 +
 .../runGetEntitiesByNameSequential.sh           |   101 +
 tests/performance/runGetEntitiesByUuid.sh       |    92 +
 tests/performance/runLoadEntities.sh            |    98 +
 tests/performance/runLoadEntitiesUnlimited.sh   |   103 +
 .../runLoadLargeMultiFieldEntities.sh           |   107 +
 tests/performance/runLoadNoNameEntities.sh      |    98 +
 tests/performance/runLoadSortableEntities.sh    |    98 +
 tests/performance/runOrgAppSetup.sh             |    91 +
 .../runRandomEntityByNameQueryTest.sh           |    91 +
 tests/performance/runRandomEntityByNameTest.sh  |    91 +
 tests/performance/runUpdateEntities.sh          |    91 +
 tests/performance/runtests_deprecated.sh        |   120 +
 .../datagenerators/EntityDataGenerator.scala    |   183 +
 .../datagenerators/FeederGenerator.scala        |   304 +
 .../datagenerators/datafiles/dist.all.last.txt  | 88799 +++++++++++++++++
 .../datafiles/dist.female.first.txt             |  4275 +
 .../datafiles/dist.male.first.txt               |  1219 +
 .../usergrid/datagenerators/firstNames.txt      |  5494 +
 .../usergrid/datagenerators/lastNames.txt       | 88799 +++++++++++++++++
 .../org/apache/usergrid/enums/AuthType.scala    |    31 +
 .../usergrid/enums/ConfigProperties.scala       |   181 +
 .../usergrid/enums/CsvFeedPatternType.scala     |    30 +
 .../usergrid/enums/EndConditionType.scala       |    29 +
 .../org/apache/usergrid/enums/EntityType.scala  |    30 +
 .../apache/usergrid/enums/ScenarioType.scala    |    38 +
 .../org/apache/usergrid/enums/TokenType.scala   |    29 +
 .../apache/usergrid/helpers/Extractors.scala    |   154 +
 .../org/apache/usergrid/helpers/Headers.scala   |    70 +
 .../org/apache/usergrid/helpers/Setup.scala     |   312 +
 .../org/apache/usergrid/helpers/Utils.scala     |   102 +
 .../scenarios/ApplicationScenarios.scala        |    53 +
 .../usergrid/scenarios/AuditScenarios.scala     |   342 +
 .../scenarios/ConnectionScenarios.scala         |    66 +
 .../usergrid/scenarios/DeviceScenarios.scala    |    85 +
 .../scenarios/EntityCollectionScenarios.scala   |   407 +
 .../usergrid/scenarios/EntityScenarios.scala    |    80 +
 .../usergrid/scenarios/GeoScenarios.scala       |    49 +
 .../scenarios/NotificationScenarios.scala       |    80 +
 .../usergrid/scenarios/NotifierScenarios.scala  |    70 +
 .../scenarios/OrganizationScenarios.scala       |    60 +
 .../usergrid/scenarios/TokenScenarios.scala     |    56 +
 .../usergrid/scenarios/UserScenarios.scala      |   210 +
 .../org/apache/usergrid/settings/Settings.scala |   612 +
 .../usergrid/simulations/AuditSimulation.scala  |    86 +
 .../simulations/ConfigurableSimulation.scala    |   105 +
 .../simulations/CustomInjectionSimulation.scala |   107 +
 .../simulations/deprecated/AppSimulation.scala  |    41 +
 .../deprecated/ConnectionsSimulation.scala      |    51 +
 .../deprecated/DeleteUsersSimulation.scala      |    56 +
 .../deprecated/GetEntitySimulation.scala        |    44 +
 .../deprecated/GetUserPagesSimulation.scala     |    51 +
 .../deprecated/GetUsersSimulation.scala         |    51 +
 .../deprecated/PostCustomEntitySimulation.scala |    76 +
 .../deprecated/PostUsersSimulation.scala        |    51 +
 .../PushNotificationTargetUserSimulation.scala  |    45 +
 .../deprecated/PutCustomEntitySimulation.scala  |    75 +
 .../deprecated/PutUsersSimulation.scala         |    56 +
 .../deprecated/SetupSimulation.scala            |    43 +
 .../performance/src/main/scripts/gatling-mvn.sh |    31 +
 .../performance/src/main/scripts/gatling-ug.sh  |    51 +
 .../src/test/resources/dummyAuditUuid.csv       |     1 +
 .../src/test/resources/dummyUuid.csv            |     1 +
 .../performance/src/test/resources/gatling.conf |   150 +
 .../src/test/resources/logback-test.xml         |    39 +
 .../performance/src/test/resources/logback.xml  |    38 +
 .../src/test/resources/recorder.conf            |    37 +
 tests/performance/src/test/scala/Engine.scala   |    29 +
 .../src/test/scala/IDEPathHelper.scala          |    38 +
 tests/performance/src/test/scala/Recorder.scala |    28 +
 tests/performance/testConfig.sh                 |    68 +
 website/README.md                               |     4 +-
 website/crash.log                               |   143 -
 website/lib/default.rb                          |     4 +-
 website/nanoc.yaml                              |     2 +
 website/run.sh                                  |     3 +-
 website/tmp/checksums                           |     2 -
 website/tmp/compiled_content                    |  7076 --
 website/tmp/dependencies                        |     6 -
 website/tmp/rule_memory                         |   Bin 5214 -> 0 bytes
 1031 files changed, 219989 insertions(+), 224483 deletions(-)
----------------------------------------------------------------------



[05/37] usergrid git commit: Merge branch 'asf-site' of https://git-wip-us.apache.org/repos/asf/usergrid into asf-site

Posted by sn...@apache.org.
Merge branch 'asf-site' of https://git-wip-us.apache.org/repos/asf/usergrid into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/0fd9939b
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/0fd9939b
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/0fd9939b

Branch: refs/heads/usergrid-1318-queue
Commit: 0fd9939bc004d6500293edb85a525bcf1f8e6bc3
Parents: 9d3cf5b f3879a4
Author: Dave Johnson <sn...@apache.org>
Authored: Fri Oct 30 15:04:03 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Fri Oct 30 15:04:03 2015 -0400

----------------------------------------------------------------------
 content/community/index.html |   2 +-
 content/img/miked.jpg        | Bin 0 -> 36443 bytes
 website/tmp/checksums        |   4 ++--
 website/tmp/compiled_content |  16 ++++++++--------
 website/tmp/dependencies     |   2 +-
 website/tmp/rule_memory      | Bin 5163 -> 5214 bytes
 6 files changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------



[09/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/8a26365e
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/8a26365e
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/8a26365e

Branch: refs/heads/usergrid-1318-queue
Commit: 8a26365ecba81b91076c4ffb99c662324fb28f0c
Parents: 619aff3 ab6df53
Author: Dave Johnson <sn...@apache.org>
Authored: Tue Feb 9 15:33:50 2016 -0500
Committer: Dave Johnson <sn...@apache.org>
Committed: Tue Feb 9 15:33:50 2016 -0500

----------------------------------------------------------------------
 content/docs/README.html                        |   4 ++
 content/docs/_sources/index.txt                 |   1 +
 .../file-storage-configuration.html             |   4 ++
 content/docs/assets-and-files/folders.html      |   4 ++
 .../assets-and-files/legacy-asset-support.html  |   4 ++
 .../assets-and-files/retrieving-assets.html     |   4 ++
 .../docs/assets-and-files/uploading-assets.html |   4 ++
 .../creating-and-incrementing-counters.html     |   4 ++
 .../events-and-counters.html                    |   4 ++
 .../retrieving-counters.html                    |   4 ++
 .../docs/data-queries/advanced-query-usage.html |   4 ++
 .../docs/data-queries/operators-and-types.html  |   4 ++
 content/docs/data-queries/query-parameters.html |   4 ++
 .../docs/data-queries/querying-your-data.html   |   4 ++
 content/docs/data-storage/collections.html      |   4 ++
 content/docs/data-storage/data-store-dbms.html  |   4 ++
 content/docs/data-storage/entities.html         |   4 ++
 .../docs/data-storage/optimizing-access.html    |   4 ++
 .../entity-connections/connecting-entities.html |   4 ++
 .../disconnecting-entities.html                 |   4 ++
 .../entity-connections/retrieving-entities.html |   4 ++
 content/docs/genindex.html                      |   4 ++
 content/docs/geolocation/geolocation.html       |   4 ++
 content/docs/index.html                         |  19 +++++++++
 content/docs/installation/deployment-guide.html |  40 ++++++++++++++++++-
 .../docs/installation/ug1-deploy-to-tomcat.html |   4 ++
 .../installation/ug1-launcher-quick-start.html  |   4 ++
 .../docs/installation/ug2-deploy-to-tomcat.html |   4 ++
 content/docs/introduction/async-vs-sync.html    |   4 ++
 content/docs/introduction/data-model.html       |   4 ++
 content/docs/introduction/overview.html         |   4 ++
 .../docs/introduction/usergrid-features.html    |   4 ++
 content/docs/jersey2skeleton/README.html        |   4 ++
 content/docs/objects.inv                        | Bin 673 -> 686 bytes
 content/docs/orgs-and-apps/admin-user.html      |   4 ++
 content/docs/orgs-and-apps/application.html     |   4 ++
 content/docs/orgs-and-apps/managing.html        |   4 ++
 content/docs/orgs-and-apps/organization.html    |   4 ++
 .../push-notifications/adding-push-support.html |   4 ++
 .../creating-and-managing-notifications.html    |   4 ++
 .../push-notifications/creating-notifiers.html  |   4 ++
 .../push-notifications/getting-started.html     |   4 ++
 .../managing-users-and-devices.html             |   4 ++
 content/docs/push-notifications/overview.html   |   4 ++
 .../docs/push-notifications/registering.html    |   4 ++
 content/docs/push-notifications/tbd.html        |   4 ++
 .../push-notifications/troubleshooting.html     |   4 ++
 content/docs/push-notifications/tutorial.html   |   4 ++
 .../docs/push-notifications/users-devices.html  |   4 ++
 content/docs/reference/contribute-code.html     |   4 ++
 content/docs/reference/presos-and-videos.html   |   8 +++-
 content/docs/rest-endpoints/api-docs.html       |   4 ++
 content/docs/sdks/ios-new.html                  |   4 ++
 content/docs/sdks/sdk-outline.html              |   4 ++
 content/docs/sdks/tbd.html                      |   8 +++-
 content/docs/search.html                        |   4 ++
 content/docs/searchindex.js                     |   2 +-
 .../docs/security-and-auth/app-security.html    |   4 ++
 .../authenticating-api-requests.html            |   4 ++
 ...nticating-users-and-application-clients.html |   4 ++
 .../changing-token-time-live-ttl.html           |   4 ++
 .../docs/security-and-auth/facebook-sign.html   |   4 ++
 .../revoking-tokens-logout.html                 |   4 ++
 .../security-and-auth/securing-your-app.html    |   4 ++
 .../user-authentication-types.html              |   4 ++
 .../security-and-auth/using-permissions.html    |   4 ++
 content/docs/security-and-auth/using-roles.html |   4 ++
 content/docs/user-management/activity.html      |   4 ++
 content/docs/user-management/group.html         |   4 ++
 content/docs/user-management/groups.html        |   4 ++
 .../docs/user-management/messagee-example.html  |   4 ++
 .../docs/user-management/user-connections.html  |   4 ++
 .../docs/user-management/user-management.html   |   4 ++
 .../docs/user-management/working-user-data.html |   4 ++
 .../creating-a-new-application.html             |   4 ++
 .../docs/using-usergrid/creating-account.html   |   4 ++
 .../using-usergrid/using-a-sandbox-app.html     |   4 ++
 content/docs/using-usergrid/using-the-api.html  |   4 ++
 docs/index.rst                                  |   1 +
 79 files changed, 357 insertions(+), 6 deletions(-)
----------------------------------------------------------------------



[14/37] usergrid git commit: Merge branch 'asf-site' of https://git-wip-us.apache.org/repos/asf/usergrid into asf-site

Posted by sn...@apache.org.
Merge branch 'asf-site' of https://git-wip-us.apache.org/repos/asf/usergrid into asf-site

* 'asf-site' of https://git-wip-us.apache.org/repos/asf/usergrid:

# Conflicts:
#	website/tmp/checksums
#	website/tmp/compiled_content
#	website/tmp/dependencies
#	website/tmp/rule_memory


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/2d4d8aaa
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/2d4d8aaa
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/2d4d8aaa

Branch: refs/heads/usergrid-1318-queue
Commit: 2d4d8aaad8f0cf9a8575a886c809e4d0263d070c
Parents: f0a2f8c 85ca4b8
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Aug 22 10:59:13 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Aug 22 10:59:13 2016 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[26/37] usergrid git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/usergrid

Posted by sn...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/usergrid

* 'master' of https://git-wip-us.apache.org/repos/asf/usergrid:
  Ensure the admin invited to org email is sent even when external SSO is enabled.
  Configurable Password Policy and 5 supporting JUnit tests.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/cb0dc69d
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/cb0dc69d
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/cb0dc69d

Branch: refs/heads/usergrid-1318-queue
Commit: cb0dc69da29f578c06fd5a7bea7da302756ffd56
Parents: 1abafe7 48d306f
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Oct 20 16:45:26 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Oct 20 16:45:26 2016 -0400

----------------------------------------------------------------------
 .../exceptions/AbstractExceptionMapper.java     |   2 +-
 .../PasswordPolicyViolationExceptionMapper.java |  48 ++++++
 .../collection/users/PermissionsResourceIT.java |   4 +-
 .../collection/users/UserResourceIT.java        |  38 ++++-
 .../usergrid/rest/management/AdminUsersIT.java  |  51 ++++++
 .../rest/management/ManagementResourceIT.java   |   4 +-
 .../rest/management/RegistrationIT.java         |   6 +-
 .../cassandra/ManagementServiceImpl.java        |  77 ++++++---
 .../usergrid/security/PasswordPolicy.java       |  53 ++++++
 .../usergrid/security/PasswordPolicyFig.java    |  79 +++++++++
 .../usergrid/security/PasswordPolicyImpl.java   | 156 ++++++++++++++++++
 .../PasswordPolicyViolationException.java       |  46 ++++++
 .../services/guice/ServiceModuleImpl.java       |   8 +
 .../usergrid/security/PasswordPolicyTest.java   |  47 ++++++
 .../security/PasswordPolicyTestFig.java         | 161 +++++++++++++++++++
 15 files changed, 751 insertions(+), 29 deletions(-)
----------------------------------------------------------------------



[33/37] usergrid git commit: Update Cassandra and ElasticSearch versions supported & add node about the need for start_rpc=true in Cassandra 2+

Posted by sn...@apache.org.
Update Cassandra and ElasticSearch versions supported & add node about the need for start_rpc=true in Cassandra 2+


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/77ad91a6
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/77ad91a6
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/77ad91a6

Branch: refs/heads/usergrid-1318-queue
Commit: 77ad91a69054b1e1217a67d035ecdbacb7ac3e44
Parents: 11ad1d7
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Oct 24 09:16:27 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Oct 24 09:16:27 2016 -0400

----------------------------------------------------------------------
 .../docs/_sources/data-storage/collections.txt  | 144 +++++++++++++
 .../_sources/installation/deployment-guide.txt  | 125 ++++-------
 .../docs/_sources/orgs-and-apps/application.txt | 104 +++++++++
 content/docs/data-storage/collections.html      | 209 +++++++++++++++++--
 content/docs/index.html                         |   3 +
 content/docs/installation/deployment-guide.html |  16 +-
 content/docs/orgs-and-apps/application.html     | 141 +++++++++++++
 content/docs/searchindex.js                     |   2 +-
 docs/installation/deployment-guide.md           | 125 ++++-------
 9 files changed, 674 insertions(+), 195 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/_sources/data-storage/collections.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/data-storage/collections.txt b/content/docs/_sources/data-storage/collections.txt
index fa8652e..88ffc55 100644
--- a/content/docs/_sources/data-storage/collections.txt
+++ b/content/docs/_sources/data-storage/collections.txt
@@ -44,7 +44,150 @@ Response:
       "organization" : "your-org",
       "applicationName" : "your-app"
     }
+ 
+ 
+## Collection Settings
+
+Usergrid allows you to specify settings for each of your Collections. 
+Collections may have a *_settings* resource with the following URI pattern:
+
+	/{org-identifier}/{app-identifier}/{collection-name}/_settings
+	
+If a Collection does not have a _settings resource,
+then doing an HTTP GET on that URI will yield the normal Collection resource.
+For example here a request and respinse for settings for the Collection "battles", which does not yet have _settigs:
+
+	curl "https//api.usergrid.com/test-organization/settingstest/battles/_settings?access_token=YWM..."
+	{
+	  "action" : "get",
+	  "application" : "7fd6c414-2cb6-11e6-8b07-0a669fe1d66e",
+	  "params" : { },
+	  "path" : "/battles",
+	  "uri" : "https//api.usergrid.com/test-organization/settingstest/battles",
+	  "entities" : [ ],
+	  "timestamp" : 1465308535753,
+	  "duration" : 175,
+	  "organization" : "test-organization",
+	  "applicationName" : "settingstest"
+	}
+	
+Once a Collection has a _settings resource, here's what it might look like:
+	
+	curl "0:8080/test-organization/settingstest/battles/_settings?access_token=YWM..."
+	{
+	  "action" : "get",
+	  "application" : "7fd6c414-2cb6-11e6-8b07-0a669fe1d66e",
+	  "params" : { },
+	  "path" : "/battles",
+	  "uri" : "https//api.usergrid.com/test-organization/settingstest/battles",
+	  "entities" : [ ],
+	  "data" : {
+	    "lastUpdated" : 1465311161543,
+	    "lastReindexed" : 0,
+	    "fields" : "all",
+	    "region" : "us-east-1",
+	    "lastUpdateBy" : "super@usergrid.com"
+	  },
+	  "timestamp" : 1465311177535,
+	  "duration" : 6,
+	  "organization" : "test-organization",
+	  "applicationName" : "settingstest"
+	}
+
+	
+Collection settings are useful for setting up Selective Indexing. Let's discuss that next.
+
   
+## Setting up Selective Indexing via Collection Settings
+ 
+Indexing is expensive and now it can be done selectively.
+
+In the beginning, Usergrid indexed each and every field of an Entity. 
+If a field was an object, the the fields of that object would also be indexed.
+Indexing everything is very convenient because it means you can query on any field,
+but indexing everything is expensive in terms of performance; 
+it slows down Entity creation and update.
+Indexing everything is also expensive in terms of storage, 
+it takes up space and makes puts strain on the system.
+
+Staring with Usegrid 2.1.1, you can specify a "schema" for each Collection.
+You can tell Usergrid which fields should be indexed or 
+you can tell Usergrid to completely skip indexing for a collection. 
+
+### Specifying a Schema for a Collection
+
+There are three ways to specify a schema for a Collection. 
+You can specify that all fields are to be index, you can specify none or 
+you can specify a list of the fields that should be indexed. 
+You do this by POSTing or PUTing a _settings resource for the Collection with one field named "fields".
+
+There are three possible values for "fields":
+
+Fields Setting                 Type     Meaning
+--------------                 ----     -------
+"fields":"all"                 String   Index all Entity fields
+"fields":"none"                String   Index no fields; completely skip indexing for this collection.
+"fields":["field1", "field2"]  Array    Index all fields whose names are listed in the array value.
+
+
+#### Example: Turn off Indexing for a Collection
+
+This example shows how you would use curl to set the schema if you want to turn off indexing for a collection:
+
+	curl -X PUT "0:8080/test-organization/settingstest/_settings?access_token=YWM..." -d '{"fields":"none"}'
+	{
+	  "action" : "put",
+	  "application" : "7fd6c414-2cb6-11e6-8b07-0a669fe1d66e",
+	  "params" : { },
+	  "path" : "/_settings",
+	  "uri" : "http://localhost:8080/test-organization/settingstest/_settings",
+	  "entities" : [ {
+	    "uuid" : "6fc783c6-2cc3-11e6-8fce-0a669fe1d66e",
+	    "type" : "_setting",
+	    "created" : 1465312858697,
+	    "modified" : 1465312858697,
+	    "fields" : "none",
+	    "metadata" : {
+	      "path" : "/_settings/6fc783c6-2cc3-11e6-8fce-0a669fe1d66e",
+	      "size" : 347
+	    }
+	  } ],
+	  "timestamp" : 1465312858688,
+	  "duration" : 63,
+	  "organization" : "test-organization",
+	  "applicationName" : "settingstest"
+	}
+
+
+#### Example: Index only one field of a Collection
+
+This example shows how you would use curl to set the schema if you only want the "year" field to be indexed:
+
+	curl -X PUT "0:8080/test-organization/settingstest/_settings?access_token=YWM..." -d '{"fields":["year"]}'
+	{
+	  "action" : "put",
+	  "application" : "7fd6c414-2cb6-11e6-8b07-0a669fe1d66e",
+	  "params" : { },
+	  "path" : "/_settings",
+	  "uri" : "http://localhost:8080/test-organization/settingstest/_settings",
+	  "entities" : [ {
+	    "uuid" : "6fc783c6-2cc3-11e6-8fce-0a669fe1d66e",
+	    "type" : "_setting",
+	    "created" : 1465312858697,
+	    "modified" : 1465312858697,
+	    "fields" : [ "year" ],
+	    "metadata" : {
+	      "path" : "/_settings/6fc783c6-2cc3-11e6-8fce-0a669fe1d66e",
+	      "size" : 347
+	    }
+	  } ],
+	  "timestamp" : 1465312858688,
+	  "duration" : 63,
+	  "organization" : "test-organization",
+	  "applicationName" : "settingstest"
+	}
+
+
 ## Retrieving Collections
 
 This article describes how to retrieve all of the entities in a collection.
@@ -179,6 +322,7 @@ Response:
       "organization" : "your-org",
       "applicationName" : "your-app"
     }
+    
    
 ## Deleting Collections
 This article describes how to batch delete entities in a collection. Batch deletes require the use of a query string in the request, which specifies a subset of entities to be deleted. For more information on queries, see Querying your data.

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/_sources/installation/deployment-guide.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/installation/deployment-guide.txt b/content/docs/_sources/installation/deployment-guide.txt
index 560b6eb..3b1b89a 100644
--- a/content/docs/_sources/installation/deployment-guide.txt
+++ b/content/docs/_sources/installation/deployment-guide.txt
@@ -1,37 +1,28 @@
 # Usergrid 2.1.0 Deployment Guide
 
-This document explains how to deploy the Usergrid v2.1.0 Backend-as-a-Service (BaaS), 
-which comprises the Usergrid Stack, a Java web application, and the Usergrid Portal,
-which is an HTML5/JavaScript application. 
+This document explains how to deploy the Usergrid v2.1.0 Backend-as-a-Service (BaaS), which comprises the Usergrid Stack, a Java web application, and the Usergrid Portal, which is an HTML5/JavaScript application. 
 
 
 ## Intended audience
 
-You should be able to follow this guide if you are a developer, system admin or 
-operations person with some knowledge of Java application deployment and good 
-knowledge of Linux and the bash shell.
+You should be able to follow this guide if you are a developer, system admin or operations person with some knowledge of Java application deployment and good knowledge of Linux and the bash shell.
 
-This guide is a starting point and does NOT explain everything you need to know to 
-run Usergrid at-scale and in production. To do that you will need some additional 
-skills and knowledge around running, monitoring and trouble-shooting Tomcat 
-applications, multi-node Cassandra & ElasticSearch clusters and more.
+This guide is a starting point and does NOT explain everything you need to know to run Usergrid at-scale and in production. To do that you will need some additional skills and knowledge around running, monitoring and trouble-shooting Tomcat applications, multi-node Cassandra & ElasticSearch clusters and more.
 
 
 ## Prerequsites
 
-Below are the software requirements for Usergrid 2.1.0 Stack and Portal. 
-You can install them all on one computer for development purposes, and for 
-deployment you can deploy them separately using clustering.
+Below are the software requirements for Usergrid 2.1.0 Stack and Portal. You can install them all on one computer for development purposes, and for deployment you can deploy them separately using clustering.
 
    * Linux or a UNIX-like system (Usergrid may run on Windows, but we haven't tried it)
    
    * [Java SE 8 JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
    
-   * [Apache Tomcat 7+](https://tomcat.apache.org/download-70.cgi)
+   * [Apache Tomcat 7](https://tomcat.apache.org/download-70.cgi)
    
-   * [Apache Cassandra 1.2.1+](http://cassandra.apache.org/download/)
+   * [Apache Cassandra 1.2.x or 2.x](http://cassandra.apache.org/download/)
    
-   * [ElasticSearch 1.4+](https://www.elastic.co/downloads/elasticsearch)  
+   * [ElasticSearch 1.4.x or 1.7.x](https://www.elastic.co/downloads/elasticsearch)  
    
 Optional but helpful:
 
@@ -76,26 +67,24 @@ The files that you need for deploying Usergrid Stack and Portal are `ROOT.war` a
 
 ## Deploying the Usergrid Stack
 
-The Usergrid Stack is a Java EE web application that runs on Tomcat, 
-uses the Cassandra database for storage and the ElasticSearch search-engine for queries.
+The Usergrid Stack is a Java EE web application that runs on Tomcat, uses the Cassandra database for storage and the ElasticSearch search-engine for queries.
  
-Before installing the Usegrid Stack into Tomcat, you'll start by setting up the 
-required database and search engine nodes. 
+Before installing the Usegrid Stack into Tomcat, you'll start by setting up the required database and search engine nodes. 
  
    
 ### Stack STEP #1: Setup Cassandra 
 
-Usergrid needs access to at least one Apache Cassandra node. You can setup a single node of
-Cassandra on your computer for development and testing. For production deployment, 
-a three or more node cluster is recommended.
+Usergrid needs access to at least one Apache Cassandra node. You can setup a single node of Cassandra on your computer for development and testing. For production deployment, a three or more node cluster is recommended.
 
-__Use the right Java.__ Cassandra requires Java and we recommend that you use the same version of Java 
-for Cassandra as you use to run Tomcat and ElasticSearch.
+__Use the right Java.__ Cassandra requires Java and we recommend that you use the same version of Java for Cassandra as you use to run Tomcat and ElasticSearch.
 
-__Refer to the__ [Apache Cassandra documentation](http://wiki.apache.org/cassandra/GettingStarted) 
-__for instructions on how to install Cassandra__. The [Datastax documentation for Cassandra 1.2](http://docs.datastax.com/en/cassandra/1.2/cassandra/features/featuresTOC.html) is also helpful. 
-Once you are up and running make a note of these things:
+Usergrid uses Cassandra's Thrift protocol and on Cassandra 2.x releases you MUST enable Thrift by setting `start_rpc` in your `cassandra.yaml` file:
 
+    # Whether to start the thrift rpc server.
+    start_rpc: true
+
+__Refer to the__ [Apache Cassandra documentation](http://wiki.apache.org/cassandra/GettingStarted) __for instructions on how to install Cassandra__. The [Datastax documentation for Cassandra 1.2](http://docs.datastax.com/en/cassandra/1.2/cassandra/features/featuresTOC.html) is also helpful. Once you are up and running make a note of these things:
+ 
    * The name of the Cassandra cluster
    * Hostname or IP address of each Cassandra node
    * Port number used for Cassandra RPC (the default is 9160)
@@ -104,23 +93,18 @@ Once you are up and running make a note of these things:
 
 ### Stack STEP #2: Setup ElasticSearch
 
-Usergrid also needs access to at least one ElasticSearch node. As with Cassandra, 
-you can setup single ElasticSearch node on your computer, and you should run 
-a cluster in production.
+Usergrid also needs access to at least one ElasticSearch node. As with Cassandra, you can setup single ElasticSearch node on your computer, and you should run a cluster in production.
 
-__Use the right Java__. ElasticSearch requires Java and you *must* ensure that you use the 
-same version of Java for ElasticSearch as you do for running Tomcat.
+__Use the right Java__. ElasticSearch requires Java and you *must* ensure that you use the same version of Java for ElasticSearch as you do for running Tomcat.
 
 __Refer to the__ 
-[ElasticSearch 1.4 documentation](https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index.html) 
-__for instructions on how to install__. Once you are up and running make a note of these things:
+[ElasticSearch 1.4 documentation](https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index.html) __for instructions on how to install__. Once you are up and running make a note of these things:
 
    * The name of the ElasticSearch cluster
    * Hostname or IP address of each ElasticSearch node
    * Port number used for ElasticSearch protocol (the default is 9200)
 
-__Running a single-node?__ If you are running a single-node ElasticSearch cluster then 
-you should set the number of replicas to zero, otherwise the cluster will report status YELLOW. 
+__Running a single-node?__ If you are running a single-node ElasticSearch cluster then you should set the number of replicas to zero, otherwise the cluster will report status YELLOW. 
   
     curl -XPUT 'localhost:9200/_settings' -d '{"index" : { "number_of_replicas" : 0}}'
     
@@ -136,13 +120,9 @@ __Refer to the__ [Apache Tomcat 7](https://tomcat.apache.org/tomcat-7.0-doc/setu
 
 ### Stack STEP #4: Configure Usergrid Stack & Logging
 
-You must create a Usergrid properties file called `usergrid-deployment.properties`. 
-The properties in this file tell Usergrid how to communicate with Cassandra and
-ElasticSearch, and how to form URLs using the hostname you wish to use for Usegrid.
-There are many properties that you can set to configure Usergrid. 
+You must create a Usergrid properties file called `usergrid-deployment.properties`. The properties in this file tell Usergrid how to communicate with Cassandra and ElasticSearch, and how to form URLs using the hostname you wish to use for Usegrid. There are many properties that you can set to configure Usergrid. 
 
-Once you have created your Usergrid properties file, place it in the Tomcat lib directory.
-On a Linux system, that directory is probably located at `/usr/share/tomcat7/lib`.
+Once you have created your Usergrid properties file, place it in the Tomcat lib directory. On a Linux system, that directory is probably located at `/usr/share/tomcat7/lib`.
 
 __What goes in a properties file?__
 
@@ -155,8 +135,7 @@ You should review the defaults in the above file. To get you started, let's look
 
 #### Example Usergrid Stack Properties File
 
-Below is an minimal example Usergrid properties file with the parts you need to change indicated like 
-shell variables, e.g. `${USERGRID_CLUSTER_NAME}`.  
+Below is an minimal example Usergrid properties file with the parts you need to change indicated like shell variables, e.g. `${USERGRID_CLUSTER_NAME}`.  
    
 Example 1: usergrid-deployment.properties file
 
@@ -279,8 +258,7 @@ Make sure you set all of the above properties when you edit this example for you
 
 #### Configure Logging
 
-Usegrid includes the Apache Log4j logging system and you can control the levels of logs for each
-Usergrid package and even down to the class level by providing your own `log4j.properties` file.
+Usegrid includes the Apache Log4j logging system and you can control the levels of logs for each Usergrid package and even down to the class level by providing your own `log4j.properties` file.
 
 To configure logging you need to:
 
@@ -290,9 +268,7 @@ To configure logging you need to:
 
 ##### Example Logging Configuration
 
-The Log4j properties file below is a good starting point for Usergrid. It configures `ERROR` level
-logging for the 3rd party libraries that Usergrid depends on, and INFO level logging for Usergrid.
-Plus, it configures some noisy parts of Usergrid to be quiet.
+The Log4j properties file below is a good starting point for Usergrid. It configures `ERROR` level logging for the 3rd party libraries that Usergrid depends on, and INFO level logging for Usergrid. Plus, it configures some noisy parts of Usergrid to be quiet.
 
 Example 2: log4.properties file
 
@@ -313,26 +289,18 @@ Example 2: log4.properties file
     
 ##### Add Logging Configuration to Tomcat
 
-You can configure Tomcat to use your Log4j properties file but adding a system property to Tomcat
-named `log4j.configuration` which must be set to a `file:/` URL that points to your
-properties file. One way to add the above property to the Tomcat start-up is to add a line to a 
-Tomcat `setenv.sh` script in Tomcat's bin directory. If that file does not exist, then create it.
+You can configure Tomcat to use your Log4j properties file but adding a system property to Tomcat named `log4j.configuration` which must be set to a `file:/` URL that points to your properties file. One way to add the above property to the Tomcat start-up is to add a line to a Tomcat `setenv.sh` script in Tomcat's bin directory. If that file does not exist, then create it.
 
-For example, if your property file is in `/usr/share/tomcat7/lib/log4j.properties`, then you 
-would add the following line to `setenv.sh`:
+For example, if your property file is in `/usr/share/tomcat7/lib/log4j.properties`, then you would add the following line to `setenv.sh`:
 
     export JAVA_OPTS="-Dlog4j.configuration=file:///usr/share/tomcat7/lib/log4j.properties"
     
-If the file already exists and already sets the JAVA_OPTS variable, then you'll have to 
-add your `-D` option to ones already there. Also note, you might want set other `-D` and `-X` 
-options in that setenv file, e.g. Java heap size.
+If the file already exists and already sets the JAVA_OPTS variable, then you'll have to add your `-D` option to ones already there. Also note, you might want set other `-D` and `-X` options in that setenv file, e.g. Java heap size.
 
 
 ### Stack STEP #5: Deploy ROOT.war to Tomcat
 
-The next step is to deploy the Usergrid Stack software to Tomcat. There are a variey of ways 
-of doing this and the simplest is probably to place the Usergrid Stack `ROOT.war` file into
-the Tomcat `webapps` directory, then restart Tomcat.
+The next step is to deploy the Usergrid Stack software to Tomcat. There are a variey of ways of doing this and the simplest is probably to place the Usergrid Stack `ROOT.war` file into the Tomcat `webapps` directory, then restart Tomcat.
 
 
 __For example, on Linux...__
@@ -360,17 +328,13 @@ You can watch the Tomcat log in `/var/log/tomcat7/catalina.out` for errors:
     
 __Does it work?__
 
-Check to see if Usergrid is up and running by calling the status end-point. 
-If your web browser is running on the same computer as Tomcat (and Tomcat is on port 8080), 
-then you can browse to [http://localhost:8080/status](http://localhost:8080/status) 
-to view the Usergrid status page. 
+Check to see if Usergrid is up and running by calling the status end-point. If your web browser is running on the same computer as Tomcat (and Tomcat is on port 8080), then you can browse to [http://localhost:8080/status](http://localhost:8080/status) to view the Usergrid status page. 
 
 Or you can use curl:
 
     curl http://localhost:8080/status
     
-If you get a JSON file of status data, then you're ready to move to the next step.
-You should see a response that begins like this:
+If you get a JSON file of status data, then you're ready to move to the next step. You should see a response that begins like this:
 
     {
       "timestamp" : 1454090178953,
@@ -395,14 +359,9 @@ You should see a response that begins like this:
 
 Next, you must initialize the Usergrid database, index and query systems.
 
-To do this you must issue a series of HTTP operations using the superuser credentials.
-You can only do this if Usergrid is configured to allow superused login via
-this property `usergrid.sysadmin.login.allowed=true` and if you used the 
-above example properties file, it is allowed.
+To do this you must issue a series of HTTP operations using the superuser credentials. You can only do this if Usergrid is configured to allow superused login via this property `usergrid.sysadmin.login.allowed=true` and if you used the above example properties file, it is allowed.
 
-The three operation you must perform are expressed by the curl commands below and,
-of course, you will have ot change the password 'test' to match the superuser password 
-that you set in your Usergrid properties file.
+The three operation you must perform are expressed by the curl commands below and, of course, you will have ot change the password 'test' to match the superuser password that you set in your Usergrid properties file.
 
     curl -X PUT http://localhost:8080/system/database/setup     -u superuser:test
     curl -X PUT http://localhost:8080/system/database/bootstrap -u superuser:test
@@ -417,19 +376,16 @@ When you issue each of those curl commands, you should see a success message lik
         "duration" : 374
     }    
 
-If you don't see a success message, then refer to the Tomcat logs for error message and
-seek help from the [Usergrid community](http://usergrid.apache.org/community).
+If you don't see a success message, then refer to the Tomcat logs for error message and seek help from the [Usergrid community](http://usergrid.apache.org/community).
 
 Now that you've gotten Usergrid up and running, you're ready to deploy the Usergrid Portal.
 
 
 ## Deploying the Usergrid Portal
 
-The Usergrid Portal is an HTML5/JavaScript application, a bunch of static files that 
-can be deployed to any web server, e.g. Apache HTTPD or Tomcat.
+The Usergrid Portal is an HTML5/JavaScript application, a bunch of static files that can be deployed to any web server, e.g. Apache HTTPD or Tomcat.
 
-To deploy the Portal to a web server, you will un-tar the `usergrid-portal.tar` file into 
-directory that serves as the root directory of your web pages. 
+To deploy the Portal to a web server, you will un-tar the `usergrid-portal.tar` file into directory that serves as the root directory of your web pages. 
 
 For example, with Tomcat on Linux you might do something like this:
 
@@ -437,14 +393,11 @@ For example, with Tomcat on Linux you might do something like this:
     cd /usr/share/tomcat7/webapps
     tar xf usergrid-portal.tar
     
-Then you will probably want to rename the Portal directory to something that will work
-well in a URL. For example, if you want your Portal to exist at the path `/portal` then:
+Then you will probably want to rename the Portal directory to something that will work well in a URL. For example, if you want your Portal to exist at the path `/portal` then:
 
     mv usergrid-portal.2.0.18 portal
     
-Once you have done that there is one more step. You need to configure the portal so that 
-it can find the Usergrid stack. You do that by editing the `portal/config.js` and changing
-this line:
+Once you have done that there is one more step. You need to configure the portal so that it can find the Usergrid stack. You do that by editing the `portal/config.js` and changing this line:
 
     Usergrid.overrideUrl = 'http://localhost:8080/';
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/_sources/orgs-and-apps/application.txt
----------------------------------------------------------------------
diff --git a/content/docs/_sources/orgs-and-apps/application.txt b/content/docs/_sources/orgs-and-apps/application.txt
index 801b9ef..f60f63f 100644
--- a/content/docs/_sources/orgs-and-apps/application.txt
+++ b/content/docs/_sources/orgs-and-apps/application.txt
@@ -98,3 +98,107 @@ Note: You also need to provide a valid access token with the API call. See [Auth
       }
     }
     
+
+## Deleting and restoring Applications
+Usergrid allows you to clean-up your Organizations by deleting old Applications that you no longer need.
+With this feature, Applications are not really deleted but they are hidden from view and may be restored later. (At some point in the future, Usergrid may get the ability to completely obliterate an Application, but that ability does not exist at the time of this writing.)
+
+### Delete Application: Request URI
+
+Only an authenticated Admin User can delete and restore Applications. 
+To delete an application, you send an authenticated HTTP **DELETE** request to the /management end-point.
+The Request URI must specify the Organization and the Application, both by identifier (name or UUID).
+Here is the Request URI pattern:
+
+	/management/organizations|orgs/{org_name}|{uuid}/applications|apps/{app_name}
+    
+Parameters
+
+This is intentionally redundant, but you must confirm that you really want to delete the Application
+by specifying its name or UUID, same as that which you used in the Request URI.
+
+Parameter	                     Description
+---------                      -----------
+string confirm_application_id  Application identifier (either name or UUID)
+
+Note: You also need to provide a valid access token with the API call. See [Authenticating users and application clients](../security_and_auth/authenticating-users-and-application-clients.html) for details.
+
+
+### Delete Application: Example - Request
+
+This  example deletes an aApplication named 'testapp1'
+
+    curl -X DELETE "https://api.usergrid.com/management/orgs/testorg/apps/testapp1?confirm_application_id=testapp1"
+    
+### Delete Application: Example - Response
+
+The response echos back the action that was taken and the params, and an HTTP 200 OK status message confirms that the Application has been deleted.
+
+    HTTP/1.1 200 OK
+    Access-Control-Allow-Origin: *
+	Content-Length: 276
+	Content-Type: application/json
+	Date: Mon, 06 Jun 2016 18:52:04 GMT
+	Server: Apache-Coyote/1.1
+	Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sun, 05-Jun-2016 18:52:04 GMT
+	{
+	    "action": "delete",
+	    "application": "d44dfc30-2c13-11e6-8b07-0a669fe1d66e",
+	    "applicationName": "delete",
+	    "duration": 3,
+	    "organization": "test-organization",
+	    "params": {
+	        "confirm_application_identifier": [
+	            "testapp1"
+	        ]
+	    },
+	    "timestamp": 1465239124645
+	}
+
+    
+### Restore Application: Request URI
+
+To Restore an Application that has been deleted you must know the Application's UUID. If you do a PUT to that application's old URI, using he UUID to identify it, then the Application will be restored.
+ 
+### Restore Application: Example - Request
+
+For example, to restore 'testapp1' that we deleted above:
+
+	curl -X PUT "https://api.usergrid.com/management/orgs/test-organization/apps/d44dfc30-2c13-11e6-8b07-0a669fe1d66e access_token==YWMtZR..."
+	
+### Restore Application: Example - Response
+
+Here's the response that indicates via HTTP 200 OK that the Application has been restored.
+	
+	HTTP/1.1 200 OK
+	Access-Control-Allow-Origin: *
+	Content-Length: 223
+	Content-Type: application/json
+	Date: Mon, 06 Jun 2016 19:03:16 GMT
+	Server: Apache-Coyote/1.1
+	Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sun, 05-Jun-2016 19:03:16 GMT
+	
+	{
+	    "action": "restore",
+	    "application": "d44dfc30-2c13-11e6-8b07-0a669fe1d66e",
+	    "applicationName": "delete",
+	    "duration": 3,
+	    "organization": "test-organization",
+	    "params": {},
+	    "timestamp": 1465239796913
+	}
+    
+### Application Delete and Restore Limitations
+
+At the time of this writing there are a couple of limitations regarding Application Delete and Restore:
+
+* Within an Organization, you cannot delete an Application with the same name as an Application that you have deleted before.
+* Within an Organization, you cannot restore an Application is an application with the very same name has been added since the orginal one was deleted.
+
+Hopefully, these unnecessary limitations will be fixed soon; they are tracked by this JIRA issue [USERGRID-1299](https://issues.apache.org/jira/browse/USERGRID-1299)
+
+
+
+
+    
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/data-storage/collections.html
----------------------------------------------------------------------
diff --git a/content/docs/data-storage/collections.html b/content/docs/data-storage/collections.html
index be72bfb..1a7dedc 100644
--- a/content/docs/data-storage/collections.html
+++ b/content/docs/data-storage/collections.html
@@ -105,22 +105,31 @@
 <li class="toctree-l3"><a class="reference internal" href="#example-request-response">Example Request/Response</a></li>
 </ul>
 </li>
+<li class="toctree-l2"><a class="reference internal" href="#collection-settings">Collection Settings</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#setting-up-selective-indexing-via-collection-settings">Setting up Selective Indexing via Collection Settings</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#specifying-a-schema-for-a-collection">Specifying a Schema for a Collection</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#example-turn-off-indexing-for-a-collection">Example: Turn off Indexing for a Collection</a></li>
+<li class="toctree-l4"><a class="reference internal" href="#example-index-only-one-field-of-a-collection">Example: Index only one field of a Collection</a></li>
+</ul>
+</li>
+</ul>
+</li>
 <li class="toctree-l2"><a class="reference internal" href="#retrieving-collections">Retrieving Collections</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#retrieving-sets-of-entities-from-a-collection">Retrieving sets of entities from a collection</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id1">Request Syntax</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id2">Example Request/Response</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id5">Request Syntax</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id6">Example Request/Response</a></li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="#updating-collections">Updating Collections</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#batch-updating-entities-in-a-collection">Batch updating entities in a collection</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id3">Request Syntax</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id4">Example Request/Response</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id7">Request Syntax</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id8">Example Request/Response</a></li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="#deleting-collections">Deleting Collections</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#batch-deleting-entities-in-a-collection">Batch deleting entities in a collection</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id5">Request Syntax</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#id6">Example Request/Response</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id9">Request Syntax</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#id10">Example Request/Response</a></li>
 </ul>
 </li>
 </ul>
@@ -334,6 +343,170 @@ providing &#8216;items&#8217; will not create &#8216;itemses&#8217;.</p>
 </div>
 </div>
 </div>
+<div class="section" id="collection-settings">
+<h2>Collection Settings<a class="headerlink" href="#collection-settings" title="Permalink to this headline">�</a></h2>
+<p>Usergrid allows you to specify settings for each of your Collections.
+Collections may have a *_settings* resource with the following URI
+pattern:</p>
+<div class="highlight-python"><div class="highlight"><pre>/{org-identifier}/{app-identifier}/{collection-name}/_settings
+</pre></div>
+</div>
+<p>If a Collection does not have a <a href="#id1"><span class="problematic" id="id2">*</span></a>settings resource, then doing an HTTP
+GET on that URI will yield the normal Collection resource. For example
+here a request and respinse for settings for the Collection &#8220;battles&#8221;,
+which does not yet have <a href="#id3"><span class="problematic" id="id4">*</span></a>settigs:</p>
+<div class="highlight-python"><div class="highlight"><pre>curl &quot;https//api.usergrid.com/test-organization/settingstest/battles/_settings?access_token=YWM...&quot;
+{
+  &quot;action&quot; : &quot;get&quot;,
+  &quot;application&quot; : &quot;7fd6c414-2cb6-11e6-8b07-0a669fe1d66e&quot;,
+  &quot;params&quot; : { },
+  &quot;path&quot; : &quot;/battles&quot;,
+  &quot;uri&quot; : &quot;https//api.usergrid.com/test-organization/settingstest/battles&quot;,
+  &quot;entities&quot; : [ ],
+  &quot;timestamp&quot; : 1465308535753,
+  &quot;duration&quot; : 175,
+  &quot;organization&quot; : &quot;test-organization&quot;,
+  &quot;applicationName&quot; : &quot;settingstest&quot;
+}
+</pre></div>
+</div>
+<p>Once a Collection has a _settings resource, here&#8217;s what it might look
+like:</p>
+<div class="highlight-python"><div class="highlight"><pre>curl &quot;0:8080/test-organization/settingstest/battles/_settings?access_token=YWM...&quot;
+{
+  &quot;action&quot; : &quot;get&quot;,
+  &quot;application&quot; : &quot;7fd6c414-2cb6-11e6-8b07-0a669fe1d66e&quot;,
+  &quot;params&quot; : { },
+  &quot;path&quot; : &quot;/battles&quot;,
+  &quot;uri&quot; : &quot;https//api.usergrid.com/test-organization/settingstest/battles&quot;,
+  &quot;entities&quot; : [ ],
+  &quot;data&quot; : {
+    &quot;lastUpdated&quot; : 1465311161543,
+    &quot;lastReindexed&quot; : 0,
+    &quot;fields&quot; : &quot;all&quot;,
+    &quot;region&quot; : &quot;us-east-1&quot;,
+    &quot;lastUpdateBy&quot; : &quot;super@usergrid.com&quot;
+  },
+  &quot;timestamp&quot; : 1465311177535,
+  &quot;duration&quot; : 6,
+  &quot;organization&quot; : &quot;test-organization&quot;,
+  &quot;applicationName&quot; : &quot;settingstest&quot;
+}
+</pre></div>
+</div>
+<p>Collection settings are useful for setting up Selective Indexing. Let&#8217;s
+discuss that next.</p>
+</div>
+<div class="section" id="setting-up-selective-indexing-via-collection-settings">
+<h2>Setting up Selective Indexing via Collection Settings<a class="headerlink" href="#setting-up-selective-indexing-via-collection-settings" title="Permalink to this headline">�</a></h2>
+<p>Indexing is expensive and now it can be done selectively.</p>
+<p>In the beginning, Usergrid indexed each and every field of an Entity. If
+a field was an object, the the fields of that object would also be
+indexed. Indexing everything is very convenient because it means you can
+query on any field, but indexing everything is expensive in terms of
+performance; it slows down Entity creation and update. Indexing
+everything is also expensive in terms of storage, it takes up space and
+makes puts strain on the system.</p>
+<p>Staring with Usegrid 2.1.1, you can specify a &#8220;schema&#8221; for each
+Collection. You can tell Usergrid which fields should be indexed or you
+can tell Usergrid to completely skip indexing for a collection.</p>
+<div class="section" id="specifying-a-schema-for-a-collection">
+<h3>Specifying a Schema for a Collection<a class="headerlink" href="#specifying-a-schema-for-a-collection" title="Permalink to this headline">�</a></h3>
+<p>There are three ways to specify a schema for a Collection. You can
+specify that all fields are to be index, you can specify none or you can
+specify a list of the fields that should be indexed. You do this by
+POSTing or PUTing a _settings resource for the Collection with one
+field named &#8220;fields&#8221;.</p>
+<p>There are three possible values for &#8220;fields&#8221;:</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="30%" />
+<col width="9%" />
+<col width="61%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Fields Setting</th>
+<th class="head">Type</th>
+<th class="head">Meaning</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>&#8220;fields&#8221;:&#8221;all&#8221;</td>
+<td>String</td>
+<td>Index all Entity fields</td>
+</tr>
+<tr class="row-odd"><td>&#8220;fields&#8221;:&#8221;none&#8221;</td>
+<td>String</td>
+<td>Index no fields; completely skip indexing for this collection.</td>
+</tr>
+<tr class="row-even"><td>&#8220;fields&#8221;:[&#8220;field1&#8221;, &#8220;field2&#8221;]</td>
+<td>Array</td>
+<td>Index all fields whose names are listed in the array value.</td>
+</tr>
+</tbody>
+</table>
+<div class="section" id="example-turn-off-indexing-for-a-collection">
+<h4>Example: Turn off Indexing for a Collection<a class="headerlink" href="#example-turn-off-indexing-for-a-collection" title="Permalink to this headline">�</a></h4>
+<p>This example shows how you would use curl to set the schema if you want
+to turn off indexing for a collection:</p>
+<div class="highlight-python"><div class="highlight"><pre>curl -X PUT &quot;0:8080/test-organization/settingstest/_settings?access_token=YWM...&quot; -d &#39;{&quot;fields&quot;:&quot;none&quot;}&#39;
+{
+  &quot;action&quot; : &quot;put&quot;,
+  &quot;application&quot; : &quot;7fd6c414-2cb6-11e6-8b07-0a669fe1d66e&quot;,
+  &quot;params&quot; : { },
+  &quot;path&quot; : &quot;/_settings&quot;,
+  &quot;uri&quot; : &quot;http://localhost:8080/test-organization/settingstest/_settings&quot;,
+  &quot;entities&quot; : [ {
+    &quot;uuid&quot; : &quot;6fc783c6-2cc3-11e6-8fce-0a669fe1d66e&quot;,
+    &quot;type&quot; : &quot;_setting&quot;,
+    &quot;created&quot; : 1465312858697,
+    &quot;modified&quot; : 1465312858697,
+    &quot;fields&quot; : &quot;none&quot;,
+    &quot;metadata&quot; : {
+      &quot;path&quot; : &quot;/_settings/6fc783c6-2cc3-11e6-8fce-0a669fe1d66e&quot;,
+      &quot;size&quot; : 347
+    }
+  } ],
+  &quot;timestamp&quot; : 1465312858688,
+  &quot;duration&quot; : 63,
+  &quot;organization&quot; : &quot;test-organization&quot;,
+  &quot;applicationName&quot; : &quot;settingstest&quot;
+}
+</pre></div>
+</div>
+</div>
+<div class="section" id="example-index-only-one-field-of-a-collection">
+<h4>Example: Index only one field of a Collection<a class="headerlink" href="#example-index-only-one-field-of-a-collection" title="Permalink to this headline">�</a></h4>
+<p>This example shows how you would use curl to set the schema if you only
+want the &#8220;year&#8221; field to be indexed:</p>
+<div class="highlight-python"><div class="highlight"><pre>curl -X PUT &quot;0:8080/test-organization/settingstest/_settings?access_token=YWM...&quot; -d &#39;{&quot;fields&quot;:[&quot;year&quot;]}&#39;
+{
+  &quot;action&quot; : &quot;put&quot;,
+  &quot;application&quot; : &quot;7fd6c414-2cb6-11e6-8b07-0a669fe1d66e&quot;,
+  &quot;params&quot; : { },
+  &quot;path&quot; : &quot;/_settings&quot;,
+  &quot;uri&quot; : &quot;http://localhost:8080/test-organization/settingstest/_settings&quot;,
+  &quot;entities&quot; : [ {
+    &quot;uuid&quot; : &quot;6fc783c6-2cc3-11e6-8fce-0a669fe1d66e&quot;,
+    &quot;type&quot; : &quot;_setting&quot;,
+    &quot;created&quot; : 1465312858697,
+    &quot;modified&quot; : 1465312858697,
+    &quot;fields&quot; : [ &quot;year&quot; ],
+    &quot;metadata&quot; : {
+      &quot;path&quot; : &quot;/_settings/6fc783c6-2cc3-11e6-8fce-0a669fe1d66e&quot;,
+      &quot;size&quot; : 347
+    }
+  } ],
+  &quot;timestamp&quot; : 1465312858688,
+  &quot;duration&quot; : 63,
+  &quot;organization&quot; : &quot;test-organization&quot;,
+  &quot;applicationName&quot; : &quot;settingstest&quot;
+}
+</pre></div>
+</div>
+</div>
+</div>
+</div>
 <div class="section" id="retrieving-collections">
 <h2>Retrieving Collections<a class="headerlink" href="#retrieving-collections" title="Permalink to this headline">�</a></h2>
 <p>This article describes how to retrieve all of the entities in a
@@ -353,8 +526,8 @@ for details.</p>
 <div class="section" id="retrieving-sets-of-entities-from-a-collection">
 <h3>Retrieving sets of entities from a collection<a class="headerlink" href="#retrieving-sets-of-entities-from-a-collection" title="Permalink to this headline">�</a></h3>
 </div>
-<div class="section" id="id1">
-<h3>Request Syntax<a class="headerlink" href="#id1" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id5">
+<h3>Request Syntax<a class="headerlink" href="#id5" title="Permalink to this headline">�</a></h3>
 <div class="highlight-python"><div class="highlight"><pre>curl -X GET https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/&lt;collection&gt;
 </pre></div>
 </div>
@@ -382,8 +555,8 @@ for details.</p>
 </tbody>
 </table>
 </div>
-<div class="section" id="id2">
-<h3>Example Request/Response<a class="headerlink" href="#id2" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id6">
+<h3>Example Request/Response<a class="headerlink" href="#id6" title="Permalink to this headline">�</a></h3>
 <p>Request:</p>
 <div class="highlight-python"><div class="highlight"><pre>curl -X GET &quot;https://api.usergrid.com/your-org/your-app/items&quot;
 </pre></div>
@@ -443,8 +616,8 @@ for details.</p>
 <div class="section" id="batch-updating-entities-in-a-collection">
 <h3>Batch updating entities in a collection<a class="headerlink" href="#batch-updating-entities-in-a-collection" title="Permalink to this headline">�</a></h3>
 </div>
-<div class="section" id="id3">
-<h3>Request Syntax<a class="headerlink" href="#id3" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id7">
+<h3>Request Syntax<a class="headerlink" href="#id7" title="Permalink to this headline">�</a></h3>
 <div class="highlight-python"><div class="highlight"><pre>curl -X PUT https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/&lt;collection&gt;/?ql= -d {&lt;property&gt;}
 </pre></div>
 </div>
@@ -478,8 +651,8 @@ example:</p>
 </pre></div>
 </div>
 </div>
-<div class="section" id="id4">
-<h3>Example Request/Response<a class="headerlink" href="#id4" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id8">
+<h3>Example Request/Response<a class="headerlink" href="#id8" title="Permalink to this headline">�</a></h3>
 <p>Request:</p>
 <div class="highlight-python"><div class="highlight"><pre>curl -X PUT https://api.usergrid.com/your-org/your-app/items/?ql= -d &#39;{&quot;availability&quot;:&quot;in-stock&quot;}&#39;
 </pre></div>
@@ -538,8 +711,8 @@ for details.</p>
 <div class="section" id="batch-deleting-entities-in-a-collection">
 <h3>Batch deleting entities in a collection<a class="headerlink" href="#batch-deleting-entities-in-a-collection" title="Permalink to this headline">�</a></h3>
 </div>
-<div class="section" id="id5">
-<h3>Request Syntax<a class="headerlink" href="#id5" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id9">
+<h3>Request Syntax<a class="headerlink" href="#id9" title="Permalink to this headline">�</a></h3>
 <div class="highlight-python"><div class="highlight"><pre>curl -X DELETE https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/&lt;collection&gt;/?ql=&lt;query&gt;
 </pre></div>
 </div>
@@ -571,8 +744,8 @@ for details.</p>
 </table>
 <p>(for more information on queries, see Querying your data)</p>
 </div>
-<div class="section" id="id6">
-<h3>Example Request/Response<a class="headerlink" href="#id6" title="Permalink to this headline">�</a></h3>
+<div class="section" id="id10">
+<h3>Example Request/Response<a class="headerlink" href="#id10" title="Permalink to this headline">�</a></h3>
 <p>The following example will delete the first 5 entities in a collection.</p>
 <p>Request:</p>
 <div class="highlight-python"><div class="highlight"><pre>curl -X DELETE https://api.usergrid.com/your-org/your-app/items/?ql=&quot;limit=5&quot;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/index.html
----------------------------------------------------------------------
diff --git a/content/docs/index.html b/content/docs/index.html
index 6d2f2b4..41ed10e 100644
--- a/content/docs/index.html
+++ b/content/docs/index.html
@@ -309,6 +309,8 @@
 </li>
 <li class="toctree-l1"><a class="reference internal" href="data-storage/collections.html">Collections</a><ul>
 <li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#creating-collections">Creating Collections</a></li>
+<li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#collection-settings">Collection Settings</a></li>
+<li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#setting-up-selective-indexing-via-collection-settings">Setting up Selective Indexing via Collection Settings</a></li>
 <li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#retrieving-collections">Retrieving Collections</a></li>
 <li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#updating-collections">Updating Collections</a></li>
 <li class="toctree-l2"><a class="reference internal" href="data-storage/collections.html#deleting-collections">Deleting Collections</a></li>
@@ -633,6 +635,7 @@
 <li class="toctree-l2"><a class="reference internal" href="orgs-and-apps/application.html#creating-an-application">Creating an application</a></li>
 <li class="toctree-l2"><a class="reference internal" href="orgs-and-apps/application.html#generating-application-credentials">Generating application credentials</a></li>
 <li class="toctree-l2"><a class="reference internal" href="orgs-and-apps/application.html#getting-application-credentials">Getting application credentials</a></li>
+<li class="toctree-l2"><a class="reference internal" href="orgs-and-apps/application.html#deleting-and-restoring-applications">Deleting and restoring Applications</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="orgs-and-apps/admin-user.html">Admin user</a><ul>

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/installation/deployment-guide.html
----------------------------------------------------------------------
diff --git a/content/docs/installation/deployment-guide.html b/content/docs/installation/deployment-guide.html
index 49bf2d6..a50a57f 100644
--- a/content/docs/installation/deployment-guide.html
+++ b/content/docs/installation/deployment-guide.html
@@ -280,10 +280,11 @@ for deployment you can deploy them separately using clustering.</p>
 haven&#8217;t tried it)</li>
 <li><a class="reference external" href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java SE 8
 JDK</a></li>
-<li><a class="reference external" href="https://tomcat.apache.org/download-70.cgi">Apache Tomcat 7+</a></li>
-<li><a class="reference external" href="http://cassandra.apache.org/download/">Apache Cassandra 1.2.1+</a></li>
-<li><a class="reference external" href="https://www.elastic.co/downloads/elasticsearch">ElasticSearch
-1.4+</a></li>
+<li><a class="reference external" href="https://tomcat.apache.org/download-70.cgi">Apache Tomcat 7</a></li>
+<li><a class="reference external" href="http://cassandra.apache.org/download/">Apache Cassandra 1.2.x or
+2.x</a></li>
+<li><a class="reference external" href="https://www.elastic.co/downloads/elasticsearch">ElasticSearch 1.4.x or
+1.7.x</a></li>
 </ul>
 <p>Optional but helpful:</p>
 <ul class="simple">
@@ -345,6 +346,13 @@ recommended.</p>
 <p><strong>Use the right Java.</strong> Cassandra requires Java and we recommend that
 you use the same version of Java for Cassandra as you use to run Tomcat
 and ElasticSearch.</p>
+<p>Usergrid uses Cassandra&#8217;s Thrift protocol and on Cassandra 2.x releases
+you MUST enable Thrift by setting <code class="docutils literal"><span class="pre">start_rpc</span></code> in your
+<code class="docutils literal"><span class="pre">cassandra.yaml</span></code> file:</p>
+<div class="highlight-python"><div class="highlight"><pre># Whether to start the thrift rpc server.
+start_rpc: true
+</pre></div>
+</div>
 <p><strong>Refer to the</strong> <a class="reference external" href="http://wiki.apache.org/cassandra/GettingStarted">Apache Cassandra
 documentation</a> <strong>for
 instructions on how to install Cassandra</strong>. The <a class="reference external" href="http://docs.datastax.com/en/cassandra/1.2/cassandra/features/featuresTOC.html">Datastax documentation

http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/orgs-and-apps/application.html
----------------------------------------------------------------------
diff --git a/content/docs/orgs-and-apps/application.html b/content/docs/orgs-and-apps/application.html
index fdded4b..3a7182b 100644
--- a/content/docs/orgs-and-apps/application.html
+++ b/content/docs/orgs-and-apps/application.html
@@ -190,6 +190,16 @@
 <li class="toctree-l3"><a class="reference internal" href="#id6">Example - Response</a></li>
 </ul>
 </li>
+<li class="toctree-l2"><a class="reference internal" href="#deleting-and-restoring-applications">Deleting and restoring Applications</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#delete-application-request-uri">Delete Application: Request URI</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#delete-application-example-request">Delete Application: Example - Request</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#delete-application-example-response">Delete Application: Example - Response</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#restore-application-request-uri">Restore Application: Request URI</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#restore-application-example-request">Restore Application: Example - Request</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#restore-application-example-response">Restore Application: Example - Response</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#application-delete-and-restore-limitations">Application Delete and Restore Limitations</a></li>
+</ul>
+</li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" href="admin-user.html">Admin user</a></li>
@@ -437,6 +447,137 @@ for details.</p>
 </div>
 </div>
 </div>
+<div class="section" id="deleting-and-restoring-applications">
+<h2>Deleting and restoring Applications<a class="headerlink" href="#deleting-and-restoring-applications" title="Permalink to this headline">�</a></h2>
+<p>Usergrid allows you to clean-up your Organizations by deleting old
+Applications that you no longer need. With this feature, Applications
+are not really deleted but they are hidden from view and may be restored
+later. (At some point in the future, Usergrid may get the ability to
+completely obliterate an Application, but that ability does not exist at
+the time of this writing.)</p>
+<div class="section" id="delete-application-request-uri">
+<h3>Delete Application: Request URI<a class="headerlink" href="#delete-application-request-uri" title="Permalink to this headline">�</a></h3>
+<p>Only an authenticated Admin User can delete and restore Applications. To
+delete an application, you send an authenticated HTTP <strong>DELETE</strong> request
+to the /management end-point. The Request URI must specify the
+Organization and the Application, both by identifier (name or UUID).
+Here is the Request URI pattern:</p>
+<div class="highlight-python"><div class="highlight"><pre>/management/organizations|orgs/{org_name}|{uuid}/applications|apps/{app_name}
+</pre></div>
+</div>
+<p>Parameters</p>
+<p>This is intentionally redundant, but you must confirm that you really
+want to delete the Application by specifying its name or UUID, same as
+that which you used in the Request URI.</p>
+<table border="1" class="docutils">
+<colgroup>
+<col width="42%" />
+<col width="58%" />
+</colgroup>
+<thead valign="bottom">
+<tr class="row-odd"><th class="head">Parameter</th>
+<th class="head">Description</th>
+</tr>
+</thead>
+<tbody valign="top">
+<tr class="row-even"><td>string confirm_application_id</td>
+<td>Application identifier (either name or UUID)</td>
+</tr>
+</tbody>
+</table>
+<p>Note: You also need to provide a valid access token with the API call.
+See <a class="reference external" href="../security_and_auth/authenticating-users-and-application-clients.html">Authenticating users and application
+clients</a>
+for details.</p>
+</div>
+<div class="section" id="delete-application-example-request">
+<h3>Delete Application: Example - Request<a class="headerlink" href="#delete-application-example-request" title="Permalink to this headline">�</a></h3>
+<p>This example deletes an aApplication named &#8216;testapp1&#8217;</p>
+<div class="highlight-python"><div class="highlight"><pre>curl -X DELETE &quot;https://api.usergrid.com/management/orgs/testorg/apps/testapp1?confirm_application_id=testapp1&quot;
+</pre></div>
+</div>
+</div>
+<div class="section" id="delete-application-example-response">
+<h3>Delete Application: Example - Response<a class="headerlink" href="#delete-application-example-response" title="Permalink to this headline">�</a></h3>
+<p>The response echos back the action that was taken and the params, and an
+HTTP 200 OK status message confirms that the Application has been
+deleted.</p>
+<div class="highlight-python"><div class="highlight"><pre>HTTP/1.1 200 OK
+Access-Control-Allow-Origin: *
+Content-Length: 276
+Content-Type: application/json
+Date: Mon, 06 Jun 2016 18:52:04 GMT
+Server: Apache-Coyote/1.1
+Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sun, 05-Jun-2016 18:52:04 GMT
+{
+    &quot;action&quot;: &quot;delete&quot;,
+    &quot;application&quot;: &quot;d44dfc30-2c13-11e6-8b07-0a669fe1d66e&quot;,
+    &quot;applicationName&quot;: &quot;delete&quot;,
+    &quot;duration&quot;: 3,
+    &quot;organization&quot;: &quot;test-organization&quot;,
+    &quot;params&quot;: {
+        &quot;confirm_application_identifier&quot;: [
+            &quot;testapp1&quot;
+        ]
+    },
+    &quot;timestamp&quot;: 1465239124645
+}
+</pre></div>
+</div>
+</div>
+<div class="section" id="restore-application-request-uri">
+<h3>Restore Application: Request URI<a class="headerlink" href="#restore-application-request-uri" title="Permalink to this headline">�</a></h3>
+<p>To Restore an Application that has been deleted you must know the
+Application&#8217;s UUID. If you do a PUT to that application&#8217;s old URI, using
+he UUID to identify it, then the Application will be restored.</p>
+</div>
+<div class="section" id="restore-application-example-request">
+<h3>Restore Application: Example - Request<a class="headerlink" href="#restore-application-example-request" title="Permalink to this headline">�</a></h3>
+<p>For example, to restore &#8216;testapp1&#8217; that we deleted above:</p>
+<div class="highlight-python"><div class="highlight"><pre>curl -X PUT &quot;https://api.usergrid.com/management/orgs/test-organization/apps/d44dfc30-2c13-11e6-8b07-0a669fe1d66e access_token==YWMtZR...&quot;
+</pre></div>
+</div>
+</div>
+<div class="section" id="restore-application-example-response">
+<h3>Restore Application: Example - Response<a class="headerlink" href="#restore-application-example-response" title="Permalink to this headline">�</a></h3>
+<p>Here&#8217;s the response that indicates via HTTP 200 OK that the Application
+has been restored.</p>
+<div class="highlight-python"><div class="highlight"><pre>HTTP/1.1 200 OK
+Access-Control-Allow-Origin: *
+Content-Length: 223
+Content-Type: application/json
+Date: Mon, 06 Jun 2016 19:03:16 GMT
+Server: Apache-Coyote/1.1
+Set-Cookie: rememberMe=deleteMe; Path=/; Max-Age=0; Expires=Sun, 05-Jun-2016 19:03:16 GMT
+
+{
+    &quot;action&quot;: &quot;restore&quot;,
+    &quot;application&quot;: &quot;d44dfc30-2c13-11e6-8b07-0a669fe1d66e&quot;,
+    &quot;applicationName&quot;: &quot;delete&quot;,
+    &quot;duration&quot;: 3,
+    &quot;organization&quot;: &quot;test-organization&quot;,
+    &quot;params&quot;: {},
+    &quot;timestamp&quot;: 1465239796913
+}
+</pre></div>
+</div>
+</div>
+<div class="section" id="application-delete-and-restore-limitations">
+<h3>Application Delete and Restore Limitations<a class="headerlink" href="#application-delete-and-restore-limitations" title="Permalink to this headline">�</a></h3>
+<p>At the time of this writing there are a couple of limitations regarding
+Application Delete and Restore:</p>
+<ul class="simple">
+<li>Within an Organization, you cannot delete an Application with the
+same name as an Application that you have deleted before.</li>
+<li>Within an Organization, you cannot restore an Application is an
+application with the very same name has been added since the orginal
+one was deleted.</li>
+</ul>
+<p>Hopefully, these unnecessary limitations will be fixed soon; they are
+tracked by this JIRA issue
+<a class="reference external" href="https://issues.apache.org/jira/browse/USERGRID-1299">USERGRID-1299</a></p>
+</div>
+</div>
 </div>
 
 


[23/37] usergrid git commit: Merge commit 'refs/pull/560/head' of github.com:apache/usergrid

Posted by sn...@apache.org.
Merge commit 'refs/pull/560/head' of github.com:apache/usergrid


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/04e49da5
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/04e49da5
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/04e49da5

Branch: refs/heads/usergrid-1318-queue
Commit: 04e49da589ec303efd03939a6faf21fb3aee0760
Parents: 9c5f599 a30e1a5
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Oct 20 10:21:53 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Oct 20 10:21:53 2016 -0700

----------------------------------------------------------------------
 .../exceptions/AbstractExceptionMapper.java     |   2 +-
 .../PasswordPolicyViolationExceptionMapper.java |  48 ++++++
 .../collection/users/PermissionsResourceIT.java |   4 +-
 .../collection/users/UserResourceIT.java        |  38 ++++-
 .../usergrid/rest/management/AdminUsersIT.java  |  51 ++++++
 .../rest/management/ManagementResourceIT.java   |   4 +-
 .../rest/management/RegistrationIT.java         |   6 +-
 .../cassandra/ManagementServiceImpl.java        |  73 +++++++--
 .../usergrid/security/PasswordPolicy.java       |  53 ++++++
 .../usergrid/security/PasswordPolicyFig.java    |  79 +++++++++
 .../usergrid/security/PasswordPolicyImpl.java   | 156 ++++++++++++++++++
 .../PasswordPolicyViolationException.java       |  46 ++++++
 .../services/guice/ServiceModuleImpl.java       |   8 +
 .../usergrid/security/PasswordPolicyTest.java   |  47 ++++++
 .../security/PasswordPolicyTestFig.java         | 161 +++++++++++++++++++
 15 files changed, 750 insertions(+), 26 deletions(-)
----------------------------------------------------------------------



[32/37] usergrid git commit: Update Cassandra and ElasticSearch versions supported & add node about the need for start_rpc=true in Cassandra 2+

Posted by sn...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/content/docs/searchindex.js
----------------------------------------------------------------------
diff --git a/content/docs/searchindex.js b/content/docs/searchindex.js
index 4b26d9e..9016020 100644
--- a/content/docs/searchindex.js
+++ b/content/docs/searchindex.js
@@ -1 +1 @@
-Search.setIndex({envversion:46,filenames:["README","assets-and-files/file-storage-configuration","assets-and-files/folders","assets-and-files/legacy-asset-support","assets-and-files/retrieving-assets","assets-and-files/uploading-assets","counters-and-events/creating-and-incrementing-counters","counters-and-events/events-and-counters","counters-and-events/retrieving-counters","data-queries/advanced-query-usage","data-queries/operators-and-types","data-queries/query-parameters","data-queries/querying-your-data","data-storage/collections","data-storage/data-store-dbms","data-storage/entities","data-storage/optimizing-access","entity-connections/connecting-entities","entity-connections/disconnecting-entities","entity-connections/retrieving-entities","geolocation/geolocation","index","installation/deployment-guide","installation/ug1-deploy-to-tomcat","installation/ug1-launcher-quick-start","installation/ug2-deploy-to-tomcat","introduction/async-vs-sync","introduction/data-model","introdu
 ction/overview","introduction/usergrid-features","jersey2skeleton/README","orgs-and-apps/admin-user","orgs-and-apps/application","orgs-and-apps/managing","orgs-and-apps/organization","push-notifications/adding-push-support","push-notifications/creating-and-managing-notifications","push-notifications/creating-notifiers","push-notifications/getting-started","push-notifications/managing-users-and-devices","push-notifications/overview","push-notifications/registering","push-notifications/tbd","push-notifications/troubleshooting","push-notifications/tutorial","push-notifications/users-devices","reference/contribute-code","reference/presos-and-videos","rest-endpoints/api-docs","sdks/ios-new","sdks/sdk-outline","sdks/tbd","security-and-auth/app-security","security-and-auth/authenticating-api-requests","security-and-auth/authenticating-users-and-application-clients","security-and-auth/changing-token-time-live-ttl","security-and-auth/facebook-sign","security-and-auth/revoking-tokens-logout",
 "security-and-auth/securing-your-app","security-and-auth/user-authentication-types","security-and-auth/using-permissions","security-and-auth/using-roles","user-management/activity","user-management/group","user-management/groups","user-management/messagee-example","user-management/user-connections","user-management/user-management","user-management/working-user-data","using-usergrid/creating-a-new-application","using-usergrid/creating-account","using-usergrid/using-a-sandbox-app","using-usergrid/using-the-api"],objects:{},objnames:{},objtypes:{},terms:{"005056c00008":68,"00767101f6b4f2cf5d02ed510dbcf0b4":63,"02e81ac5a17b":[2,10],"02e81adcf3d0":[5,6,8,13,15,18,19,49,60,61,62,63,72],"02e81ae236e9":63,"02e81ae61238":63,"02e81ae640dc":[2,62],"02e81ae66238":63,"02e81aeb2129":63,"02e81aeb26e9":63,"02e9sjwsf3d0":[15,49],"03ae956a":20,"0455fc92de2636fc7a176cc5d298bb78":63,"08fe":49,"0abe":[13,49],"0d7cf92a":[15,49],"0d7e":34,"0d7f":34,"0f1ff3650d20":[17,63,68],"10e":10,"10e10":10,"11apigeea
 psdestination11":36,"11e0":[8,68],"11e1":[2,27,31,34,62,63,68,72],"11e2":[2,5,6,8,10,12,13,15,18,19,34,49,60,61,62,63,72],"11e3":[5,13,15,17,18,19,20,49,55,61,63,68,72],"1231380a0284":62,"12313b01d5c1":[2,27,62,72],"12313b06ae01":62,"12313b06d112":62,"12313b111c56":34,"12313b122c56":[31,34],"12313d027361":34,"12313d027471":34,"12313d14bde7":63,"12313d1520f1":62,"12313d1c4491":[2,31,34,62],"12313d1c44914":62,"12313d1c5591":34,"12313d288ee0":34,"12313d288ff0":34,"12313d331ae8":62,"12313f0204b":68,"12313f0204bb":[8,68],"12313f0204bb8":68,"12331b144c65":31,"12331d1c5591":[31,34],"12424d1c4491":31,"174785aa":17,"19a0":[15,49],"1a62":[13,49],"1a9356ba":[13,15,49],"1bd100b8059e":[13,49],"1c8f60e4":68,"1f3567aa":62,"1px":47,"1st":48,"20adr":68,"20c57d4f41cf51f2db44165eb058b3b2":12,"20employe":63,"20or":15,"20titl":63,"20uuid":15,"20where":[63,68],"22000a1c4e22":63,"22000a1c5a67":[63,68],"2440ca58":62,"2482a1c5":62,"249f":20,"2ac6":2,"2ac8":2,"2d00":62,"2d21":2,"2e1db7299b0a667ed80e674a0ef9d
 653":5,"2nd":48,"31847b9a":[13,49],"3192ac6a":[13,49],"327b527f":[31,34],"328b526e":31,"328fe64a":[15,49],"335b527f":[31,34],"33dd0563":[31,34],"3400ba10":[2,34,62],"348388de":61,"34e26bc9":62,"3500ba10":34,"37f3":62,"382d0991":61,"38dc":15,"3bee":39,"3c1e":61,"3d1a9356ba":15,"3rd":22,"410b213a":[5,61],"411c466c4f2c":12,"417f":[17,63,68],"4353136f":68,"438a1ca1":8,"477d":63,"48c92c73":34,"496ca1d42ce7":[13,49],"49ff":62,"4a1edb70":[15,49],"4d2664c8e0c3":63,"4f511f12a386":39,"5005a0fa":63,"503f17da":72,"50gb":1,"5111c463":62,"5373d7165c2d":55,"53fe3700":[13,49],"563f5d96":62,"58606d0a":[18,19],"58e8":[63,68],"595955dff9ee4a706de9d97b86c5f0636fe24b43":22,"5ae1fa7a":[13,49],"5bb76bca":[13,15,49],"5bcc47ca":[18,19],"5bd5fa5f701f":49,"5c0c1789":[2,27],"5de0bb69":34,"5f4a65c16193":[15,49],"5wugd":54,"61c9":62,"62de5d97":72,"62fd53c78ce7":60,"65c8":34,"6640a601":2,"6715d5ef47a6":[15,49],"67cb":63,"698b":63,"699740088e05":6,"6a42":62,"6b07e44495ef":61,"6be0003c809b":[13,49],"6c56ffda":17,"6
 fbc8157":63,"6ldstnesaaaaakhdvglhmmu86_eoyxsjjqqd1ipz":[31,68],"74bb":61,"74d2d7da":63,"78c54a82":68,"7a0a1cba":39,"7bf47435":2,"7fb8d891":63,"802f":63,"81581bbaf055":[13,15,49],"8272c9b0":12,"83ceb9965c26":63,"83de":63,"83e9b7ea":[15,49],"84a5":68,"84c0":62,"84df":[15,49],"87b9":34,"884d":68,"89ab":[13,49],"8a2a":[15,49],"8a4c":60,"8ae3":39,"8ae8a6ea":68,"8bde":[18,19],"8cef":12,"8d05e96f700d":[13,49],"8d5c":72,"8dd1801e534c":17,"8e0cd3866ee20746c99e9a9825f38ad8":2,"8ea8":17,"903f":[13,15,49],"90f823ba15655b8cc8e3b4d63377576f":63,"917d":[15,49],"924d":10,"92c3":2,"92e2":12,"9501cda1":2,"95c8":[31,34],"96f6":62,"98b9":34,"9953085ea376":[5,61],"999e12039f87":49,"99a7":55,"99fd":17,"9a18":39,"9c1b":63,"9ce3":[15,49],"9d3a":6,"9de5":61,"9e75":17,"9e92":[15,49],"9efc8ad529d8":61,"9f80":20,"9ff6c621a7a4":[13,15,49],"9ffc":62,"____usergrid":23,"__weak":36,"_set":22,"boolean":[10,34,45,48],"byte":36,"case":[9,16,23,26,35,38,43,45,48,49,62,64,66],"catch":49,"class":[1,22,25,31,36,39,54,57,6
 8],"default":[1,10,11,12,13,14,15,20,21,22,23,25],"export":[22,41,44,49],"final":[39,41],"float":10,"function":[6,26,29,39,56,59,62,63,64,65,67],"import":[26,27,29,35,38,39,44,52,71,72],"long":[10,27,36,45,64],"new":[6,9,13,15,16,21,28,31,32,34,35,36,38,39,40,41,43,44,45,48,49,55,56,58,61,62,63,65,68],"null":[6,39,56],"public":[31,39,41,68],"return":[10,11,12,13,16,19,20,24,26,31,34,39,41,45,48,54,55,56,57,60,62,63],"short":[62,70],"static":[22,23,39,46],"throw":[35,43],"transient":25,"true":[10,12,18,19,22,23,24,25,31,34,36,39,48,56,61,63,68,72],"try":[24,31,35,36,43,49,52,56,60,70,71],"typeof":56,"var":[9,22,31,39,56],"void":[36,39],"while":[23,26,27,29,35,38,39,40,43,45,60,61,71],a065:62,a0dd:72,a0e5:[5,61],a0f7:62,a166:[5,6,8,13,15,18,19,49,60,61,63,72],a24f:[13,49],a407b1e7:[63,68],a51b:[15,49],a554b7fbd57a:72,a5c5:61,a668717b:63,a694:[18,19],a6e3:63,a71c:60,a72a:[13,15,49],a7e008061e10:[18,19],a7f7:[5,6,8,13,15,18,19,49,60,61,63,72],a9c1:49,abbrevi:[12,16,41,72],abil:[20,29,66
 ,67,70],abl:[16,22,23,25,35,36,38,44,58,59,62,67,68,72],about:[0,10,16,21,23,29,31,33,34,35,36,38,39,40],abov:[5,6,10,19,22,23,24,25,35,38,39,44,61,62],abstractbatch:22,abstractcomposit:22,ac46:[63,68],accept:[4,37,39,46,54,60],access:[2,13,14,15,16,19,21,22,24,27,29,31,32,33,34,36,39,41,45],access_token:[24,48,53,54,55,56],accessid:1,accesstokenrespons:21,accesstokenttl:55,accomplish:[36,57],accord:54,account:[12,15,16,21,22,23,25,27,29,31,33,35,38,39,41,44,45,48,55,58,59,61],achiev:66,acquaint:62,acquir:21,across:[8,16,36],act:[12,62,65],action:[2,5,6,7,8,12,13,14,15,16,17,18,19,21,22,23,29,31,32,34,35,36,44],activ:[5,10,12,18,19,20,21,22,23,25,27],activit:31,activityfe:21,actor:[31,34,48,62],actual:[16,35,38,44],add:[1,9,14,15,16],add_invoc:22,addit:[8,16,21],addobject:49,address:[12,22,23,31,34,35,38,41,45,48,54,68,72],addrol:21,adjust:[11,61],admin:[21,22,23,24,25],admin_password:54,admin_usernam:54,admin_users_require_activ:[22,23,25],admin_users_require_confirm:[22,23,25],adm
 ingmail:31,administr:[23,24,27,29,32,34,45,54,58,59,61],adminus:[31,34,48],adomain:68,adopt:29,advantag:29,advertis:20,advis:58,ae1f:17,aec3:62,afad:62,affect:55,after:[6,10,24,26,35,36,38,39,44,54,56,58,61,65,72],again:[23,31,35,43],against:[18,25,32,53,54,58,60],aggreg:8,air:14,aizasyckxotbq7a9gojsslqzlod_yjefxxxxxxx:37,alert:[20,26,36,39,63,64],alerttext:36,alia:[61,68],all:[0,6,8],alloc:[36,39,49],allow:[7,10,12,20,22,23,25,27,29,34,36,39,41,44,45,56,59,60,61,62,63,64,66,67,68,72],allowajaxfilt:22,almost:67,alon:[35,38],along:[11,16,35,39,43],alreadi:[15,16,22,23,35,36,37,39,45,48,49,56,58,65,70],also:[1,2,6,7,8,11,13,15,16,22,24,25,27,29,31,32,34,35,36,37,38,39,44,45,48,54,56,57,58,60,62,63,64,65,66,68,69],alter:61,altern:[12,13,63,64],although:[13,15,31,36,62,63,68],alwai:[27,36],amazon:1,amazonaw:23,amount:[11,59,62],amuramoto:[5,15,49,55],analysi:29,analyt:70,analyz:[29,53,54,58,59],android:[21,26],androiddev:37,androidmanifest:44,anew:[35,43],angular:46,ani:[5,6,8,10,12,14,
 15,16,20,22,25,26,27,29,31,33,36,39,44,48,52,53,54,55,58,59,60,61,62,63,65,66,67,68],annot:30,announc:40,anonym:[45,62,68],anoth:[12,16,35,36,38,43,44,53,62,65,66,68,71],answer:68,ant:60,anuff:47,anyon:[59,62],anyth:23,anytim:62,anywher:11,apachecon:47,apidocgener:0,apige:[35,36,39,40,41,44,47,49,63,72],apigeeapsdestin:36,apigeeapspayload:36,apigeecli:[39,49],apigeeclientrespons:[36,39,49],apigeecollect:49,apigeedatacli:36,apigeedataclientcompletionhandl:36,apigeemobileconfig:55,apikei:[37,56],apirequest:49,apirespons:39,apiresponsecallback:39,apn:21,app1:48,app2:48,app:[2,4,5,6,7,8,12,13,14,15,16,17,18,19],app_id:[15,48,62,63,68],app_nam:[32,55,57],app_uuid:[14,16],appdata:21,appdeleg:[36,39,44,49],appear:[19,25,37,41,48,62,65,66],append:[8,9,13,16,20,22,36,53,56],appid:[48,56],appl:[21,29],appledev:44,applenotifi:37,appleopt:39,appli:[25,55,58,60,61,66,67,68,72],applic:[2,4,5,6,7,8,12,13,14,15,16,17,18,19,20,21,22,23,24,26],application_client_secret:54,application_clientid:54,appl
 ication_info:34,applicationdata:48,applicationdidbecomeact:39,applicationid:[31,34,39,48],applicationnam:[2,5,6,8,12,13,14,15,16,17,18,19,48,49,55,60,61,62,63,68,72],appnam:[9,39,44,54,56],appropri:[27,36,37,39,45,56],approv:[22,23,25],appservic:39,aps_develop:41,apspayload:36,arbitrari:[66,72],architectur:[14,23],archiv:22,area:[31,36,41,52,68,70,71],aren:[14,16],arg:[1,32,34,62,63],argument:[1,39],arm:58,around:[0,16,22],arrai:[10,12,14,15,16,19,48,49,72],arthur:[17,18,19,66,67],articl:[12,13,15,53,61],asc:11,ascend:11,ask:[12,44],aspect:[7,29],asset1:2,asset:1,assets_id:2,assign:[6,21,27,29,45],assist:41,associ:[5,10,13,19,20,27,29,34,35,36,37,38,39,41,44,45,48,49,52,54,55,57,59,61,63,65,67,68,69,72],assum:[16,25,39,44,53],async:21,asynchron:21,atistophan:31,atom:15,atop:44,attach:[4,5],attack:[52,58],attempt:[34,48,53],attribut:14,audienc:21,audio:[5,29],auth:[23,25,37,41,45,56],authent:[13,15,21,24,28],author:[24,33,37,39,41,53,55,56,62,67],author_uuid:16,authorid:[14,16],autho
 rimag:16,authornam:16,authoruuid:16,authrespons:56,auto:[22,23,25],automat:[5,6,13,15,25,27,29,30,48,54,56,57,60,61,62,66,69,70],avail:[13,15,20,24,29,35,37,39,49,54,65,67,70,72],avatar:[12,62,63,68,72],avoid:[16,65],awai:16,awar:[10,20],awssdks3binarystor:1,b0c6:63,b11217fc:6,b1f7:[13,49],b24e:6,b2bd:63,b2e4:15,b31d:55,b36a:[2,27],b379:[5,61],b3aad0a4:49,b3u68vghi6fmeekn9wlogtzz0a:32,b3u6aaabmqz:54,b3u6zuz5_u8i:32,b4c6:2,b690:63,b6dd:62,b77ec8addc0d:63,b90c:63,b93d:68,baa:[22,31,34,36,37,41,52],back:[14,16,24,29,39,46,65],backend:[12,21,22,27,36],backslash:36,bad:[34,54,59],badg:[36,39],banner:7,bar1234b:68,bar:[28,72],barnei:[63,66],base:[0,13,20,21,22,23,25,29,36,37,54,67],baseurl:[22,39],bash:22,batch:11,baz:72,bcc1:8,bcf7:[2,31,34,62],bcf8:[31,34],bd397ea1:60,be04:[13,49],be08a5f9:34,be09a5f9:34,bean:[1,22],bearer:[24,37,53],beca:34,becaus:[14,20,23,35,43,48,54,58,59,62,65,71],becom:[11,12,20,23,29,41,62,63,64],been:[6,16,35,36,39,43,44,48,53,56,57,58,62],bef8:[31,34],befor:[0,
 1,21,22,26,35,36,38,39,41,43],begin:[8,11,21,22,33],behalf:54,behav:65,behavior:29,behind:[45,56,70],belong:[24,27,36,45,62,64],below:[13,14,15,16,22,23,25,31,35,36,38,44,49,50,56,62,63,65,68],beneath:65,benefici:26,benefit:[14,23],besid:61,best:[11,12],better:[16,54,59],bewar:25,beyond:62,bike:10,bin:[22,25],binari:[22,29,53,54,58,59],binarystor:1,bit:14,blank:[41,61],block:26,blog:61,blue:39,board:65,boat:10,boavijt0oyrkjf:32,bodi:[6,16,31,32,34,36,48,55,62,63,68],book:[11,29,49],bool:39,bootstrap:[22,25],border:47,both:[6,14,17,25,26,27,36,39,46,48,59,67],bottom:10,bounc:16,bouncer:16,bounci:[14,16],box:[36,44,61,65,67,69,71],bracket:15,bread:[13,15,49],brief:[26,56],broad:[53,54,59],brows:[22,28],browser:[22,23,31,35,38,56],bucketnam:1,buildcurl:56,built:[16,22,23,44,46,62,72],bunch:22,bundl:[39,44],busi:20,button:[7,31,35,38,41,43,44,61,65,68,69,71],button_click:[6,8],c2v7n61dy90mcdg78xixprxfdq:34,c2v7wedxiutzwekwdyslct_lydfvmmn:34,c5e707256e71:[15,49],california:[31,63,64],cal
 l:8,callback:[26,39,56],campaign:29,can:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,29,31,32,33,34,35,36,37,38,39],cancel:21,cannot:[13,15,26,27,30,59,72],capabl:58,captcha:[31,48,68],captur:[12,16,20,29],car:10,care:[38,40,41],carefulli:59,carri:[33,37,44],cassandra:[14,16,21],cassandra_cluster_nam:22,cassandra_host:22,cassandraavail:22,cassandrastatu:22,cassanrda:22,cast:47,castl:[14,16],cat:24,catalina:[22,25],catalog:29,categori:[14,31,34,48],caus:[0,15,48],caution:55,cautiou:[53,54,59],ccc:47,cd0c:[2,31,34,62],cd0d:[31,34],cd789b00:63,cd796d0a:63,cdf1ce04c1c0:12,cdn:29,cede5b7:34,cede5b8:34,cell:0,center:[20,35,38,44],central:[0,1],cer:41,certain:[15,16,27,36,57,67],certif:[21,35,37,38],certsigningrequest:41,cf3e981c:31,cf4d981c:[31,34],cf9b:8,cfed:[18,19],chain:6,challeng:[31,48,68,72],chang:[0,1,21,22,23,25,27,44,48,53],changelog:22,channel:56,channelurl:56,charact:[11,62,68],characterist:[38,39],charset:[31,68],check:[22,23,24,25,39,44,56,59,60,61,62,71]
 ,checkbox:61,checksum:[2,5],chicago:68,choic:44,choos:[16,36,37,41],chose:44,circl:[29,62],circumst:57,cite:15,citi:[11,31,68],clara:47,classpath:1,clean:[0,23,24,25,31],cli:23,click:[7,16,33,35,36,37,38,41,43,44,61,65,69,71],client:[9,11,13,14,15,16,21,22,23,25,26,29,31,32,33],client_credenti:[32,48,54],client_id:[32,34,48,53,54,56],client_secret:[32,34,48,53,54],climb:16,clone:[0,23,25],close:44,closer:16,cloud:[1,4,5,22,29,35,38,41,44],clue:23,cluster:[22,23,25],cluster_nam:[22,25],cn0wtdxxkxmqlgzvtmubcp20fulczq:54,code:[1,11,16,21,23,24,26,28,29,30,35,36,38,39,40,41,43,44],codesign:44,coffe:14,colleagu:62,colleciton:49,collect:[4,5,12],collection_nam:13,collectionid:48,color:[10,39],column:[14,16],com:[2,4,5,6,8,12,13,14,15,16,17,18,19,20,22,23,24,25,27,31,32,34,36,37,39,41,44,45,49,54,55,56,57,60,61,62,63,65,66,67,68,72],combin:[16,30,35,36,38,58,68],come:[21,22,23,25],comma:[12,22,36,49,56,60],comma_separated_list_of_permission_nam:56,command:[0,22,23,24,25,44,56,63,70],commen
 t:[29,39,62],commit:0,committ:46,common:[12,58,62,68],commonli:61,commun:[22,38,40,65],compani:[33,34,65],compar:[12,38],comparison:[10,61],compil:[44,53,54,58,59],complet:[12,21,23,26,27,29],completedsuccessfulli:[36,39],completemsg:48,completionhandl:36,complex:[15,16,21,29],compliant:29,complic:23,compon:[27,28,29,46],compris:22,compromis:53,concept:[14,70],config:[22,25],confim:48,confirm:[22,23,25,31,34,35,43,48,65],confirm_email:[31,34,48],conflict:65,conform:10,conjunct:[29,67],connect:[0,2,5,12,16],connected_collect:[17,18],connected_ent:[17,18],connecteeid:39,connectent:39,connectentitiesasync:39,connecting_collect:[17,18],connecting_ent:[17,18],connectorid:39,consid:[35,43,54,58,61],consider:[53,54,59],consoleappend:22,constrain:14,construct:[21,33,60,62],constructor:1,consult:70,consum:[29,62],contact:41,contain:10,containslook:11,containswil:11,content_typ:4,context:[1,29,39],contextu:29,continu:[11,26,41,65],contrast:[16,66],contribut:[21,28],contributo:21,contributor:4
 6,control:[22,29,38,41,55,58,61,68],conveni:[9,53,63,65],convent:27,conversionpattern:22,cooki:56,coordin:36,copi:[0,16,22,23,41,65],core:[22,24,25,29,44],cores:25,correct:[30,35,43,45,56,65],correctli:25,correl:[35,38,39,43],correspond:[12,13,15,27,39,41,44,48,49,72],cost:29,costli:16,could:[2,11,16,26,38,39,53,54,58,59,63,64,66,67],couldn:39,count:[7,8,12,13,14,15,22,48,49,62],counter_nam:[6,8],coupl:[28,38],cours:22,cpu:38,creat:[2,5],createact:21,createadminus:21,createcollect:49,createent:[21,26],createev:21,creategroup:21,createnotif:21,createorg:21,createus:21,creation:[45,48,55,64],credenti:[21,22,23,25],criteria:29,cross:62,css:[31,44,68],cumul:6,curiou:70,curl:[4,5,6,8,9,11,12,13,15,17,18,19,20,22,24,25,31,32,34],current:[6,13,20,27,30,35,39,48,60,62,68],custom:[9,13],custom_id:9,custompayload:36,d0d7d0ba:12,d16344f5a0e1:20,d20976ff:63,d28c:72,d503:[2,27],d7a8:[15,49],d86a:12,d878de4r:55,d87edec7:62,d9693ec3:62,da448955:62,da4a50dc:15,da67:68,da71:68,da83:62,dai:[7,8,55],d
 aili:8,dashboard:[35,56],data:1,databas:[11,14,16,20],datacli:[9,36,39,49,54,57],datastax:22,date:[10,36],dave:47,david:47,db1e60a0:[17,63,68],dbf5228024a7:[18,19],dbm:[11,12,14,16],dc5d478e9c029853fbd025bed0dc51f8:72,debug:[35,38,39,44],decim:10,declar:39,decompil:58,dedic:6,defin:[7,14,15,27,39,49,52,54,55,60,61,62,63,67,68,71],definit:[48,60],deflat:37,degre:[36,55],deleat:48,deleg:49,delet:[11,12],deletecollect:49,deleteent:49,delimit:[10,60,64],deliv:[29,36,41,44,48],deliveri:[29,36,48],denot:[63,66],depend:[22,37,39,40,63,64,72],deploi:21,deploy:21,deploywar:22,desc:11,descend:11,describ:[11,12,13,15,16,20,33,37,39,41,44,45,52,53,54,56,61,63,65,72],descript:[4,5,6,8,11,13,14,15,17,18,19,21,22,27,31,32,33,34,36,41,45,48,49,54,59,60,61,62],design:[14,16,20,23,29,30,44,62,63,64,65,67],desir:41,desktop:[37,41],destin:[1,36],destinationsingledevic:36,destroi:57,detail:[13,15,27,29,31,32,33,34,35,36,37,38,48,54,56,61,62,63,66,68,70],detect:[5,20],determin:[20,30,62,68],dev:[25,35,37
 ,38],develop:[10,20,21,22,27],devic:[5,18,19,20,21,27,29,35],device_id:36,deviceid:[36,39,48],deviceregistrationcallback:39,devicetoken:39,deviceuuid:39,dfr4d5m1mjmoeeogvpncm:55,diagram:[35,38],dialog:[31,41,44],did:15,didfailtoregisterforremotenotificationswitherror:39,didfinishlaunchingwithopt:39,didregisterforremotenotificationswithdevicetoken:39,differenti:29,dimens:67,diner:11,dino:[66,72],dir:0,direct:[0,16],directli:[0,32,41],directori:[0,22,23,24,25,44,46,56,65],disabl:[23,31,34,45,48,71],disk:41,displai:[8,11,20,44,45,48,56,61,62,64,65],displayemail:48,displayemailaddress:[31,34],displaymessag:39,displaynam:[31,34,48,62],dist:22,distanc:20,distance_in_met:20,distinctli:28,distribut:[14,16,58],div:[31,68],dk88fh4r:19,dlog4j:22,doctyp:[31,68],doe:[0,15,22,27,35,43,45,48,49,53,54,55,56,62,63,68,72],doesn:[14,16,35,39,43,44,71],dog:[15,26,63,64,66,72],dogcreatecallback:26,doge:[63,64],domain:[41,56],don:[22,23,35,38,40,44,58,62,68],done:[0,22,23,25,29,37,39,41,48,56,58,59,68],d
 ot:[6,10],doubl:[25,36,41],down:[10,22,28,36,39,41,61,69],download:[21,22],drive:[1,29],drop:[36,41,61,69],dropdown:69,dskiptest:[23,24,25],dtd:[31,68],due:[11,12,16,54],duplic:16,durat:[2,5,6,8,12,13,14,15,16,17,18,19,22,23,31,32,34,48,49,55,57,60,61,62,63,68,72],dure:[58,61],duti:61,e13743a7f1db7f4246badd6fd6ff54ff:68,e694:63,e7127751:63,e7d0:62,e8f5:[15,49],e94123890c7a:[15,49],e978:68,e97b:12,each:[0,6,7,8,10,12,13,14,15,16,20,22,27,31,35,36,38,41,45,48,49,50,56,59,61,62,63,68,71,72],earlier:[35,37,38,44],eas:29,easi:[0,29,67],easier:[9,11,12,16,35,58,63,66,71,72],easiest:61,easili:[6,20,27,29,58,67],east:23,easy_instal:0,eb20e5bce407:17,ebc6f49d1fc4:[15,49],ec2:22,ec39:72,edit:[0,1,21,22,23,41],edort1:31,ee912c4b:10,ef0b:[15,49],effb:[15,49],effect:29,effici:[12,16],either:[1,13,17,48,53,56,61],elastic_search_host:22,elasticsearch_cluster_nam:22,elasticsearch_host:22,elev:58,elimin:[29,53,58],els:[26,39,56],email:[12,22,23,24,25,27,31,34,38,41,45,48,54,62,63,65,68,72],email_add
 ress:[68,72],embed:25,embed_cod:47,employe:63,empti:[13,49,65],emul:[35,38],enabl:[20,23,29,35,38,39,40,41,44,45,56,58,61,62],enabledremotenotificationtyp:39,enabledtyp:39,enclos:[12,48],encod:[9,11,12,15,37],end:[8,21],end_tim:8,endpoint:[0,6,18,21,32,35],engag:[20,29],engin:22,enhanc:20,enough:[44,71],ensur:[10,16,22,29,35,36,38,41,44,52,54,58,72],enter:[31,36,37,41,44,56,61,65,68,69,71],entir:[11,36,48],entit:16,entiti:[0,2],entity_nam:15,entity_typ:[15,49],entity_uuid:15,entityid1:48,entityid2:48,entityid:[48,49,61],entityproperti:48,entitytyp:[31,34,48,61],entri:[11,36,56],environ:[37,44,58,70],equal:[10,12,39,55],equiv:[31,68],equival:10,err:[26,39,56],error:[6,21,22,25,26,34],errorcod:48,errormessag:48,escap:[36,49],essenti:[44,67],establish:[48,62,67],etag:[2,5],etc:[22,45],evalu:[10,23],even:[8,11,16,22,23,27,38,53,54,58,59,66],event:6,everi:[8,9,27,53,58,59,61,63,64,72],everyth:[0,22,72],exact:[20,67],exactli:11,examin:[8,58],exampl:[0,1],except:[15,35,39,43,53,58],exchang
 :41,execut:[9,11,12,25,26],exhaust:58,exist:[5,6,15,16,20,22,23,34,39,45,48,49,55,56,62,63],expect:[10,20,31,34,40,49,67],experi:[14,20,29,67],experiment:[52,71],expir:21,expires_in:[48,54],explain:[0,22,23,28],explan:26,explicit:41,explicitli:[39,53,57,61],expos:24,express:[10,11,22],extend:66,extens:65,extern:46,extract:[23,24,25,53,54,56,59],f18e8f6fb3bc:68,f315e5aa568a:[15,49],f322:49,f34f4222:[5,6,8,13,15,49,60,61,63,72],f399:62,f3a8061a:[15,49],f3aa:62,f3be262a:[15,49],f3teeg:32,f42752aa:49,f8zemolceecubwbqvsaaca:54,f_gubelxeecfrgbqvsaaca:54,facebook:[21,29],facebookaccesstoken:56,facebooktoken:56,factor:[22,23],fail:[35,36,39],failur:[14,48],fals:[10,22,23,25,31,34,48],famili:[14,20],familiar:[16,70],faq:23,far:69,fast:14,favorit:[25,38,39,68],favoritecolor:39,fb_access_token:[45,56],fbasynchinit:56,fbasyncinit:56,fc4d:62,fdd3:34,fe80:31,fe90:[31,34],featur:[16,20,21],feed:[5,12,18,19,21,29],feel:25,few:[11,20,35,40,65,67],ffd79647:62,field:[1,11,15,29,31,36,37,41,48,61],fiel
 dset:[31,68],file_loc:5,filenam:5,files:1,filter:[12,62,63,68],find:[0,11,20,22,23,28,35,39],fine:[25,29],finish:[35,38,48,65],first:[0,10,11,12,13,16,25,26,31,35,37,40,41,43,44,45,49,58,61,70,72],first_nam:72,firstnam:[11,12,45],fish:24,fit:59,five_minut:8,fix:[35,43],flash:38,flexibl:[14,16,21,27],flow:[56,68],fluffi:24,fobnszewobnioerabnoiawegbrn:[5,61],focu:[29,72],folder:1,folk:[21,22],follow:[0,2,4,5,6,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,33,35,36,37,38,39,41,43,44,45,48],foo9876a:68,foo:72,footprint:[38,40],forappl:39,force_refresh:25,ford:[18,19,66,67],forgot:68,fork:46,forkei:[36,49],form:[15,22,27,31,34,36,48,49],format:[0,2,12,13,14,15,20,21,22,27,41,46,49,53,54,56,59,60,62],fornotifi:39,fortun:8,forward:[35,37,38,39,56,63],found:[32,53,54],four:[54,59],foursquar:62,fragment:56,framebord:47,framework:[38,65],francisco:[20,31,63,64],fred:[11,63,66],free:[25,27,35],friend:[18,20,29,38,61,62],from:[0,4,9,11,12],full:[11,15,22,29,31,33,35,38,44,53,54,58,59,6
 1,66,71],fulli:[25,49,72],further:[26,33,39,45,53,56,58,72],furthest:[11,20],futur:[15,58],g9qgaaaurv_lfq7uu6ayhjjjn7qcrgovnvu:55,gain:[53,58],game:[7,38],ganyo:44,gatewai:41,gaufeolxeecfrgbqvsaaca:54,gcm:21,gcm_sender_id:44,gcmregistrar:39,gcmsenderid:39,gener:[0,6,7,21,24,25,27,30],geo:21,geocoordin:20,geograph:11,geoloc:11,get:[2,4,8,11,12,13,14,15],getapigeedeviceid:39,getclient:39,getcollect:49,getconnect:39,getdatacli:39,getent:49,getloggedinus:39,getregistrationid:39,getuniquedeviceid:[36,39],getuuid:39,ggkaaqmaggkabge5ffm1aqcadqaq_9ewr_ozeeguwxixowauaqcadqaqablaovoaeeguwxixowauaqa:62,ggkaaqmaggkabge5mlfh7gcadqaqjikhxefqeegw9hixowbregcadqaqjnep6ufqeegw9hixowbrega:62,ggkaaqmaggkabge5xc3r1gcadqaqz02yhp6qeegvybixoxisvgcadqaqz3soh_6qeegvybixoxisvga:34,ggkaaqmaggkabge5xc3r1gcadqaqz02yhp6qeegvybixoxisvgcadqaqz4zbyf6qeegvybixoxisvga:31,ggkaaqmaggkabge7pehcgwcadqaqvj9dljfzeekg9wloguza3acadqaqvkvrctfzeekg9wloguza3aa:62,git:[0,46],github:[21,23,28,44],give:[6,16,29,38,41,55,60,61,67,71
 ,72],given:[10,15,16,27,34,47,48,53,58,71],gladi:12,gmail:[25,31,62,68],goal:[11,30],goe:[22,23],gold:24,good:[0,22,28,58,71],googl:[21,29,31],gool:[35,43],got:[35,38],gotten:[22,35,38],govern:[52,54,59,63],grain:29,grant:[48,53,54,56,58,59,61,72],grant_typ:[24,32,48,54,55],granular:[6,8],graph:[21,29],graph_async:25,graph_us:25,gravatar:[12,62,63,68,72],great:[29,45,61,63,64],greater:[10,11,55],greatest:59,green:22,groovi:0,group:[5,10,12,14,15,18,19,21,27],group_path:36,groupid:48,groupnam:[62,63],grouppath:63,groupproperti:48,grunt:46,gte:10,guarante:26,guest:[39,53,58,61,62,68,71],guid:[9,21],guidanc:44,gzip:37,hacker:[53,54,58,59],had:36,half_hour:8,hand:16,handi:70,handl:[29,31,39,67],handlepushnotif:39,happen:[20,38],happi:[0,62],happy_cloud:5,hard:[1,59],hardwar:[35,38],hava:0,have:[0,12,14,15,16,19,22,25,27,32,34,35,36,37,38,39,44,45,48,54,55,56,58,59,61,62,63,64,65,67,68,70,72],haven:22,head:[31,68],header:[4,53],heap:22,heavi:38,hector:22,height:[47,48,62],hello:62,help:[
 7,11,14,22,25,27,29,52,54],her:[16,31,38],here:[2,12,16,20,22,23,24,25,27,28,38,46,56,62,63,65,68,72],hierarchi:[6,27,33,34,60,63],high:[14,16,36,38,39,40,52,55],higher:[24,59],highest:[33,34],highlight:16,hike:59,him:24,histori:36,hold:[5,49],home:20,homepag:6,host:[22,23,25,53,56],hostconfig:22,hostnam:[22,25],hotmail:34,hour:8,hous:16,howev:[8,11,12,13,15,25,26,27,35,38,44,45,56,58,61,62,65],href:[31,34,68],html4:[31,68],html5:[21,22,35],html:[0,31,41,44,48,56,65,68],htmldisplayemail:48,htmldisplayemailaddress:[31,34],http:[2,4,5,6,8,12,13,14,15,16,17,18,19,20,21,22,23],httpd:22,human:[31,68],hundr:11,hurrai:56,hystrix:25,icon:[41,62,65],idea:58,ident:[16,44],identif:[44,48],identifi:[9,16,27,31,37,39,41,45,49,68],ifram:47,illlustr:39,illustr:[14,35,36,38,39,52],imag:[2,4,5,14,29,35,38,44,48,62],imagemodel:21,imagin:[12,16,36,59],immedi:[29,36,61,68],immut:27,implement:[29,35,39,52,53,54,56,59,68,72],implicit:61,improv:[20,29],inact:[39,61],inbox:[45,62,64],includ:[6,11,12,14,15,
 16,22,27,29,31,35,36,37,38,39,44,48,49,53,54,55,56,58,61,63,68,69,70,71,72],incorpor:65,incorrect:[31,72],increas:[13,20,29],increment_valu:6,index:[0,10,11,15,22,25,27,44,65],index_prefix:25,indic:[22,48,55,62,63],individu:[15,27,55,59],ineffici:[11,12,16],inflat:16,info:[22,31,48],inform:[4,8,11,12,13,14,15,16,20,23,27,29,31,33,35,36,37,38,39,41,44,45,46,49,52,53,56,58,62,63,65,66,68,70,72],infrastructur:[27,29],ing:62,inher:58,init:[22,36,49,56],initi:9,initwithobject:49,initwithorganizationid:39,inner:16,input:[31,68],insecur:58,insert:56,insid:72,instal:[0,9,21,22],instanc:[22,23,24,27,39,49,54,57,65],instead:[16,29,54,58,59,72],instruct:[0,22,23,35,46,56,65,68],integ:[11,48],integr:[20,29,35,56,72],intend:21,intention:16,interact:[35,43],interest:[8,29],interfac:[23,65],intern:21,interpret:[60,72],intersect:10,intrins:72,introduc:29,introduct:40,invalid:[45,56],invok:[35,38,39],iphon:65,isloggedin:39,isn:[14,39,52,70,72],iso:[31,68],isregisteredonserv:39,issu:[0,2,21,22,23,32]
 ,item:[10,12,13,15,36,49,62,72],items:13,itself:16,jan:22,jane:68,jar:[24,44],java:[0,22,23,24],java_opt:22,javascript:[6,9,12,14,21,22,23,26,31,35],javscript:26,jdk:[22,23,24,25],jdoe57:27,jenni:16,jersei:30,jim:31,jin:47,jinm:31,job:61,joex:39,john:[27,54,62,63,68,72],johnson:47,join:16,jpeg:[2,4,5],jpg:[2,5,14,16],json:[10,12,14,15,16,19,22,24,27,31,32,36,37,49,56,62,63,67,72],json_arrai:15,json_object:15,just:[14,16,17,20,23,35,38,40,44,62,67,71,72],k88dh4f:18,kbundledsoundnamewithext:36,keep:[1,7,9,11,12,29,35,38,40,53,54,58,59,71],kei:[13,15,16,21,29,35,37,38,39,41,43],keychain:[41,44],keyspac:[23,25],keyword:15,kid:16,kind:[11,12,16],know:[8,22,38,41],knowledg:22,known:39,kravitz:12,kugclientresponsesuccess:39,label:31,lack:71,lag:26,languag:[10,14,15,72],larg:[0,10,11,62],last:[5,11,27,34,45,48],lastnam:[11,12,45],lat:36,latenc:26,later:[16,20,36,41],latest:[23,24,44],latitud:[11,20,36],latitude_coordin:20,launch:[8,22,35,38,39,41,43,44,58],launchopt:39,layer:24,layout:22,lc
 eecubwbqvsaaca:54,learn:[21,28,29,35,38],least:[22,23],leav:[23,41,61],left:[28,36,37,41,44,61,62,65,69],length:[2,5],less:[10,14,55,62],let:[8,22,24,29,36,38,61],letter:68,level:[6,8,14,15,21,22,24,27,29,32,33,34,35,36,39,44,52,53],leverag:[29,65],lib:[22,23,25,44],librari:[22,35,38,44],licens:22,lightweight:67,like:[0,2,5,8,10,14,16,17,18,19,22,23,25,26,29,31,35,36,38,45,56,58,60,61,62,64,65,66,67,68,71],liked_bi:66,limit:1,line:[0,16,22,23,24],linear:[14,23],linux:22,listen:38,live:[21,53],load:[24,56],localfilebinarystor:1,localhost:[22,23,24,25],localizeddescript:39,locat:5,log4:22,log4j:22,log:6,logger:22,login:[21,22],logincredenti:21,loginfacebook:56,loginus:39,logout:21,longer:[11,58],longitud:[11,20,36],longitude_coordin:20,look:[2,8,10,11,16,22,35,36,38,56,59,62,68],loos:[31,68],love:16,low:[38,40],lower:[6,10],lte:10,ltixndg0nduxndpvdjb0jwrevls1vcd0xvr3nwt0jrqq:11,lunch:38,mac:[35,38,41],machin:[22,41,44],made:[19,46,60,66,72],magic:16,mai:[0,6,9,10,13,15,22,27,36,37,39,
 44,48,57,58,61,63,71],mail:[23,25,27,63],mailer:[22,23,25],mailto:[31,34],main:[0,1,56],maintain:[16,56],make:[0,9,11,12,14,16,22,25,26,27,29,33,35,39,43,44,45,53,54,56,57,58,62,65,66,67,68,70,71,72],makefil:0,maker:14,malici:[52,53,54,59],manag:[5,11,12,21,22,23,24,25,27,28],managementappindexstatu:22,mandatori:[1,45,63,64,68],mani:[7,11,12,14,16,20,22,27,36,61,67,71],manual:[62,66],map:14,marginheight:47,marginwidth:47,market:38,massoddb:62,match:[11,15,22,25,35,43,44,49,60,68],matter:[29,35,38,44],mattress:14,maven:[0,23,24,25,46],max:25,maximum:[11,36,55],mayb:16,mean:[10,14,15,16,26,27,36,52,53,58,66,67,71],meant:62,meanwhil:26,measur:52,mechan:65,meet:23,member:[27,31,33,44,48,59,62,63,64],meme:[63,64],memori:[20,38],menu:[32,35,38,41,61,65,69],messag:[6,21,22,23,25,29,31],message:21,meta:[31,68],metadata:[2,4,5,6,10,12,13,14,15,16,17,18,19,20,21,31,34],metadataproperti:48,meter:[11,20,36],method:[6,8,11,15,19,21,26,31,32,33,34,35,38,39],mfdsadfdsaoabl:62,microsecond:22,middl:
 45,middlenam:45,might:[7,8,9,11,12,14,15,16,22,23,25,27,29,32,35,36,38,39,41,43,58,61,63,70],mile:20,milk:[13,15,49],million:29,millisecond:[27,48,55],mimic:30,mind:[1,9,11,12,16,20,35,38,71],minim:[16,22,23,25,30],minimum:[27,32,34],minu:16,minut:[8,29],mix:72,moab:62,mobil:[14,16,20,21,32,35,37,38,39],model:14,modern:[27,62],modif:[45,64],modifi:[2,5,6,12,13,14,15,16,17,18,19,20,27,31,34,44,45,48,49,55,61,62,63,64,68,72],modul:6,monitor:[22,29],month:[8,29],more:[4,6,8,9,11,12,13,14,15,16,20,21,22,23,27,28,29,34,35,36,37,38,39],morn:8,most:[8,11,16,25,26,27,28,29,32,58,62,66,67,68,70],mountain:59,move:[22,39,44],much:[10,14,16,58,65],multi:[15,22,49],multipl:[0,11],must:[0,10,15,16,22,24,25,27,34,36,37,38,39,41,44,48,49,53,55,61,62,63,65,66,68],mustach:0,mvn:[23,24,25],my_app:[14,16,45,56],my_org:[14,16,45,56],myadmin:24,myapp:[12,24],myasset:2,mycollect:10,myfirstorg:24,mygroup:[62,63],mynewapp:[63,68],mynewgroup:63,mynewpassword:31,myorg:[12,63],mypassword:24,myself:[16,23,25],m
 yuser:24,name:[1,2,4,5,6,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,27,31,32,34,35,36,37,38,39,41,43,44,45,48,49,53,55,56,58,60,61,62,63,64,65,68,69,71,72],nanoc:46,narrow:[10,61],nativ:[0,14,39,44],natur:[11,12],nav:[36,37,41],navig:[23,24,25,44],nearbi:20,nearest:[11,20],nearli:16,necessari:[16,29,35,38,39,44,61],need:[0,1,2,8,9,11,12,13,14,15,16,22,23,25,27,28,29,31,32,33,34,35,36,38,39,40,41,44,45,53,54,56,57,58,59,61,62,63,65,66,67,68,69,70,72],neg:6,nest:[15,27,49],net:[47,72],network:29,never:[21,32,53,54,55],new_password:[31,68],new_review_uuid:16,newdevicetoken:39,newent:49,newli:[41,48,60,62],neword:36,newpassword:[31,48,68],next:[10,11,13,21,22,24,25,38,41,44,65,69],nil:[39,49],node:[22,23,25,49,50,54,57,72],nodej:25,noisi:22,non:[14,16],none:61,normal:[4,15,16],nosql:[11,12,14],notat:[10,12,14],note__:68,notic:[5,16,19,22,56,62],notif:[20,21,22,23,25,27,28],notifc:48,notifi:[21,27,35],notificationid:48,notificationupd:21,notifier_nam:36,notifiernam:39,notify_sysadmin
 _of_new_admin_us:[22,23,25],notify_sysadmin_of_new_organ:[22,23,25],now:[22,23,24,25,36,38,44,56,65],nsarrai:49,nsdata:39,nsdictionari:[39,49],nserror:39,nsexcept:49,nslog:39,nsmutablearrai:49,nsmutabledictionari:[36,49],nsstring:[36,49],number:[6,7,11,12,13,14,22,27,29,35,38,41,43,44,48,58,61,62,68],number_of_replica:22,numebr:48,oauth:[21,29,45,52],ob5ko:55,object:[5,9,10,12,14,15,21,27,29,31,32,34,36,39],objectforkei:39,objectproperti:48,objecttyp:[31,34,48],objectuuid:48,obtain:[45,53,55,56,58],occur:[7,20,35,43],occurr:11,octal:10,off:[23,36,39,56],offer:[20,29,58,66,67,71,72],offici:[22,65],often:[8,10,16,27,29,62],old:[31,48,68],old_password:[31,68],oldpassword:[31,68],omit:12,onc:[0,11,16,22,23,25,26,35,37,38,41,43,44,56,58,61,68],onexcept:39,ongo:[29,62],onli:[5,9,11,12,16,22,23,25,26,27,32,48,52,53,54,55,58,59,60,62,63,66,68,69,71,72],onlin:62,onrespons:39,oop:56,opdata:49,open:[14,16,21,25],optim:[11,12,14,16],option:[5,9,22,23,25,27,39,44,49,53,56],order:[2,10],orderl:11
 ,org:[1,2,4,5,6,8,12,13,15,17,18,19,20,22,23,24,25,31,32,34,36,37,39,44,48],org_client_secret:54,org_clientid:54,org_id:[15,48,62,63,68],org_nam:[32,34,55,57],org_uuid:[32,34],organ:[0,2,4,5,6,8,12,13,14,15,16,17,18,19,21,22,23,24,25],organizationnam:55,organizations_require_activ:[22,23,25],orgid:48,orgnam:[9,39,44,48,54,56],orguuid:48,origin:[41,63],originali:64,oscar:24,otherwis:22,our:[0,9,10,11,12,23,24,25,28,36,46,49,67],out:11,outbox:62,outgo:[22,25],outlin:5,output:[22,39,56],over:[8,38,55],overrid:[25,39,55],overrideurl:22,overview:[11,12,21,27,29,36,37],overwritten:15,own:[7,22,29,36,48,56,60,62,63,64,68,71],owner:[2,34,48,62,63],p12:[35,37,38],p12certif:37,packag:[22,23,56,65],page:[22,24,31,36,37,41,54,56,70,71],pair:[13,15,36,49],pane:[44,61],param:[2,5,6,8,12,13,14,15,16,17,18,19,39,49,55,60,61,62,63,68,72],paramet:[4,5,6,8,9],parenthes:10,pars:56,part:[9,11,12,16,20,22,36,41,72],parti:22,partial:[11,27],particular:[10,16,36,62],particularli:[14,16,60,62,66],partit:70,
 pass:[11,32,39],passiv:67,password:[21,22,23,24,25],path:[2,5,6,12,13,14,15,16,17,18,19,20,21,22,23,25,31,34,35,36,43,44,48,49,56],path_to_imag:16,pathnam:56,pattern:[39,48,60],patternlayout:22,payload:[36,44,48],peak:8,peopl:[7,27,62,63,64,65],per:[13,14,56,61],perceiv:26,perform:[4,5,13,14,16,18,22,26,29,31,33,35,45,53,54,59,60,62,64,68],period:[7,8,20,61],permiss:[5,12,18,19,21],persist:[24,25,72],person:[16,20,22,28,31,34,41,65],perspect:27,pertin:33,pet:24,phone:12,phone_numb:12,phone_typ:36,phonegap:21,photo:[20,67],physic:20,pictur:[4,5,12,20,45,48,63,68,72],pinterest:62,pip:0,place:[14,15,16,22,23,27,28,49,54,68],plai:[7,38,70],plain:4,plan:16,platform:[29,35,36,37,38,39,40,41,44],pleas:[10,31,36,53,55,61,66],plenti:0,plu:22,plug:[35,39,44],plugin:[39,44],plural:[13,15,27,48],png:16,point:[10,11,14,20,22,25,26,29,30,56,65],polici:58,pop:65,popul:[63,65,67],popular:[29,65],popup:61,port:[22,23,24,25],portal:21,portion:[36,48],pose:55,posit:[11,20],possibl:[16,35,38,39,43,58,6
 6],post:[2,5,6,7,13,15,16,17,18,21,24,31,32,33,34,36,37,39,44,48],postal:11,potenti:11,power:[20,24,27,29,47,54,59,66],practic:[11,12],precis:62,predefin:27,prefer:[11,23,35,72],prefix:32,prepar:58,prerequsit:21,present:[16,21],preserv:63,press:[35,43,44],prettyprint:22,prevent:[11,12],preview:0,previou:[41,62,65],previous:65,price:[10,13,15,49],primari:[16,45],prior:58,privaci:62,privat:29,privileg:34,probabali:22,probabl:[0,16,22,23,26,28],problem:25,process:[24,27,31,38,39,48,67],product:[14,16,21,22,23,27,36,37,41,52],product_uuid:[14,16],productid:16,productimag:16,productnam:16,productuuid:16,profil:[20,29,35,38],program:26,programat:69,programmat:[21,32],progress:36,project:[0,24,28,30,33,34,35,38,41,43,44,46,65],prompt:[23,44,56],prone:62,proof:[31,68],prop:49,proper:44,properit:20,properli:[24,26],properti:[1,4,5,6,9,10,11],properties____:23,property_1:[13,15],property_2:[13,15],property_nam:11,props1:49,props2:49,propti:31,protect:[52,54],protocol:[22,23,25,56,58],prototyp
 :56,provid:[6,8,11,13,14,15,20,22,25,27,29,31,32,34,36,37,38,39,41,44,45,48,49,50,53,54,56,58,59,61,62,63,65,68,69,72],provis:[35,38],proxim:[11,20],pull:[38,39],pure:72,purpos:[10,22,23,27,32,61,67,71],push:[0,20,21,28],pushalert:36,pushapp:41,pushnotif:39,pushtest:44,pushtest_dev:37,put:[5,12,13,15],pw123:23,pwhere:25,python:0,qualifi:72,quantiti:10,query_stat:12,query_str:[63,68],querystat:48,querystr:49,queue:[36,48],queuedepth:22,quicker:72,quickli:[11,12,16,27,29,67],quiet:22,quitwait:[23,25],quot:[12,36,48,49],radiu:36,raleigh:47,rang:8,rate:16,rather:[5,16,17,18,29,39,41],raw:0,rawrespons:[36,39],rdbm:[14,16],reach:[10,21,38],reactiv:21,read:[9,11,12,14,16,40,48,62,70],read_phone_st:44,readabl:16,readi:[11,22,25,65,70],readm:[0,28,35,39,46],real:48,reason:[38,63],recaptcha:[31,68],recaptcha_challeng:48,recaptcha_challenge_field:31,recaptcha_respons:48,recaptcha_response_field:31,recaptchaopt:31,receipt:[21,27],receiptid:48,receiv:[11,26,35,38,39,40,41,45,48,64,65,68],reciev:
 48,reciproc:66,recommend:[22,23,49,58],record:[27,29],recreat:[35,43],recurs:60,redefin:61,redirect:[22,23,25,44,56],redirect_root:[22,23,25],redirect_uri:56,reduc:[12,16],redund:16,regard:[6,27],regardless:15,regid:39,regionnam:1,regist:[21,29,35,37,38],registerdevic:39,registerdeviceforpushasync:39,registerforremotenotificationtyp:[35,38,39],registerpush:39,registerwithpushprovid:39,regularli:38,rel:[31,68],relat:[5,14],relationship:[16,17,18,19],releas:22,relev:[20,29,56,58,67],reli:16,rememb:[10,36,41,56,65],remind:16,remot:[20,39],remov:[21,23,31],removeent:49,renam:[22,27],repeat:65,replac:[1,16,44,56,65],replic:[22,23],replica:22,replication_factor:[23,25],repo:[23,25,28,46],report:[7,22],reposloc:1,repres:[11,14,27,29,31,34,35,37,39,48,59,60,62,63,68,69,72],represent:[11,15,27,72],request:2,requir:[0,6,13,17,18,20,21,22],resend:36,reserv:27,resetpw:[21,22,23,25,31],resetpwmsg:21,resolut:8,resourc:[0,1,21],resource_path:60,respect:53,respond:[35,43],respons:2,response_typ:56,
 restart:22,restaur:[11,20,38],restkit:65,restrict:[58,61],restructuredtext:0,result:[10,11,13],retri:36,revers:41,review_entity_json:16,review_uuid:16,reviewed_product_uuid:16,reviewedbi:16,reviewedin:16,revok:21,revoketoken:57,rich:[29,67],right:[16,22,26,38,61,62,65,67,72],rigid:27,risk:55,rock:10,rockadero:20,rocki:59,role:[5,10,12,18,19,21,27],roleid:48,rolenam:[5,12,18,19,45,48,61,63,64,68,72],roleproperti:48,roll:22,root:0,rootlogg:22,rout:[29,62],row:14,rpc:22,rubi:[49,50,72],rule:[10,52,54,58,59,60,61,63,68,71],run:[0,7,21,22],safe:59,sai:[8,53,54,62],sake:25,sale:38,same:[5,6,11,16,18,19,20,22,27,29,35,36,39,43,44,48,59,61,62,63,64,65],sampl:21,san:[20,31,63,64],sandbox:[5,15,21,27,34,35,36,39,44,45,48,49,52,53,56],santa:47,save:[5,15],scalabl:[14,16,23],scale:[16,22],scatter:16,scene:[45,56],schedul:[21,35],schema:[14,27,48,61],scope:[16,24,54,56,59],screen:[44,47,69],script:[0,22,31,59,68],scroll:47,sdk:[6,9,14,15,21,22],search:[8,11,22,29],second:[6,26,31,36,55,61,65],se
 condari:16,secret:[21,32,48],secretkei:1,section:[32,35,36,41,44,48,53,54,63,65,68,72],secur:[21,22,29,41,44],see:[2,4,8,9,10,11,12,13,14,15,19,20,22,23,24,25,27,29,31,32,33,34,35,36,37,38,39],seek:22,seen:62,segment:60,select:[10,11,12,16,36,37,41,44,61,63,65,68,69,71,72],self:[36,39,56],send:[1,4,9,11,12,19,20,21,24,29,31,34],sender:[35,38,41,43],senderid:44,sendmyselfapushnotif:36,sens:[16,29],sensit:[52,71],sent:[9,12,21,31,32,34],separ:[6,12,16,22,27,35,36,37,38,39,41,46,49,56,61],seri:[0,22],serv:[22,58,59,61],server:[11,22,23,26,29,32],servic:[1,12,20,21,22,24,29,31,33,34,35,36,37,38,39],servlet:22,session:[56,58],set:[0,4,5,6,8,11,12],setapiurl:39,setapplicationid:39,setdevicepushtoken:39,setenv:22,setlog:39,setobject:49,setorganizationid:39,settoken:56,setup:21,setvalu:36,sever:[1,72],share:[22,24,34,62,67],sharedappl:49,she:38,shell:[22,70],shoot:22,shorthand:11,should:[0,2,11,12,15,16,17,18,22,23,25,28,35,36,37,38,39,41,44,46,48,49,52,53,54,55,58,59,61,65,70,71],show:[12,
 13,16,35,36,49,61,65],shown:[9,10,11,12,13,15,19,22,31,35,36,38,43,44,53,56,62,63,68],side:[28,29,32,53,54,56,58,59,65],sidebar:61,sign:[21,22,23,25,27,29],similar:[16,41,62,65],simpl:[0,14,16,23,27,29,35,65,67,71],simplest:22,simplestrategi:[23,25],simpli:[13,19,29,61,62,65,72],simplifi:[16,29],simultan:36,sinc:[10,11,26,53,59],singl:[8,12,14,15,16,22,23,27,29],singular:27,site:[37,41,46],six_dai:8,size:[10,22],skill:22,skim:[15,49],sku:[14,15,49],slash:[63,64],slate:61,slideshar:47,slideshow:47,slightli:14,slower:10,small:23,smith:11,smtp:[23,25],snippet:56,social:[20,21],softwar:[22,25],sojre5ywlkq7jrdcka:54,solid:47,solut:27,solv:29,some:[0,1,7,9,11,16,22,24,25,26,27,58,61,62,63,65,72],somegroup:63,someon:[8,36,61],somepassword:[23,55],somesubgroup:63,someth:[2,16,22,23],sometim:[0,14,35,43],someus:[23,55,57,61,63,68,72],soon:21,sort:[11,20,72],sound:[36,39],sourc:[0,14,16,21,22],space:16,span:[8,16],sparingli:59,special:[0,20,38,60,61,66],specif:[7,10,11,14,15,16,19,27,29,35,36
 ,37,38,39,44,48,49,53,57,59,60,61,62,63,68,72],specifi:[6,11,12,13,15,17,18,19,20,22,23,33,34,36,37,39,48,49,53,54,55,60,62,63,65,68,72],split:8,sql:[10,16,29],squar:15,src:[0,1,31,44,47,68],ssl:[35,38],stack:[1,21],stage:25,standalon:24,standard:[20,22,39,44,58,59,68,72],standardengin:22,start:[8,11,12,14,16,21],start_tim:8,startintern:22,startup:[22,24],state:[31,39,48,56,72],statement:[12,26,48],statist:7,statu:[12,22,23,24,25,30,31,34,39,48,56,67],stdout:22,step:21,steventraut:[63,68],still:[35,43,58,70],stock:[13,15,23,38,49],stop:[11,36],store:[1,5,10,11,12],str:62,strateg:16,strategi:[23,25],stream:20,streamlin:[16,65],string:[9,10,11,12,13,15,16,27,31,32,34,36,39,45,48,49,53,56,62,63,64],stringifi:56,strong:31,stronger:20,structur:[16,24,33,66,72],struggl:62,style:[29,31,47,52,62,65,68],stylesheet:[31,68],sub_properti:15,subgroup:63,submit:[11,12,31,36,41,46,60,68],subproperti:49,subproperty1:49,subproperty2:49,subscrib:[62,63,64],subscript:[63,64,66],subsequ:[45,48,53,54,56
 ],subset:[13,16,36],substitut:62,subtract:10,succe:[45,56,60],succeed:39,success:[22,23,26,44,48,49,58],successfulli:[35,43],sudo:0,suffix:41,suggest:[20,71],suit:[54,59,61],summit:47,sungju:47,super_user_email:22,super_user_password:22,superadmin:23,superus:[22,23,25],suppli:[31,34,48,54],support:[0,8,10,14,16,20,21,22,23,26,27,29,32],suppos:15,supprt:44,sure:[22,25,35,38,43,44,52,58,65,69,71],swagger:[0,30],symbol:68,sync:21,synchron:21,sysadmin:[22,23,25],system:[0,14,22,23,25,27,39,41,45,46,48,55,62,63,65,68],tab:[35,37,38,44,61],tabbi:10,tag:[39,48,56],tail:22,take:[6,11,16,25,26,29,41,52,54,58],taken:[20,39,56],tale:[10,11],talk:[25,47,58,65],tap:44,tar:[22,56],target:[0,21,23,24,25,29,35],task:61,team:[33,34,44,65],technic:56,techniqu:[11,16],technolog:44,tell:[22,35,38],temp:1,templat:[0,22,44],temporari:1,tempt:[16,41],tend:[63,64],termin:44,test12345:[31,34],test1234:68,test123:[31,34],test:[5,11,22,23,25,34,35,38,44,58,59,63,65,71],test_admin_user_email:22,test_admin_user
 _password:22,testadmin:54,testadminpw:54,testapp1:[32,34],testapp2:34,tester123:34,tester:48,testorg:[32,34],testpw:54,text:[4,10,11,29,31,36,62,65,68],text_field:31,than:[0,5,6,8,10,11,12,13,16,17,18,23,29,39,41,44,55,58],thank:29,thei:[0,10,11,12,15,16,20,27,34,38,39,40,52,53,54,58,59,61,62,63,64,68],them:[0,6,9,10,11,12,16,22,29,35,36,38,39,44,54,56,59,61,62,71,72],theme:[16,31],themselv:68,thereaft:52,thereof:36,thi:[0,1,2,6,8,9,10,11,12,13,14,15,16,20,22,23,24,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,43,44,45,48,49,52,53,54,55,56,57,58,59,61,62,63,64,65,66,67,68,69,70,72],thing:[7,10,22,28,35,38,40,47,52,63,64,68,70,71],think:62,those:[11,16,22,25,38,39,44,52,53,54,58,59,62,68],though:[10,11,16,36,41,48],thousand:14,threadpool:25,three:[6,11,22,23,25,35,59,61,65],through:[14,16,29,32,33,34,39,41,45,48,52,56,58,59,62,63,68,69],thumb:71,tier:24,time:[6,7],timeout:25,timer:22,timestamp:[2,5,6,8,10,12,13,14,15,16,17,18,19,22,23,27,31,32,34,36,45,48,49,55,57,60,61,62,63,64,68,72
 ],timinglogg:22,tip:[36,37,39,44],titl:[10,11,16,31,34,36,39,48,61,63,64,68],tld:[22,23,25],tmp:1,toctre:0,todai:20,togeth:[0,59],token:[9,13,15,21,24,31,32,33,34,35,36,38,39,45],token_to_revok:57,tom:60,tomcat7:22,too:0,tool:[9,11,12,21,29],top:[24,35,36,44,56,65,69],topic:[11,28,36,49,50,54,63,64,68],topolog:23,tostr:39,track:[6,7,45],trail:59,transactionst:39,transfer:72,transform:0,transit:[31,68],transport:[23,25],treat:[15,21],trend:29,tri:22,trial:72,troubl:22,troubleshoot:21,truli:29,trust:41,tsefia:31,ttl:21,ttl_in_millisecond:55,tupl:14,turn:[36,38,56],tutori:21,tweet:[29,62],twitter:[29,62,65],two:[10,11,12,24,26,27,31,37,39,49,53,65,66,67],type:[2,4,5,6],typic:[10,27,68,72],udpat:0,uffff:10,uiapplic:[39,49],uiapplicationlaunchoptionsremotenotificationkei:39,uiremotenotificationtyp:39,uiremotenotificationtypealert:39,uiremotenotificationtypesound:39,unauthent:61,under:[23,36,41,44,54,57,58,61,65,71],underli:[14,39],understand:[27,44],unencod:[9,11,12],unexpect:48,unfamili
 ar:14,unfortun:0,unicod:10,uninstal:[35,43],union:10,uniqu:[15,27,37,39,41,45,48,56,63,64,65,68],unit:22,univers:27,unix:[6,22,36,45,48,64],unix_timestamp:36,unless:[0,36,45,53,56,59,65],unlik:[14,15,27],unlock:[35,43],unnecesari:58,unregist:61,unreleas:25,unsecur:58,unsent:21,until:[26,35,43,48,61],untrust:58,untrustworthi:21,unus:61,upcom:20,updatecollect:49,updatedent:49,updateent:49,upon:72,uptim:22,upward:6,uri:[2,5,6,8,9,12,13,14,15,16,17,18,19],url:[9,11,12,13,15,16,19,21,22,23,25,33],usag:8,usegrid:22,user:[5,7,10,11,12,13,15,16,17,18,19,20,21,22],user_uuid:16,user_uuid_or_usernam:57,usergrid_appl:25,usergrid_cluster_nam:22,usergriddatacli:[54,57],usergridsdk:56,userid:48,userinfo:39,usernam:[11,12,15,17,18,19,22,23,24,25,27,31,34,35,36,39,44,45,48,52,54,55,58,59,60,61,62,63,65,66,68,72],username_or_email:68,useruuid:39,usingnotifi:36,usr:22,usual:23,utc:[27,48],util:[24,27,29],uuid:[2,4,5,6,10,12,13,14,15,16,17,18,19,20,27,31,32,34,36,39,45,48,49,55,56,60,61,62,63,64,68,72]
 ,uuid_for_selected_review:16,vagrant:22,vagrantfil:22,val:56,valid:[1,13,15,22,27,31,32,34,36,37,44,45,53,55,56,58,60,61,62,63,64,68],valu:[1,6,8,10,11],valuabl:29,value_1:[13,15],value_2:[13,15],vari:8,variabl:[22,39,60],variei:22,varieti:[15,33,49,68,72],variety_1:49,variety_2:49,variety_3:49,variety_list:49,variou:[36,58],verb:[16,31,34,48,62],veri:[0,11,12,27,53,62,70],verifi:[37,41,44,52],version:[22,23,25,35,36,41,43,44,65],versu:62,via:[0,21,22,23,27,31,34,36,41],vibrat:44,video:[5,21,29,35,40],view:[8,16,22,23,25,35,36,38,41,44,59],virtual:[22,35,38],visit:[23,35,38,41],visitor:59,w3c:[31,68],wai:[6,11,12,14],wait:[11,26,35,39,43],walkthrough:[35,38,44],wall:62,want:[0,1,5,6,11],warn:[22,36,53,54,59,61,71],watch:[22,23,35],weakself:36,web:[12,14,16,22,23,24,32,35,37,38,41,44,45,46,54,56,58,59,67],webapp:[22,23,24],week:8,welcom:[22,23,25],well:[20,22,23,29,35,38,44,57,58,62,65,66,67,68,72],went:23,were:[11,12,20,44,63,64],what:[16,20,21,22,23,27,29,35,36],whatev:71,whatsoev:
 52,when:[0,5,9,10,11,12,15,16,17,20,21,22,23,25,26,27,29],whenev:56,where:[0,2,10,11,12,16,20,22,25,27,35,36,41,44,45,56,58,62,68,70,71,72],wherev:22,whether:[37,45,48,53,67],which:[0,8,11,13,14,15,16,18,22,23,26,27,31,33,35,36,37,38,39,41,43,44,45,48,52,53,54,55,56,58,59,60,62,63,64,66,68,69],who:[16,28,29,48,52,54,58,61,62],whole:[15,48,49],whose:[11,12,19,35,38,39,43,61,68,72],why:23,wide:[59,68],width:[47,48,62],wildcard:[11,60],window:[22,39,41,44,56,65,70],wireless:20,wish:[13,22,27,36,68],within:[6,11,15,20,23,27,34,36,48,55,59,62,65],without:[11,25,53,61,68],won:[35,38,44,62],word:[11,13,14,15,16,35,38,62],work:[0,11,12,14,16,20,21,22,23,25,26,28,29,37],world:62,would:[4,8,9,11,16,19,20,22,23,31,53,55,56,58,59,60,62,63,64,66,68],wouldn:16,write:[14,16,52,65],written:[0,14,16,23,28,35,46],wrong:23,wrote:16,www:[12,31,44,47,56,62,63,68,72],xcode:[35,38,44],xcodeproj:44,xfbml:56,xml:[1,44],xput:22,yaml:0,yea:44,year:62,yellow:22,yet:[11,35,38,48,63],yhixpqk1cq:32,yml:25,you:[0,
 1,2,4,5,6,7,8,9,10,11,12,13,14,15],your:[0,1,4,5,6,7,8,9,10,11],your_app_id:56,your_domain:56,your_redirect_url:56,your_response_typ:56,your_state_valu:56,yourapp:9,yourappnam:56,yourdomain:72,yourorg:9,yourorgnam:56,yourself:[35,43,44],ywmt4nqe8q9geelyjhixpsio4aaaato5fqfcg0ced2h9nwmdmrorknnreeqydof:31,ywmtfeewemyneektbnx3o4pu0qaaat8vzk3xz3utvzat0cosiym75c2qpigt79c:37,ywq6aaabmqz_xuyyeerokkjnzn7yqxxlpgml69fvaa:54,yxa65gylqja8ayysay8ox3vg5arzp48:32,yxa6aaabmq0d4mep_ugbza0:54,yxa7ygil:32,yxb7nad7em0meej989xixprxekq:54,yxb7nautv9krhhmr8ycw0qbozh2pxef:54,yxu6aaabmq0hdy4:54,zero:22,zip:56},titles:["Apache Usergrid Documentation","File storage configuration","Folders","&lt;no title&gt;","Retrieving assets","Uploading assets","Creating &amp; incrementing counters","Counters &amp; events","Retrieving counters","Advanced query usage","Query operators &amp; data types","Query parameters &amp; clauses","Querying your data","Collections","The Usergrid Data Store","Entities","Data Store Best Pra
 ctices","Connecting entities","Disconnecting entities","Retrieving connections","Geolocating your Entities","Apache Usergrid Documentation","Usergrid 2.1.0 Deployment Guide","Usegrid 1: Deploying to Tomcat","Usegrid 1: Launcher Quick-start","Usergrid 2: Deploy to Tomcat","Async vs. sync calls","Usergrid Data model","Getting Started","Usergrid Features","jersey2skeleton","Admin user","Application","Organization &amp; application management","Organization","Adding push notifications support","Creating and managing notifications","Creating notifiers","Getting started with push notifications","Managing users and devices","Push notifications overview","Registering with a notification service","COMING IN USERGRID 2","Troubleshooting","Tutorial: Push notifications sample app","Users &amp; Devices","How to Contribute Code &amp; Docs","Presentations &amp; Videos","Methods","Usergrid iOS SDK","Usergrid SDK Documentation outline","COMING SOON...","Security &amp; token authentication","Authenti
 cating API requests","Authenticating users &amp; app clients","Changing token expiration (time-to-live)","Facebook sign in","Revoking tokens (logout)","Security best practices","Authentication levels","Using permissions","Using roles","Activity","Working with group data","Groups","App Example - Messagee","Social Graph Connections","User management &amp; social graph","Working with User Data","Creating a new application","Creating a Usergrid Account","Using a Sandbox Application","Using the API"],titleterms:{"default":[27,55,58,61],"new":[69,71],"return":68,"super":23,about:44,access:[48,53,58,72],accesstokenrespons:48,account:[65,70],acquir:58,action:48,activ:[29,31,34,48,49,50,62,67],activityfe:48,add:[22,23,56],addit:[22,44],addrol:48,admin:[31,34,36,37,48,49,50,54,57,59,61],advanc:9,all:[9,19,36],android:[35,38,39,43,44,65],apach:[0,21,47],api:[0,9,24,44,53,72],apn:[35,38,41],app:[20,35,40,41,43,44,47,48,49,50,54,56,58,65],appdata:48,appl:[35,37,38,41],applic:[27,28,29,32,33,34,4
 8,49,50,54,69,71],asset:[2,4,5,29],assign:[49,50,60,61],async:26,asynchron:26,attach:9,audienc:22,authent:[29,49,50,52,53,54,59,72],backend:47,base:72,basic:12,batch:13,befor:44,begin:44,best:[16,58],between:0,build:[0,23,24,25,40,46,47,49,50],call:[9,26],can:40,cancel:36,cassandra:[22,23,47],certif:[41,44],chang:[55,68],claus:11,client:[34,40,49,50,53,54,58,65],code:46,collect:[13,27,48,49,50,64,72],come:[42,51],complet:31,complex:60,comput:16,configur:[1,22,23,44,59],connect:[17,19,35,39,49,50,66,67],consol:23,construct:72,contain:11,content:0,contribut:[46,47],contributo:28,counter:[6,7,8,49,50],creat:[6,13,15,31,32,34,36,37,40,41,44,49,50,55,56,61,62,63,65,66,68,69,70,71],createact:48,createadminus:48,createent:48,createev:48,creategroup:48,createnotif:48,createorg:48,createus:48,credenti:[32,34,48,49,50],curl:[36,39],cursor:11,custom:[15,23,49,50],data:[4,10,12,14,15,16,20,27,29,44,49,50,63,68],databas:[22,23],deal:0,decrement:6,delet:[13,15,36,49,50,63,68],denorm:16,deploi:[22
 ,23,25],deploy:[22,25,28],descript:63,dev:44,develop:28,devic:[36,39,40,45,48],dialog:56,differ:0,directli:44,disconnect:[18,49,50],displai:68,doc:[0,46],document:[0,21,46,50],download2:24,download:[23,24,44],edit:58,elasticsearch:22,emul:43,end:22,endpoint:[36,37],enrich:20,entiti:[4,13,15,17,18,19,20,27,29,44,48,49,50,72],error:[35,43,48],event:[7,48,49,50],exampl:[4,5,6,8,13,15,22,23,25,31,32,34,49,50,54,55,56,57,60,61,62,63,65,68],expir:[36,55],facebook:[45,56],fail:43,featur:29,feed:[31,34,49,50,62,67],file:[0,1,22,23,25,29],find:40,flexibl:29,folder:2,folk:28,follow:[49,50,62,66],form:68,format:72,from:[13,34,35,43,49,50,63],gcm:[35,38,41],gener:[32,34,41,44,49,50,64],geoloc:[20,29],get:[16,22,23,24,28,31,32,34,36,38,40,49,50,68],github:46,googl:[35,37,38,41],graph:[66,67],group:[29,36,48,49,50,62,63,64,67],guid:22,handl:68,hierarch:6,how:[0,35,38,46,47],html5:[39,65],http:[24,58,72],imagemodel:48,increment:[6,49,50],initi:[22,31],instal:[23,43,49,50],intend:22,intern:47,inter
 v:[8,49,50],invalid_send:[35,43],invok:56,issu:72,itself:25,java:25,javascript:[39,56,65],jersey2skeleton:30,kei:44,launcher:24,learn:40,let:68,level:[54,59],limit:11,link:2,list:2,live:55,local:[1,25],locat:[11,20,36],log:22,login:[23,29,49,50,54,56],logincredenti:48,logout:[49,50,57],manag:[29,33,36,39,40,49,50,67],markdown:0,messag:[35,36,43],message:65,metadata:48,method:[48,72],mismatchsenderid:[35,43],mobil:[47,58],model:[16,27,48],more:[40,44],multipl:[12,15,36,49,50],never:58,next:70,note:0,notif:[29,35,36,38,40,41,44,48],notifi:[36,37,40,44],notificast:36,notificationupd:48,oauth:[56,72],object:48,open:[28,47],oper:[10,28],order:11,org:[49,50],organ:[27,33,34,48,49,50,54],other:[0,44,49,50,66],out:16,outlin:50,overview:[38,40,47],p12:41,paramet:[11,36,63],parti:29,password:[31,49,50,68],path:60,permiss:[29,48,49,50,58,60],phonegap:[35,38,39,43,44],piec:35,portal:[22,25,36,37,61],post:[49,50,62],practic:[16,58],pre:16,preced:10,prerequisit:[0,38,40],prerequsit:22,present:47,
 product:58,profil:44,programmat:37,properti:[12,15,22,23,25,27,45,49,50,64],provis:44,publish:0,push:[29,35,38,40,43,44],put:16,queri:[9,10,11,12,16,20,29,49,50,72],quick:24,reach:40,reactiv:[31,34,49,50],receipt:[36,48],refer:[0,49,50],regist:[39,40,41,44],registr:29,relat:16,relationship:[29,45],relationshop:45,remov:[34,49,50,60,61,63],request:[4,5,6,8,12,13,15,17,18,19,31,32,34,36,53,54,55,57,60,61,62,63,68,72],requir:[23,24,25,35,37],reset:[6,31,49,50,68],resetpw:48,resetpwmsg:48,resourc:22,respons:[5,6,8,12,13,15,31,32,34,54,55,60,61,62,63,68,72],rest:[0,68],result:16,retriev:[2,4,8,12,13,15,16,19,34,49,50,62,63,68],review:[16,44,58],revok:[49,50,57],role:[29,48,49,50,58,61],root:22,rst:0,run:[23,24,25,44],sampl:[35,44],sandbox:[58,71],save:20,schedul:36,sdk:[25,49,50,54,56,65,72],secret:53,secur:[52,58,69,71],see:40,send:[35,40,43,44],sent:36,server:[35,43],servic:[41,44],set:[13,31,35,36,40,45,48,49,50,64],setup:[22,23,38,44,56],sign:[41,45,56],singl:36,social:[29,66,67],soo
 n:51,sourc:[28,47,49,50],sphinx:0,ssl:41,stack:[22,25],start:[22,23,24,28,38,40,49,50],step:[22,44,56,65,68,70],storag:[1,29],store:[14,16],stream:29,sub:[15,48,49,50],support:[35,40,72],sync:26,synchron:26,syntax:[4,5,6,8,12,13,15,17,18,19,54,55,57,60,61,63,68],tabl:0,target:36,third:29,time:[8,49,50,55],token:[48,49,50,52,53,55,57,58],tomcat:[22,23,25],tool:44,treat:58,tri:[35,43],troubleshoot:[35,40,43],ttl:55,tutori:[35,40,44],type:[10,19,48],unsent:36,untrustworthi:58,updat:[0,5,13,15,31,49,50,68],upload:5,uri:[31,32,34,62,63,68],url:[34,72],usag:[9,12],usegrid:[23,24],user:[23,29,31,34,36,39,40,45,48,49,50,54,57,59,62,63,65,67,68],usergrid:[0,14,21,22,23,25,27,29,42,44,46,47,49,50,65,68,70],valu:12,via:[44,46],video:47,wai:[16,58],want:16,war:[22,23],websit:[0,46],what:[38,40,71],when:[35,43,55],work:[38,43,49,50,63,68],you:[16,40,44],your:[12,16,20,35,40,43,49,50,58]}})
\ No newline at end of file
+Search.setIndex({envversion:46,filenames:["README","assets-and-files/file-storage-configuration","assets-and-files/folders","assets-and-files/legacy-asset-support","assets-and-files/retrieving-assets","assets-and-files/uploading-assets","counters-and-events/creating-and-incrementing-counters","counters-and-events/events-and-counters","counters-and-events/retrieving-counters","data-queries/advanced-query-usage","data-queries/operators-and-types","data-queries/query-parameters","data-queries/querying-your-data","data-storage/collections","data-storage/data-store-dbms","data-storage/entities","data-storage/optimizing-access","entity-connections/connecting-entities","entity-connections/disconnecting-entities","entity-connections/retrieving-entities","geolocation/geolocation","index","installation/deployment-guide","installation/ug1-deploy-to-tomcat","installation/ug1-launcher-quick-start","installation/ug2-deploy-to-tomcat","introduction/async-vs-sync","introduction/data-model","introdu
 ction/overview","introduction/usergrid-features","jersey2skeleton/README","orgs-and-apps/admin-user","orgs-and-apps/application","orgs-and-apps/managing","orgs-and-apps/organization","push-notifications/adding-push-support","push-notifications/creating-and-managing-notifications","push-notifications/creating-notifiers","push-notifications/getting-started","push-notifications/managing-users-and-devices","push-notifications/overview","push-notifications/registering","push-notifications/tbd","push-notifications/troubleshooting","push-notifications/tutorial","push-notifications/users-devices","reference/contribute-code","reference/presos-and-videos","rest-endpoints/api-docs","sdks/ios-new","sdks/sdk-outline","sdks/tbd","security-and-auth/app-security","security-and-auth/authenticating-api-requests","security-and-auth/authenticating-users-and-application-clients","security-and-auth/changing-token-time-live-ttl","security-and-auth/facebook-sign","security-and-auth/revoking-tokens-logout",
 "security-and-auth/securing-your-app","security-and-auth/user-authentication-types","security-and-auth/using-permissions","security-and-auth/using-roles","user-management/activity","user-management/group","user-management/groups","user-management/messagee-example","user-management/user-connections","user-management/user-management","user-management/working-user-data","using-usergrid/creating-a-new-application","using-usergrid/creating-account","using-usergrid/using-a-sandbox-app","using-usergrid/using-the-api"],objects:{},objnames:{},objtypes:{},terms:{"005056c00008":68,"00767101f6b4f2cf5d02ed510dbcf0b4":63,"02e81ac5a17b":[2,10],"02e81adcf3d0":[5,6,8,13,15,18,19,49,60,61,62,63,72],"02e81ae236e9":63,"02e81ae61238":63,"02e81ae640dc":[2,62],"02e81ae66238":63,"02e81aeb2129":63,"02e81aeb26e9":63,"02e9sjwsf3d0":[15,49],"03ae956a":20,"0455fc92de2636fc7a176cc5d298bb78":63,"08fe":49,"0a669fe1d66":[13,32],"0abe":[13,49],"0d7cf92a":[15,49],"0d7e":34,"0d7f":34,"0f1ff3650d20":[17,63,68],"10e":10
 ,"10e10":10,"11apigeeapsdestination11":36,"11e0":[8,68],"11e1":[2,27,31,34,62,63,68,72],"11e2":[2,5,6,8,10,12,13,15,18,19,34,49,60,61,62,63,72],"11e3":[5,13,15,17,18,19,20,49,55,61,63,68,72],"11e6":[13,32],"1231380a0284":62,"12313b01d5c1":[2,27,62,72],"12313b06ae01":62,"12313b06d112":62,"12313b111c56":34,"12313b122c56":[31,34],"12313d027361":34,"12313d027471":34,"12313d14bde7":63,"12313d1520f1":62,"12313d1c4491":[2,31,34,62],"12313d1c44914":62,"12313d1c5591":34,"12313d288ee0":34,"12313d288ff0":34,"12313d331ae8":62,"12313f0204b":68,"12313f0204bb":[8,68],"12313f0204bb8":68,"12331b144c65":31,"12331d1c5591":[31,34],"12424d1c4491":31,"174785aa":17,"19a0":[15,49],"1a62":[13,49],"1a9356ba":[13,15,49],"1bd100b8059e":[13,49],"1c8f60e4":68,"1f3567aa":62,"1px":47,"1st":48,"20adr":68,"20c57d4f41cf51f2db44165eb058b3b2":12,"20employe":63,"20or":15,"20titl":63,"20uuid":15,"20where":[63,68],"22000a1c4e22":63,"22000a1c5a67":[63,68],"2440ca58":62,"2482a1c5":62,"249f":20,"2ac6":2,"2ac8":2,"2c13":32,"2
 cb6":13,"2cc3":13,"2d00":62,"2d21":2,"2e1db7299b0a667ed80e674a0ef9d653":5,"2nd":48,"31847b9a":[13,49],"3192ac6a":[13,49],"327b527f":[31,34],"328b526e":31,"328fe64a":[15,49],"335b527f":[31,34],"33dd0563":[31,34],"3400ba10":[2,34,62],"348388de":61,"34e26bc9":62,"3500ba10":34,"37f3":62,"382d0991":61,"38dc":15,"3bee":39,"3c1e":61,"3d1a9356ba":15,"3rd":22,"410b213a":[5,61],"411c466c4f2c":12,"417f":[17,63,68],"4353136f":68,"438a1ca1":8,"477d":63,"48c92c73":34,"496ca1d42ce7":[13,49],"49ff":62,"4a1edb70":[15,49],"4d2664c8e0c3":63,"4f511f12a386":39,"5005a0fa":63,"503f17da":72,"50gb":1,"5111c463":62,"5373d7165c2d":55,"53fe3700":[13,49],"563f5d96":62,"58606d0a":[18,19],"58e8":[63,68],"595955dff9ee4a706de9d97b86c5f0636fe24b43":22,"5ae1fa7a":[13,49],"5bb76bca":[13,15,49],"5bcc47ca":[18,19],"5bd5fa5f701f":49,"5c0c1789":[2,27],"5de0bb69":34,"5f4a65c16193":[15,49],"5wugd":54,"61c9":62,"62de5d97":72,"62fd53c78ce7":60,"65c8":34,"6640a601":2,"6715d5ef47a6":[15,49],"67cb":63,"698b":63,"699740088e05":6,
 "6a42":62,"6b07e44495ef":61,"6be0003c809b":[13,49],"6c56ffda":17,"6fbc8157":63,"6fc783c6":13,"6ldstnesaaaaakhdvglhmmu86_eoyxsjjqqd1ipz":[31,68],"74bb":61,"74d2d7da":63,"78c54a82":68,"7a0a1cba":39,"7bf47435":2,"7fb8d891":63,"7fd6c414":13,"802f":63,"81581bbaf055":[13,15,49],"8272c9b0":12,"83ceb9965c26":63,"83de":63,"83e9b7ea":[15,49],"84a5":68,"84c0":62,"84df":[15,49],"87b9":34,"884d":68,"89ab":[13,49],"8a2a":[15,49],"8a4c":60,"8ae3":39,"8ae8a6ea":68,"8b07":[13,32],"8bde":[18,19],"8cef":12,"8d05e96f700d":[13,49],"8d5c":72,"8dd1801e534c":17,"8e0cd3866ee20746c99e9a9825f38ad8":2,"8ea8":17,"8fce":13,"903f":[13,15,49],"90f823ba15655b8cc8e3b4d63377576f":63,"917d":[15,49],"924d":10,"92c3":2,"92e2":12,"9501cda1":2,"95c8":[31,34],"96f6":62,"98b9":34,"9953085ea376":[5,61],"999e12039f87":49,"99a7":55,"99fd":17,"9a18":39,"9c1b":63,"9ce3":[15,49],"9d3a":6,"9de5":61,"9e75":17,"9e92":[15,49],"9efc8ad529d8":61,"9f80":20,"9ff6c621a7a4":[13,15,49],"9ffc":62,"____usergrid":23,"__weak":36,"_set":[13,22],
 "boolean":[10,34,45,48],"byte":36,"case":[9,16,23,26,35,38,43,45,48,49,62,64,66],"catch":49,"class":[1,22,25,31,36,39,54,57,68],"default":[1,10,11,12,13,14,15,20,21,22,23,25],"export":[22,41,44,49],"final":[39,41],"float":10,"function":[6,26,29,39,56,59,62,63,64,65,67],"import":[26,27,29,35,38,39,44,52,71,72],"long":[10,27,36,45,64],"new":[6,9,13,15,16,21,28,31,32,34,35,36,38,39,40,41,43,44,45,48,49,55,56,58,61,62,63,65,68],"null":[6,39,56],"public":[31,39,41,68],"return":[10,11,12,13,16,19,20,24,26,31,34,39,41,45,48,54,55,56,57,60,62,63],"short":[62,70],"static":[22,23,39,46],"super":13,"throw":[35,43],"transient":25,"true":[10,12,18,19,22,23,24,25,31,34,36,39,48,56,61,63,68,72],"try":[24,31,35,36,43,49,52,56,60,70,71],"typeof":56,"var":[9,22,31,39,56],"void":[36,39],"while":[23,26,27,29,35,38,39,40,43,45,60,61,71],a065:62,a0dd:72,a0e5:[5,61],a0f7:62,a166:[5,6,8,13,15,18,19,49,60,61,63,72],a24f:[13,49],a407b1e7:[63,68],a51b:[15,49],a554b7fbd57a:72,a5c5:61,a668717b:63,a694:[18,19],a
 6e3:63,a71c:60,a72a:[13,15,49],a7e008061e10:[18,19],a7f7:[5,6,8,13,15,18,19,49,60,61,63,72],a9c1:49,aapplic:32,abbrevi:[12,16,41,72],abil:[20,29,32,66,67,70],abl:[16,22,23,25,35,36,38,44,58,59,62,67,68,72],about:[0,10,16,21,23,29,31,33,34,35,36,38,39,40],abov:[5,6,10,19,22,23,24,25,32,35,38,39,44,61,62],abstractbatch:22,abstractcomposit:22,ac46:[63,68],accept:[4,37,39,46,54,60],access:[2,13,14,15,16,19,21,22,24,27,29,31,32,33,34,36,39,41,45],access_token:[13,24,32,48,53,54,55,56],accessid:1,accesstokenrespons:21,accesstokenttl:55,accomplish:[36,57],accord:54,account:[12,15,16,21,22,23,25,27,29,31,33,35,38,39,41,44,45,48,55,58,59,61],achiev:66,acquaint:62,acquir:21,across:[8,16,36],act:[12,62,65],action:[2,5,6,7,8,12,13,14,15,16,17,18,19,21,22,23,29,31,32,34,35,36,44],activ:[5,10,12,18,19,20,21,22,23,25,27],activit:31,activityfe:21,actor:[31,34,48,62],actual:[16,35,38,44],add:[1,9,14,15,16],add_invoc:22,addit:[8,16,21],addobject:49,address:[12,22,23,31,34,35,38,41,45,48,54,68,72],add
 rol:21,adjust:[11,61],admin:[21,22,23,24,25],admin_password:54,admin_usernam:54,admin_users_require_activ:[22,23,25],admin_users_require_confirm:[22,23,25],admingmail:31,administr:[23,24,27,29,32,34,45,54,58,59,61],adminus:[31,34,48],adomain:68,adopt:29,advantag:29,advertis:20,advis:58,ae1f:17,aec3:62,afad:62,affect:55,after:[6,10,24,26,35,36,38,39,44,54,56,58,61,65,72],again:[23,31,35,43],against:[18,25,32,53,54,58,60],aggreg:8,air:14,aizasyckxotbq7a9gojsslqzlod_yjefxxxxxxx:37,alert:[20,26,36,39,63,64],alerttext:36,alia:[61,68],all:[0,6,8],alloc:[36,39,49],allow:[7,10,12,13,20,22,23,25,27,29,32,34,36,39,41,44,45,56,59,60,61,62,63,64,66,67,68,72],allowajaxfilt:22,almost:67,alon:[35,38],along:[11,16,35,39,43],alreadi:[15,16,22,23,35,36,37,39,45,48,49,56,58,65,70],also:[1,2,6,7,8,11,13,15,16,22,24,25,27,29,31,32,34,35,36,37,38,39,44,45,48,54,56,57,58,60,62,63,64,65,66,68,69],alter:61,altern:[12,13,63,64],although:[13,15,31,36,62,63,68],alwai:[27,36],amazon:1,amazonaw:23,amount:[11,59,
 62],amuramoto:[5,15,49,55],analysi:29,analyt:70,analyz:[29,53,54,58,59],android:[21,26],androiddev:37,androidmanifest:44,anew:[35,43],angular:46,ani:[5,6,8,10,12,13,14,15,16,20,22,25,26,27,29,31,33,36,39,44,48,52,53,54,55,58,59,60,61,62,63,65,66,67,68],annot:30,announc:40,anonym:[45,62,68],anoth:[12,16,35,36,38,43,44,53,62,65,66,68,71],answer:68,ant:60,anuff:47,anyon:[59,62],anyth:23,anytim:62,anywher:11,apachecon:47,apidocgener:0,apige:[35,36,39,40,41,44,47,49,63,72],apigeeapsdestin:36,apigeeapspayload:36,apigeecli:[39,49],apigeeclientrespons:[36,39,49],apigeecollect:49,apigeedatacli:36,apigeedataclientcompletionhandl:36,apigeemobileconfig:55,apikei:[37,56],apirequest:49,apirespons:39,apiresponsecallback:39,apn:21,app1:48,app2:48,app:[2,4,5,6,7,8,12,13,14,15,16,17,18,19],app_id:[15,48,62,63,68],app_nam:[32,55,57],app_uuid:[14,16],appdata:21,appdeleg:[36,39,44,49],appear:[19,25,37,41,48,62,65,66],append:[8,9,13,16,20,22,36,53,56],appid:[48,56],appl:[21,29],appledev:44,applenotifi:37
 ,appleopt:39,appli:[25,55,58,60,61,66,67,68,72],applic:[2,4,5,6,7,8,12,13,14,15,16,17,18,19,20,21,22,23,24,26],application_client_secret:54,application_clientid:54,application_info:34,applicationdata:48,applicationdidbecomeact:39,applicationid:[31,34,39,48],applicationnam:[2,5,6,8,12,13,14,15,16,17,18,19,32,48,49,55,60,61,62,63,68,72],appnam:[9,39,44,54,56],appropri:[27,36,37,39,45,56],approv:[22,23,25],appservic:39,aps_develop:41,apspayload:36,arbitrari:[66,72],architectur:[14,23],archiv:22,area:[31,36,41,52,68,70,71],aren:[14,16],arg:[1,32,34,62,63],argument:[1,39],arm:58,around:[0,16,22],arrai:[10,12,13,14,15,16,19,48,49,72],arthur:[17,18,19,66,67],articl:[12,13,15,53,61],asc:11,ascend:11,ask:[12,44],aspect:[7,29],asset1:2,asset:1,assets_id:2,assign:[6,21,27,29,45],assist:41,associ:[5,10,13,19,20,27,29,34,35,36,37,38,39,41,44,45,48,49,52,54,55,57,59,61,63,65,67,68,69,72],assum:[16,25,39,44,53],async:21,asynchron:21,atistophan:31,atom:15,atop:44,attach:[4,5],attack:[52,58],attempt
 :[34,48,53],attribut:14,audienc:21,audio:[5,29],auth:[23,25,37,41,45,56],authent:[13,15,21,24,28],author:[24,33,37,39,41,53,55,56,62,67],author_uuid:16,authorid:[14,16],authorimag:16,authornam:16,authoruuid:16,authrespons:56,auto:[22,23,25],automat:[5,6,13,15,25,27,29,30,48,54,56,57,60,61,62,66,69,70],avail:[13,15,20,24,29,35,37,39,49,54,65,67,70,72],avatar:[12,62,63,68,72],avoid:[16,65],awai:16,awar:[10,20],awssdks3binarystor:1,b0c6:63,b11217fc:6,b1f7:[13,49],b24e:6,b2bd:63,b2e4:15,b31d:55,b36a:[2,27],b379:[5,61],b3aad0a4:49,b3u68vghi6fmeekn9wlogtzz0a:32,b3u6aaabmqz:54,b3u6zuz5_u8i:32,b4c6:2,b690:63,b6dd:62,b77ec8addc0d:63,b90c:63,b93d:68,baa:[22,31,34,36,37,41,52],back:[14,16,24,29,32,39,46,65],backend:[12,21,22,27,36],backslash:36,bad:[34,54,59],badg:[36,39],banner:7,bar1234b:68,bar:[28,72],barnei:[63,66],base:[0,13,20,21,22,23,25,29,36,37,54,67],baseurl:[22,39],bash:22,batch:11,battl:13,baz:72,bcc1:8,bcf7:[2,31,34,62],bcf8:[31,34],bd397ea1:60,be04:[13,49],be08a5f9:34,be09a5f9:34
 ,bean:[1,22],bearer:[24,37,53],beca:34,becaus:[13,14,20,23,35,43,48,54,58,59,62,65,71],becom:[11,12,20,23,29,41,62,63,64],been:[6,16,32,35,36,39,43,44,48,53,56,57,58,62],bef8:[31,34],befor:[0,1,21,22,26,32,35,36,38,39,41,43],begin:[8,11,13,21,22,33],behalf:54,behav:65,behavior:29,behind:[45,56,70],belong:[24,27,36,45,62,64],below:[13,14,15,16,22,23,25,31,35,36,38,44,49,50,56,62,63,65,68],beneath:65,benefici:26,benefit:[14,23],besid:61,best:[11,12],better:[16,54,59],bewar:25,beyond:62,bike:10,bin:[22,25],binari:[22,29,53,54,58,59],binarystor:1,bit:14,blank:[41,61],block:26,blog:61,blue:39,board:65,boat:10,boavijt0oyrkjf:32,bodi:[6,16,31,32,34,36,48,55,62,63,68],book:[11,29,49],bool:39,bootstrap:[22,25],border:47,both:[6,14,17,25,26,27,32,36,39,46,48,59,67],bottom:10,bounc:16,bouncer:16,bounci:[14,16],box:[36,44,61,65,67,69,71],bracket:15,bread:[13,15,49],brief:[26,56],broad:[53,54,59],brows:[22,28],browser:[22,23,31,35,38,56],bucketnam:1,buildcurl:56,built:[16,22,23,44,46,62,72],bunc
 h:22,bundl:[39,44],busi:20,button:[7,31,35,38,41,43,44,61,65,68,69,71],button_click:[6,8],c2v7n61dy90mcdg78xixprxfdq:34,c2v7wedxiutzwekwdyslct_lydfvmmn:34,c5e707256e71:[15,49],california:[31,63,64],call:8,callback:[26,39,56],campaign:29,can:[0,1,2,4,5,6,7,8,10,11,12,13,14,15,16,17,19,20,22,23,24,25,26,27,29,31,32,33,34,35,36,37,38,39],cancel:21,cannot:[13,15,26,27,30,32,59,72],capabl:58,captcha:[31,48,68],captur:[12,16,20,29],car:10,care:[38,40,41],carefulli:59,carri:[33,37,44],cassandra:[14,16,21],cassandra_cluster_nam:22,cassandra_host:22,cassandraavail:22,cassandrastatu:22,cassanrda:22,cast:47,castl:[14,16],cat:24,catalina:[22,25],catalog:29,categori:[14,31,34,48],caus:[0,15,48],caution:55,cautiou:[53,54,59],ccc:47,cd0c:[2,31,34,62],cd0d:[31,34],cd789b00:63,cd796d0a:63,cdf1ce04c1c0:12,cdn:29,cede5b7:34,cede5b8:34,cell:0,center:[20,35,38,44],central:[0,1],cer:41,certain:[15,16,27,36,57,67],certif:[21,35,37,38],certsigningrequest:41,cf3e981c:31,cf4d981c:[31,34],cf9b:8,cfed:[18,19],
 chain:6,challeng:[31,48,68,72],chang:[0,1,21,22,23,25,27,44,48,53],changelog:22,channel:56,channelurl:56,charact:[11,62,68],characterist:[38,39],charset:[31,68],check:[22,23,24,25,39,44,56,59,60,61,62,71],checkbox:61,checksum:[2,5],chicago:68,choic:44,choos:[16,36,37,41],chose:44,circl:[29,62],circumst:57,cite:15,citi:[11,31,68],clara:47,classpath:1,clean:[0,23,24,25,31,32],cli:23,click:[7,16,33,35,36,37,38,41,43,44,61,65,69,71],client:[9,11,13,14,15,16,21,22,23,25,26,29,31,32,33],client_credenti:[32,48,54],client_id:[32,34,48,53,54,56],client_secret:[32,34,48,53,54],climb:16,clone:[0,23,25],close:44,closer:16,cloud:[1,4,5,22,29,35,38,41,44],clue:23,cluster:[22,23,25],cluster_nam:[22,25],cn0wtdxxkxmqlgzvtmubcp20fulczq:54,code:[1,11,16,21,23,24,26,28,29,30,35,36,38,39,40,41,43,44],codesign:44,coffe:14,colleagu:62,colleciton:49,collect:[4,5,12],collection_nam:13,collectionid:48,color:[10,39],column:[14,16],com:[2,4,5,6,8,12,13,14,15,16,17,18,19,20,22,23,24,25,27,31,32,34,36,37,39,41,4
 4,45,49,54,55,56,57,60,61,62,63,65,66,67,68,72],combin:[16,30,35,36,38,58,68],come:[21,22,23,25],comma:[12,22,36,49,56,60],comma_separated_list_of_permission_nam:56,command:[0,22,23,24,25,44,56,63,70],comment:[29,39,62],commit:0,committ:46,common:[12,58,62,68],commonli:61,commun:[22,38,40,65],compani:[33,34,65],compar:[12,38],comparison:[10,61],compil:[44,53,54,58,59],complet:[12,13,21,23,26,27,29],completedsuccessfulli:[36,39],completemsg:48,completionhandl:36,complex:[15,16,21,29],compliant:29,complic:23,compon:[27,28,29,46],compris:22,compromis:53,concept:[14,70],config:[22,25],confim:48,confirm:[22,23,25,31,32,34,35,43,48,65],confirm_application_id:32,confirm_application_identifi:32,confirm_email:[31,34,48],conflict:65,conform:10,conjunct:[29,67],connect:[0,2,5,12,16],connected_collect:[17,18],connected_ent:[17,18],connecteeid:39,connectent:39,connectentitiesasync:39,connecting_collect:[17,18],connecting_ent:[17,18],connectorid:39,consid:[35,43,54,58,61],consider:[53,54,59],cons
 oleappend:22,constrain:14,construct:[21,33,60,62],constructor:1,consult:70,consum:[29,62],contact:41,contain:10,containslook:11,containswil:11,content_typ:4,context:[1,29,39],contextu:29,continu:[11,26,41,65],contrast:[16,66],contribut:[21,28],contributo:21,contributor:46,control:[22,29,32,38,41,55,58,61,68],conveni:[9,13,53,63,65],convent:27,conversionpattern:22,cooki:[32,56],coordin:36,copi:[0,16,22,23,41,65],core:[22,24,25,29,44],cores:25,correct:[30,35,43,45,56,65],correctli:25,correl:[35,38,39,43],correspond:[12,13,15,27,39,41,44,48,49,72],cost:29,costli:16,could:[2,11,16,26,38,39,53,54,58,59,63,64,66,67],couldn:39,count:[7,8,12,13,14,15,22,48,49,62],counter_nam:[6,8],coupl:[28,32,38],cours:22,coyot:32,cpu:38,creat:[2,5],createact:21,createadminus:21,createcollect:49,createent:[21,26],createev:21,creategroup:21,createnotif:21,createorg:21,createus:21,creation:[13,45,48,55,64],credenti:[21,22,23,25],criteria:29,cross:62,css:[31,44,68],cumul:6,curiou:70,curl:[4,5,6,8,9,11,12,13,1
 5,17,18,19,20,22,24,25,31,32,34],current:[6,13,20,27,30,35,39,48,60,62,68],custom:[9,13],custom_id:9,custompayload:36,d0d7d0ba:12,d16344f5a0e1:20,d20976ff:63,d28c:72,d44dfc30:32,d503:[2,27],d7a8:[15,49],d86a:12,d878de4r:55,d87edec7:62,d9693ec3:62,da448955:62,da4a50dc:15,da67:68,da71:68,da83:62,dai:[7,8,55],daili:8,dashboard:[35,56],data:1,databas:[11,14,16,20],datacli:[9,36,39,49,54,57],datastax:22,date:[10,32,36],dave:47,david:47,db1e60a0:[17,63,68],dbf5228024a7:[18,19],dbm:[11,12,14,16],dc5d478e9c029853fbd025bed0dc51f8:72,debug:[35,38,39,44],decim:10,declar:39,decompil:58,dedic:6,defin:[7,14,15,27,39,49,52,54,55,60,61,62,63,67,68,71],definit:[48,60],deflat:37,degre:[36,55],deleat:48,deleg:49,delet:[11,12],deletecollect:49,deleteent:49,deletem:32,delimit:[10,60,64],deliv:[29,36,41,44,48],deliveri:[29,36,48],denot:[63,66],depend:[22,37,39,40,63,64,72],deploi:21,deploy:21,deploywar:22,desc:11,descend:11,describ:[11,12,13,15,16,20,33,37,39,41,44,45,52,53,54,56,61,63,65,72],descript:[4
 ,5,6,8,11,13,14,15,17,18,19,21,22,27,31,32,33,34,36,41,45,48,49,54,59,60,61,62],design:[14,16,20,23,29,30,44,62,63,64,65,67],desir:41,desktop:[37,41],destin:[1,36],destinationsingledevic:36,destroi:57,detail:[13,15,27,29,31,32,33,34,35,36,37,38,48,54,56,61,62,63,66,68,70],detect:[5,20],determin:[20,30,62,68],dev:[25,35,37,38],develop:[10,20,21,22,27],devic:[5,18,19,20,21,27,29,35],device_id:36,deviceid:[36,39,48],deviceregistrationcallback:39,devicetoken:39,deviceuuid:39,dfr4d5m1mjmoeeogvpncm:55,diagram:[35,38],dialog:[31,41,44],did:15,didfailtoregisterforremotenotificationswitherror:39,didfinishlaunchingwithopt:39,didregisterforremotenotificationswithdevicetoken:39,differenti:29,dimens:67,diner:11,dino:[66,72],dir:0,direct:[0,16],directli:[0,32,41],directori:[0,22,23,24,25,44,46,56,65],disabl:[23,31,34,45,48,71],discuss:13,disk:41,displai:[8,11,20,44,45,48,56,61,62,64,65],displayemail:48,displayemailaddress:[31,34],displaymessag:39,displaynam:[31,34,48,62],dist:22,distanc:20,distan
 ce_in_met:20,distinctli:28,distribut:[14,16,58],div:[31,68],dk88fh4r:19,dlog4j:22,doctyp:[31,68],doe:[0,13,15,22,27,32,35,43,45,48,49,53,54,55,56,62,63,68,72],doesn:[14,16,35,39,43,44,71],dog:[15,26,63,64,66,72],dogcreatecallback:26,doge:[63,64],domain:[41,56],don:[22,23,35,38,40,44,58,62,68],done:[0,13,22,23,25,29,37,39,41,48,56,58,59,68],dot:[6,10],doubl:[25,36,41],down:[10,13,22,28,36,39,41,61,69],download:[21,22],drive:[1,29],drop:[36,41,61,69],dropdown:69,dskiptest:[23,24,25],dtd:[31,68],due:[11,12,16,54],duplic:16,durat:[2,5,6,8,12,13,14,15,16,17,18,19,22,23,31,32,34,48,49,55,57,60,61,62,63,68,72],dure:[58,61],duti:61,e13743a7f1db7f4246badd6fd6ff54ff:68,e694:63,e7127751:63,e7d0:62,e8f5:[15,49],e94123890c7a:[15,49],e978:68,e97b:12,each:[0,6,7,8,10,12,13,14,15,16,20,22,27,31,35,36,38,41,45,48,49,50,56,59,61,62,63,68,71,72],earlier:[35,37,38,44],eas:29,easi:[0,29,67],easier:[9,11,12,16,35,58,63,66,71,72],easiest:61,easili:[6,20,27,29,58,67],east:[13,23],easy_instal:0,eb20e5bce407
 :17,ebc6f49d1fc4:[15,49],ec2:22,ec39:72,echo:32,edit:[0,1,21,22,23,41],edort1:31,ee912c4b:10,ef0b:[15,49],effb:[15,49],effect:29,effici:[12,16],either:[1,13,17,32,48,53,56,61],elastic_search_host:22,elasticsearch_cluster_nam:22,elasticsearch_host:22,elev:58,elimin:[29,53,58],els:[26,39,56],email:[12,22,23,24,25,27,31,34,38,41,45,48,54,62,63,65,68,72],email_address:[68,72],embed:25,embed_cod:47,employe:63,empti:[13,49,65],emul:[35,38],enabl:[20,22,23,29,35,38,39,40,41,44,45,56,58,61,62],enabledremotenotificationtyp:39,enabledtyp:39,enclos:[12,48],encod:[9,11,12,15,37],end:[8,21],end_tim:8,endpoint:[0,6,18,21,32,35],engag:[20,29],engin:22,enhanc:20,enough:[44,71],ensur:[10,16,22,29,35,36,38,41,44,52,54,58,72],enter:[31,36,37,41,44,56,61,65,68,69,71],entir:[11,36,48],entit:16,entiti:[0,2],entity_nam:15,entity_typ:[15,49],entity_uuid:15,entityid1:48,entityid2:48,entityid:[48,49,61],entityproperti:48,entitytyp:[31,34,48,61],entri:[11,36,56],environ:[37,44,58,70],equal:[10,12,39,55],equiv
 :[31,68],equival:10,err:[26,39,56],error:[6,21,22,25,26,34],errorcod:48,errormessag:48,escap:[36,49],essenti:[44,67],establish:[48,62,67],etag:[2,5],etc:[22,45],evalu:[10,23],even:[8,11,16,22,23,27,38,53,54,58,59,66],event:6,everi:[8,9,13,27,53,58,59,61,63,64,72],everyth:[0,13,22,72],exact:[20,67],exactli:11,examin:[8,58],exampl:[0,1],except:[15,35,39,43,53,58],exchang:41,execut:[9,11,12,25,26],exhaust:58,exist:[5,6,15,16,20,22,23,32,34,39,45,48,49,55,56,62,63],expect:[10,20,31,34,40,49,67],expens:13,experi:[14,20,29,67],experiment:[52,71],expir:[21,32],expires_in:[48,54],explain:[0,22,23,28],explan:26,explicit:41,explicitli:[39,53,57,61],expos:24,express:[10,11,22],extend:66,extens:65,extern:46,extract:[23,24,25,53,54,56,59],f18e8f6fb3bc:68,f315e5aa568a:[15,49],f322:49,f34f4222:[5,6,8,13,15,49,60,61,63,72],f399:62,f3a8061a:[15,49],f3aa:62,f3be262a:[15,49],f3teeg:32,f42752aa:49,f8zemolceecubwbqvsaaca:54,f_gubelxeecfrgbqvsaaca:54,facebook:[21,29],facebookaccesstoken:56,facebooktoken:
 56,factor:[22,23],fail:[35,36,39],failur:[14,48],fals:[10,22,23,25,31,34,48],famili:[14,20],familiar:[16,70],faq:23,far:69,fast:14,favorit:[25,38,39,68],favoritecolor:39,fb_access_token:[45,56],fbasynchinit:56,fbasyncinit:56,fc4d:62,fdd3:34,fe80:31,fe90:[31,34],featur:[16,20,21],feed:[5,12,18,19,21,29],feel:25,few:[11,20,35,40,65,67],ffd79647:62,field1:13,field2:13,field:[1,11],fieldset:[31,68],file_loc:5,filenam:5,files:1,filter:[12,62,63,68],find:[0,11,20,22,23,28,35,39],fine:[25,29],finish:[35,38,48,65],first:[0,10,11,12,13,16,25,26,31,35,37,40,41,43,44,45,49,58,61,70,72],first_nam:72,firstnam:[11,12,45],fish:24,fit:59,five_minut:8,fix:[32,35,43],flash:38,flexibl:[14,16,21,27],flow:[56,68],fluffi:24,fobnszewobnioerabnoiawegbrn:[5,61],focu:[29,72],folder:1,folk:[21,22],follow:[0,2,4,5,6,8,9,10,11,12,13,14,15,16,18,19,20,21,22,23,24,25,26,27,33,35,36,37,38,39,41,43,44,45,48],foo9876a:68,foo:72,footprint:[38,40],forappl:39,force_refresh:25,ford:[18,19,66,67],forgot:68,fork:46,forkei
 :[36,49],form:[15,22,27,31,34,36,48,49],format:[0,2,12,13,14,15,20,21,22,27,41,46,49,53,54,56,59,60,62],fornotifi:39,fortun:8,forward:[35,37,38,39,56,63],found:[32,53,54],four:[54,59],foursquar:62,fragment:56,framebord:47,framework:[38,65],francisco:[20,31,63,64],fred:[11,63,66],free:[25,27,35],friend:[18,20,29,38,61,62],from:[0,4,9,11,12],full:[11,15,22,29,31,33,35,38,44,53,54,58,59,61,66,71],fulli:[25,49,72],further:[26,33,39,45,53,56,58,72],furthest:[11,20],futur:[15,32,58],g9qgaaaurv_lfq7uu6ayhjjjn7qcrgovnvu:55,gain:[53,58],game:[7,38],ganyo:44,gatewai:41,gaufeolxeecfrgbqvsaaca:54,gcm:21,gcm_sender_id:44,gcmregistrar:39,gcmsenderid:39,gener:[0,6,7,21,24,25,27,30],geo:21,geocoordin:20,geograph:11,geoloc:11,get:[2,4,8,11,12,13,14,15],getapigeedeviceid:39,getclient:39,getcollect:49,getconnect:39,getdatacli:39,getent:49,getloggedinus:39,getregistrationid:39,getuniquedeviceid:[36,39],getuuid:39,ggkaaqmaggkabge5ffm1aqcadqaq_9ewr_ozeeguwxixowauaqcadqaqablaovoaeeguwxixowauaqa:62,ggkaaqm
 aggkabge5mlfh7gcadqaqjikhxefqeegw9hixowbregcadqaqjnep6ufqeegw9hixowbrega:62,ggkaaqmaggkabge5xc3r1gcadqaqz02yhp6qeegvybixoxisvgcadqaqz3soh_6qeegvybixoxisvga:34,ggkaaqmaggkabge5xc3r1gcadqaqz02yhp6qeegvybixoxisvgcadqaqz4zbyf6qeegvybixoxisvga:31,ggkaaqmaggkabge7pehcgwcadqaqvj9dljfzeekg9wloguza3acadqaqvkvrctfzeekg9wloguza3aa:62,git:[0,46],github:[21,23,28,44],give:[6,16,29,38,41,55,60,61,67,71,72],given:[10,15,16,27,34,47,48,53,58,71],gladi:12,gmail:[25,31,62,68],gmt:32,goal:[11,30],goe:[22,23],gold:24,good:[0,22,28,58,71],googl:[21,29,31],gool:[35,43],got:[35,38],gotten:[22,35,38],govern:[52,54,59,63],grain:29,grant:[48,53,54,56,58,59,61,72],grant_typ:[24,32,48,54,55],granular:[6,8],graph:[21,29],graph_async:25,graph_us:25,gravatar:[12,62,63,68,72],great:[29,45,61,63,64],greater:[10,11,55],greatest:59,green:22,groovi:0,group:[5,10,12,14,15,18,19,21,27],group_path:36,groupid:48,groupnam:[62,63],grouppath:63,groupproperti:48,grunt:46,gte:10,guarante:26,guest:[39,53,58,61,62,68,71],guid:[9
 ,21],guidanc:44,gzip:37,hacker:[53,54,58,59],had:36,half_hour:8,hand:16,handi:70,handl:[29,31,39,67],handlepushnotif:39,happen:[20,38],happi:[0,62],happy_cloud:5,hard:[1,59],hardwar:[35,38],hava:0,have:[0,12,13,14,15,16,19,22,25,27,32,34,35,36,37,38,39,44,45,48,54,55,56,58,59,61,62,63,64,65,67,68,70,72],haven:22,head:[31,68],header:[4,53],heap:22,heavi:38,hector:22,height:[47,48,62],hello:62,help:[7,11,14,22,25,27,29,52,54],her:[16,31,38],here:[2,12,13,16,20,22,23,24,25,27,28,32,38,46,56,62,63,65,68,72],hidden:32,hierarchi:[6,27,33,34,60,63],high:[14,16,36,38,39,40,52,55],higher:[24,59],highest:[33,34],highlight:16,hike:59,him:24,histori:36,hold:[5,49],home:20,homepag:6,hopefulli:32,host:[22,23,25,53,56],hostconfig:22,hostnam:[22,25],hotmail:34,hour:8,hous:16,howev:[8,11,12,13,15,25,26,27,35,38,44,45,56,58,61,62,65],href:[31,34,68],html4:[31,68],html5:[21,22,35],html:[0,31,41,44,48,56,65,68],htmldisplayemail:48,htmldisplayemailaddress:[31,34],http:[2,4,5,6,8,12,13,14,15,16,17,18,19,
 20,21,22,23],httpd:22,human:[31,68],hundr:11,hurrai:56,hystrix:25,icon:[41,62,65],idea:58,ident:[16,44],identif:[44,48],identifi:[9,13,16,27,31,32,37,39,41,45,49,68],ifram:47,illlustr:39,illustr:[14,35,36,38,39,52],imag:[2,4,5,14,29,35,38,44,48,62],imagemodel:21,imagin:[12,16,36,59],immedi:[29,36,61,68],immut:27,implement:[29,35,39,52,53,54,56,59,68,72],implicit:61,improv:[20,29],inact:[39,61],inbox:[45,62,64],includ:[6,11,12,14,15,16,22,27,29,31,35,36,37,38,39,44,48,49,53,54,55,56,58,61,63,68,69,70,71,72],incorpor:65,incorrect:[31,72],increas:[13,20,29],increment_valu:6,index:[0,10,11],index_prefix:25,indic:[22,32,48,55,62,63],individu:[15,27,55,59],ineffici:[11,12,16],inflat:16,info:[22,31,48],inform:[4,8,11,12,13,14,15,16,20,23,27,29,31,33,35,36,37,38,39,41,44,45,46,49,52,53,56,58,62,63,65,66,68,70,72],infrastructur:[27,29],ing:62,inher:58,init:[22,36,49,56],initi:9,initwithobject:49,initwithorganizationid:39,inner:16,input:[31,68],insecur:58,insert:56,insid:72,instal:[0,9,21,22]
 ,instanc:[22,23,24,27,39,49,54,57,65],instead:[16,29,54,58,59,72],instruct:[0,22,23,35,46,56,65,68],integ:[11,48],integr:[20,29,35,56,72],intend:21,intention:[16,32],interact:[35,43],interest:[8,29],interfac:[23,65],intern:21,interpret:[60,72],intersect:10,intrins:72,introduc:29,introduct:40,invalid:[45,56],invok:[35,38,39],iphon:65,isloggedin:39,isn:[14,39,52,70,72],iso:[31,68],isregisteredonserv:39,issu:[0,2,21,22,23,32],item:[10,12,13,15,36,49,62,72],items:13,itself:16,jan:22,jane:68,jar:[24,44],java:[0,22,23,24],java_opt:22,javascript:[6,9,12,14,21,22,23,26,31,35],javscript:26,jdk:[22,23,24,25],jdoe57:27,jenni:16,jersei:30,jim:31,jin:47,jinm:31,jira:32,job:61,joex:39,john:[27,54,62,63,68,72],johnson:47,join:16,jpeg:[2,4,5],jpg:[2,5,14,16],json:[10,12,14,15,16,19,22,24,27,31,32,36,37,49,56,62,63,67,72],json_arrai:15,json_object:15,jun:32,just:[14,16,17,20,23,35,38,40,44,62,67,71,72],k88dh4f:18,kbundledsoundnamewithext:36,keep:[1,7,9,11,12,29,35,38,40,53,54,58,59,71],kei:[13,15,16
 ,21,29,35,37,38,39,41,43],keychain:[41,44],keyspac:[23,25],keyword:15,kid:16,kind:[11,12,16],know:[8,22,32,38,41],knowledg:22,known:39,kravitz:12,kugclientresponsesuccess:39,label:31,lack:71,lag:26,languag:[10,14,15,72],larg:[0,10,11,62],last:[5,11,27,34,45,48],lastnam:[11,12,45],lastreindex:13,lastupd:13,lastupdatebi:13,lat:36,latenc:26,later:[16,20,32,36,41],latest:[23,24,44],latitud:[11,20,36],latitude_coordin:20,launch:[8,22,35,38,39,41,43,44,58],launchopt:39,layer:24,layout:22,lceecubwbqvsaaca:54,learn:[21,28,29,35,38],least:[22,23],leav:[23,41,61],left:[28,36,37,41,44,61,62,65,69],length:[2,5,32],less:[10,14,55,62],let:[8,13,22,24,29,36,38,61],letter:68,level:[6,8,14,15,21,22,24,27,29,32,33,34,35,36,39,44,52,53],leverag:[29,65],lib:[22,23,25,44],librari:[22,35,38,44],licens:22,lightweight:67,like:[0,2,5,8,10,13,14,16,17,18,19,22,23,25,26,29,31,35,36,38,45,56,58,60,61,62,64,65,66,67,68,71],liked_bi:66,limit:1,line:[0,16,22,23,24],linear:[14,23],linux:22,listen:38,live:[21,53],l
 oad:[24,56],localfilebinarystor:1,localhost:[13,22,23,24,25],localizeddescript:39,locat:5,log4:22,log4j:22,log:6,logger:22,login:[21,22],logincredenti:21,loginfacebook:56,loginus:39,logout:21,longer:[11,32,58],longitud:[11,20,36],longitude_coordin:20,look:[2,8,10,11,13,16,22,35,36,38,56,59,62,68],loos:[31,68],love:16,low:[38,40],lower:[6,10],lte:10,ltixndg0nduxndpvdjb0jwrevls1vcd0xvr3nwt0jrqq:11,lunch:38,mac:[35,38,41],machin:[22,41,44],made:[19,46,60,66,72],magic:16,mai:[0,6,9,10,13,15,22,27,32,36,37,39,44,48,57,58,61,63,71],mail:[23,25,27,63],mailer:[22,23,25],mailto:[31,34],main:[0,1,56],maintain:[16,56],make:[0,9,11,12,13,14,16,22,25,26,27,29,33,35,39,43,44,45,53,54,56,57,58,62,65,66,67,68,70,71,72],makefil:0,maker:14,malici:[52,53,54,59],manag:[5,11,12,21,22,23,24,25,27,28],managementappindexstatu:22,mandatori:[1,45,63,64,68],mani:[7,11,12,14,16,20,22,27,36,61,67,71],manual:[62,66],map:14,marginheight:47,marginwidth:47,market:38,massoddb:62,match:[11,15,22,25,35,43,44,49,60,68]
 ,matter:[29,35,38,44],mattress:14,maven:[0,23,24,25,46],max:[25,32],maximum:[11,36,55],mayb:16,mean:[10,13,14,15,16,26,27,36,52,53,58,66,67,71],meant:62,meanwhil:26,measur:52,mechan:65,meet:23,member:[27,31,33,44,48,59,62,63,64],meme:[63,64],memori:[20,38],menu:[32,35,38,41,61,65,69],messag:[6,21,22,23,25,29,31,32],message:21,meta:[31,68],metadata:[2,4,5,6,10,12,13,14,15,16,17,18,19,20,21,31,34],metadataproperti:48,meter:[11,20,36],method:[6,8,11,15,19,21,26,31,32,33,34,35,38,39],mfdsadfdsaoabl:62,microsecond:22,middl:45,middlenam:45,might:[7,8,9,11,12,13,14,15,16,22,23,25,27,29,32,35,36,38,39,41,43,58,61,63,70],mile:20,milk:[13,15,49],million:29,millisecond:[27,48,55],mimic:30,mind:[1,9,11,12,16,20,35,38,71],minim:[16,22,23,25,30],minimum:[27,32,34],minu:16,minut:[8,29],mix:72,moab:62,mobil:[14,16,20,21,32,35,37,38,39],model:14,modern:[27,62],modif:[45,64],modifi:[2,5,6,12,13,14,15,16,17,18,19,20,27,31,34,44,45,48,49,55,61,62,63,64,68,72],modul:6,mon:32,monitor:[22,29],month:[8,29]
 ,more:[4,6,8,9,11,12,13,14,15,16,20,21,22,23,27,28,29,34,35,36,37,38,39],morn:8,most:[8,11,16,25,26,27,28,29,32,58,62,66,67,68,70],mountain:59,move:[22,39,44],much:[10,14,16,58,65],multi:[15,22,49],multipl:[0,11],must:[0,10,15,16,22,24,25,27,32,34,36,37,38,39,41,44,48,49,53,55,61,62,63,65,66,68],mustach:0,mvn:[23,24,25],my_app:[14,16,45,56],my_org:[14,16,45,56],myadmin:24,myapp:[12,24],myasset:2,mycollect:10,myfirstorg:24,mygroup:[62,63],mynewapp:[63,68],mynewgroup:63,mynewpassword:31,myorg:[12,63],mypassword:24,myself:[16,23,25],myuser:24,name:[1,2,4,5,6,8,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,27,31,32,34,35,36,37,38,39,41,43,44,45,48,49,53,55,56,58,60,61,62,63,64,65,68,69,71,72],nanoc:46,narrow:[10,61],nativ:[0,14,39,44],natur:[11,12],nav:[36,37,41],navig:[23,24,25,44],nearbi:20,nearest:[11,20],nearli:16,necessari:[16,29,35,38,39,44,61],need:[0,1,2,8,9,11,12,13,14,15,16,22,23,25,27,28,29,31,32,33,34,35,36,38,39,40,41,44,45,53,54,56,57,58,59,61,62,63,65,66,67,68,69,70,72],ne
 g:6,nest:[15,27,49],net:[47,72],network:29,never:[21,32,53,54,55],new_password:[31,68],new_review_uuid:16,newdevicetoken:39,newent:49,newli:[41,48,60,62],neword:36,newpassword:[31,48,68],next:[10,11,13,21,22,24,25,38,41,44,65,69],nil:[39,49],node:[22,23,25,49,50,54,57,72],nodej:25,noisi:22,non:[14,16],none:[13,61],normal:[4,13,15,16],nosql:[11,12,14],notat:[10,12,14],note__:68,notic:[5,16,19,22,56,62],notif:[20,21,22,23,25,27,28],notifc:48,notifi:[21,27,35],notificationid:48,notificationupd:21,notifier_nam:36,notifiernam:39,notify_sysadmin_of_new_admin_us:[22,23,25],notify_sysadmin_of_new_organ:[22,23,25],now:[13,22,23,24,25,36,38,44,56,65],nsarrai:49,nsdata:39,nsdictionari:[39,49],nserror:39,nsexcept:49,nslog:39,nsmutablearrai:49,nsmutabledictionari:[36,49],nsstring:[36,49],number:[6,7,11,12,13,14,22,27,29,35,38,41,43,44,48,58,61,62,68],number_of_replica:22,numebr:48,oauth:[21,29,45,52],ob5ko:55,object:[5,9,10,12,13,14,15,21,27,29,31,32,34,36,39],objectforkei:39,objectproperti:48,o
 bjecttyp:[31,34,48],objectuuid:48,obliter:32,obtain:[45,53,55,56,58],occur:[7,20,35,43],occurr:11,octal:10,offer:[20,29,58,66,67,71,72],offici:[22,65],often:[8,10,16,27,29,62],old:[31,32,48,68],old_password:[31,68],oldpassword:[31,68],omit:12,onc:[0,11,13,16,22,23,25,26,35,37,38,41,43,44,56,58,61,68],onexcept:39,ongo:[29,62],onli:[5,9,11,12],onlin:62,onrespons:39,oop:56,opdata:49,open:[14,16,21,25],optim:[11,12,14,16],option:[5,9,22,23,25,27,39,44,49,53,56],order:[2,10],orderl:11,org:[

<TRUNCATED>

[28/37] usergrid git commit: Correcting links to keys for USERGRID-1281

Posted by sn...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/website/tmp/dependencies
----------------------------------------------------------------------
diff --git a/website/tmp/dependencies b/website/tmp/dependencies
index d23a3b7..8ddff40 100644
--- a/website/tmp/dependencies
+++ b/website/tmp/dependencies
@@ -1,6 +1,10 @@
 {:	data{:
-edges[[iPi[iQi[iQiF[iQiN[iSi[iSiF[iSiN[iTi[iTiF[iTiN:
vertices[U0[:	itemI"/bootstrap/bootstrap/:ET[;I"/community/;	T[;I"/css/bootflat-extensions/;	T[;I"/css/bootflat-square/;	T[;I"/css/bootflat/;	T[;I"/css/font-awesome/;	T[;I"/css/usergrid-site/;	T[;I"/favicon/;	T[;I"#/font/fontawesome-webfont-eot/;	T[;I"#/font/fontawesome-webfont-svg/;	T[;I"#/font/fontawesome-webfont-ttf/;	T[;I"$/font/fontawesome-webfont-woff/;	T[;I"/font/FontAwesome/;	T[;I"/img/alberto/;	T[;I"/img/alex/;	T[;I""/img/apache_usergrid_favicon/;	T[;I"%/img/apache_usergrid_logo_white/;	T[;I"+/img/apache_usergrid_logo_white_small/;	T[;I"/img/check_flat/default/;	T[;I"/img/dave/;	T[;I"
/img/ed/;	T[;I"/img/egg-logo/;	T[;I"/img/github/;	T[;I"/img/grey/;	T[;I"/img/intellij/;	T[;I"/img/jeff/;	T[;I"/img/michael_r/;	T[;I"/img/miked/;	T[;I"/img/nate/;	T[;I"/img/rod/;	T[;I"/img/scott/;	T[;I"/img/sh
 awn/;	T[;I"/img/stliu/;	T[;I"/img/strong/;	T[;I"/img/structure101/;	T[;I"/img/sungju/;	T[;I"/img/tim/;	T[;I"/img/todd/;	T[;I"/img/usergrid-logo/;	T[;I"/img/usergrid/;	T[;I"/img/usergrid_160/;	T[;I"/img/usergrid_200/;	T[;I"/img/usergrid_300/;	T[;I"#/img/usergrid_300_transparent/;	T[;I"/img/usergrid_400/;	T[;I"/img/usergrid_800/;	T[;I"/img/usergrid_card/;	T[;I"/img/usergrid_logo/;	T[;I"/img/usergrid_logo_205_50/;	T[;I"/img/usergrid_logo_260_50/;	T[;I"/img/usergrid_logo_720/;	T[;I"/img/usergrid_logo_720p/;	T[;I" /img/usergrid_logo_900_200/;	T[;I"/img/usergrid_logo_white/;	T[;I"/img/usergrid_profile_128/;	T[;I"/img/usergrid_profile_256/;	T[;I"%/img/usergrid_profile_256_white/;	T[;I"'/img/usergrid_profile_512_margins/;	T[;I"$/img/usergrid_profile_64_white/;	T[;I"&/img/usergrid_profile_background/;	T[;I"!/img/usergrid_screencast_bg/;	T[;I"/img/usergrid_small_100/;	T[;I"/img
 /usergrid_wiki/;	T[;I"/img/yourkit/;	T[;I"/;	T[;I"/js/bootstrap/;	T[;I"/js/head/;	T[;I"/js/html5shiv/;	T[;I"/js/jquery-1/;	T[;I"/js/jquery/;	T[;I"/js/respond/;	T[;I"/js/usergrid-site/;	T[;I"/releases/;	T[;I"/static/github-btn/;	T[:layoutI"/community/;	T[;
-I"/default/;	T[;
-I"/docs/;	T[;
-I"
/footer/;	T[;
-I"
/header/;	T:versioni	
\ No newline at end of file
+edges[[iQiF[iQiN[iUi[iVi[iViF[iViN[iWi[iWiF[iWiN:
vertices[X0[:	itemI"/bootstrap/bootstrap/:ET[;I"/community/;	T[;I"/css/bootflat-extensions/;	T[;I"/css/bootflat-square/;	T[;I"/css/bootflat/;	T[;I"/css/font-awesome/;	T[;I"/css/usergrid-site/;	T[;I"/favicon/;	T[;I"#/font/fontawesome-webfont-eot/;	T[;I"#/font/fontawesome-webfont-svg/;	T[;I"#/font/fontawesome-webfont-ttf/;	T[;I"$/font/fontawesome-webfont-woff/;	T[;I"/font/FontAwesome/;	T[;I"/img/alberto/;	T[;I"/img/alex/;	T[;I""/img/apache_usergrid_favicon/;	T[;I"%/img/apache_usergrid_logo_white/;	T[;I"+/img/apache_usergrid_logo_white_small/;	T[;I"/img/check_flat/default/;	T[;I"/img/dave/;	T[;I"
/img/ed/;	T[;I"/img/egg-logo/;	T[;I"/img/github/;	T[;I"/img/grey/;	T[;I"/img/intellij/;	T[;I"/img/jeff/;	T[;I"/img/michael_r/;	T[;I"/img/miked/;	T[;I"/img/nate/;	T[;I"/img/rod/;	T[;I"/img/scott/;	T[;I"/img/shawn/;
 	T[;I"/img/stliu/;	T[;I"/img/strong/;	T[;I"/img/structure101/;	T[;I"/img/sungju/;	T[;I"/img/tim/;	T[;I"/img/todd/;	T[;I"/img/usergrid-logo/;	T[;I"/img/usergrid/;	T[;I"/img/usergrid_160/;	T[;I"/img/usergrid_200/;	T[;I"/img/usergrid_300/;	T[;I"#/img/usergrid_300_transparent/;	T[;I"/img/usergrid_400/;	T[;I"/img/usergrid_800/;	T[;I"/img/usergrid_card/;	T[;I"/img/usergrid_logo/;	T[;I"/img/usergrid_logo_205_50/;	T[;I"/img/usergrid_logo_260_50/;	T[;I"/img/usergrid_logo_720/;	T[;I"/img/usergrid_logo_720p/;	T[;I" /img/usergrid_logo_900_200/;	T[;I"/img/usergrid_logo_white/;	T[;I"/img/usergrid_profile_128/;	T[;I"/img/usergrid_profile_256/;	T[;I"%/img/usergrid_profile_256_white/;	T[;I"'/img/usergrid_profile_512_margins/;	T[;I"$/img/usergrid_profile_64_white/;	T[;I"&/img/usergrid_profile_background/;	T[;I"!/img/usergrid_screencast_bg/;	T[;I"/img/usergrid_small_100/;	T[;I"/img/userg
 rid_wiki/;	T[;I"/img/yourkit/;	T[;I"/;	T[;I"/js/bootstrap/;	T[;I"/js/head/;	T[;I"/js/html5shiv/;	T[;I"/js/jquery-1/;	T[;I"/js/jquery/;	T[;I"/js/respond/;	T[;I"/js/usergrid-site/;	T[;I"/releases/;	T[;I"/static/github-btn/;	T[:layouto:Nanoc::Identifier:
+@type:legacy:@stringI"/community/;	T[;
+o;;;
;I"/default/;	T[;
+o;;;
;I"/docs/;	T[;
+o;;;
;I"
/footer/;	T[;
+o;;;
;I"
/header/;	T[;
+@\ufffd[;
+@\ufffd[;
+@\ufffd:versioni	
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/website/tmp/rule_memory
----------------------------------------------------------------------
diff --git a/website/tmp/rule_memory b/website/tmp/rule_memory
index 6c9028f..f8c6696 100644
Binary files a/website/tmp/rule_memory and b/website/tmp/rule_memory differ


[15/37] usergrid git commit: Add ability to start initial re-index seek with the UNIX timestamp. This will only start seeking from the time provided, rather than seeking all and discarding what doesn't match a filter.

Posted by sn...@apache.org.
Add ability to start initial re-index seek with the UNIX timestamp.  This will only start seeking from the time provided, rather than seeking all and discarding what doesn't match a filter.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/85cc9343
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/85cc9343
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/85cc9343

Branch: refs/heads/usergrid-1318-queue
Commit: 85cc93436a163c3ba21a7ac1286c6bce3daebeb4
Parents: ef8899a
Author: Michael Russo <mr...@apigee.com>
Authored: Mon Oct 3 21:21:19 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Mon Oct 3 21:21:19 2016 -0700

----------------------------------------------------------------------
 .../corepersistence/index/ReIndexServiceImpl.java | 18 ++++++++++++++----
 .../rx/impl/AllEntityIdsObservable.java           |  6 +++++-
 .../rx/impl/AllEntityIdsObservableImpl.java       |  7 +++++--
 .../graph/serialization/EdgesObservable.java      |  4 +++-
 .../serialization/impl/EdgesObservableImpl.java   | 16 +++++++++++++---
 .../usergrid/rest/system/IndexResource.java       | 12 ++++++------
 6 files changed, 46 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
index 19fbcfa..f37f9af 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
@@ -135,7 +135,17 @@ public class ReIndexServiceImpl implements ReIndexService {
 
         final String jobId = StringUtils.sanitizeUUID( UUIDGenerator.newTimeUUID() );
 
-        final long modifiedSince = reIndexRequestBuilder.getUpdateTimestamp().or( Long.MIN_VALUE );
+        final long startTimestamp;
+        if ( reIndexRequestBuilder.getUpdateTimestamp().isPresent() && reIndexRequestBuilder.getUpdateTimestamp().get() > 0 ){
+
+            // edge timestamps are UUID timestamps, we need to convert from UNIX epoch to a UUID timestamp
+            long uuidEpochNanos = 0x01b21dd213814000L; // num 100 nano seconds since uuid epoch
+            startTimestamp = reIndexRequestBuilder.getUpdateTimestamp().get()*10000 + uuidEpochNanos;
+            logger.info("Reindex provided with from timestamp, converted to an Edge timestamp is: {}", startTimestamp);
+        }else{
+            startTimestamp = 0;
+        }
+
 
         // create an observable that loads a batch to be indexed
 
@@ -165,11 +175,11 @@ public class ReIndexServiceImpl implements ReIndexService {
         }
 
         allEntityIdsObservable.getEdgesToEntities( applicationScopes,
-            reIndexRequestBuilder.getCollectionName(), cursorSeek.getSeekValue() )
+            reIndexRequestBuilder.getCollectionName(), cursorSeek.getSeekValue(), startTimestamp )
             .buffer( indexProcessorFig.getReindexBufferSize())
             .doOnNext( edgeScopes -> {
                 logger.info("Sending batch of {} to be indexed.", edgeScopes.size());
-                indexService.indexBatch(edgeScopes, modifiedSince);
+                indexService.indexBatch(edgeScopes, startTimestamp);
                 count.addAndGet(edgeScopes.size() );
                 if( edgeScopes.size() > 0 ) {
                     writeCursorState(jobId, edgeScopes.get(edgeScopes.size() - 1));
@@ -178,7 +188,7 @@ public class ReIndexServiceImpl implements ReIndexService {
             .doOnCompleted(() -> writeStateMeta( jobId, Status.COMPLETE, count.get(), System.currentTimeMillis() ))
             .subscribeOn( Schedulers.io() ).subscribe();
 
-        
+
         return new ReIndexStatus( jobId, Status.STARTED, 0, 0 );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
index 9070609..fe7a455 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
@@ -46,8 +46,12 @@ public interface AllEntityIdsObservable {
      * @param appScopes
      * @param edgeType The edge type to use (if specified)
      * @param lastEdge The edge to resume processing from
+     * @param startTimestamp An optional unix timestamp to start the seek ( it will be converted to an Edge )
      * @return
      */
-    Observable<EdgeScope> getEdgesToEntities(final Observable<ApplicationScope> appScopes, final Optional<String> edgeType, final Optional<Edge> lastEdge);
+    Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes,
+                                              final Optional<String> edgeType,
+                                              Optional<Edge> lastEdge,
+                                              final long startTimestamp );
 
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
index 0420a32..e6f3633 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
@@ -82,12 +82,15 @@ public class AllEntityIdsObservableImpl implements AllEntityIdsObservable {
 
 
     @Override
-    public Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes, final Optional<String> edgeType, final Optional<Edge> lastEdge) {
+    public Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes,
+                                                     final Optional<String> edgeType,
+                                                     final Optional<Edge> lastEdge,
+                                                     final long startTimestamp ) {
 
         return appScopes.flatMap( applicationScope -> {
             final GraphManager gm = graphManagerFactory.createEdgeManager( applicationScope );
 
-            return edgesObservable.edgesFromSourceDescending( gm, applicationScope.getApplication(), edgeType, lastEdge )
+            return edgesObservable.edgesFromSourceDescending( gm, applicationScope.getApplication(), edgeType, lastEdge, startTimestamp )
                                   .map( edge -> new EdgeScope(applicationScope, edge ));
         } );
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
index 78a1d4b..7c83207 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
@@ -64,8 +64,10 @@ public interface EdgesObservable {
      * @param sourceNode
      * @param edgeType The edge type if specified.  Otherwise all types will be used
      * @param resume The edge to start seeking after.  Otherwise starts at the most recent
+     * @param startTimestamp A unix timestamp to start seeking from if you don't have the edge cursor
      * @return
      */
     Observable<Edge> edgesFromSourceDescending( final GraphManager gm, final Id sourceNode,
-                                                final Optional<String> edgeType, final Optional<Edge> resume );
+                                                final Optional<String> edgeType, final Optional<Edge> resume,
+                                                final long startTimestamp );
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
index 20efe42..2504e87 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
@@ -20,6 +20,7 @@
 package org.apache.usergrid.persistence.graph.serialization.impl;
 
 
+import org.apache.usergrid.persistence.graph.impl.SimpleEdge;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,8 +75,8 @@ public class EdgesObservableImpl implements EdgesObservable {
 
     @Override
     public Observable<Edge> edgesFromSourceDescending( final GraphManager gm, final Id sourceNode,
-                                                       final Optional<String> edgeTypeInput, final Optional<Edge> resume  ) {
-
+                                                       final Optional<String> edgeTypeInput, final Optional<Edge> resume,
+                                                       final long startTimestamp ) {
 
 
         final Observable<String> edgeTypes = edgeTypeInput.isPresent()? Observable.just( edgeTypeInput.get() ):
@@ -84,13 +85,22 @@ public class EdgesObservableImpl implements EdgesObservable {
 
         return edgeTypes.flatMap(  edgeType -> {
 
+            final Optional<Edge> start;
+
+            if( !resume.isPresent() && startTimestamp > 0 ){
+                // the target node doesn't matter here, the search only looks at the timestamp
+                start = Optional.of(new SimpleEdge(sourceNode, edgeType, sourceNode, startTimestamp));
+            }else{
+                start = resume;
+            }
+
                 if (logger.isTraceEnabled()) {
                     logger.trace("Loading edges of edgeType {} from {}", edgeType, sourceNode);
                 }
 
                 return gm.loadEdgesFromSource(
                     new SimpleSearchByEdgeType( sourceNode, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING,
-                       resume ) );
+                       start ) );
         } );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/85cc9343/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
index be60177..2be5b87 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
@@ -61,7 +61,7 @@ import java.util.UUID;
 public class IndexResource extends AbstractContextResource {
 
     private static final Logger logger = LoggerFactory.getLogger( IndexResource.class );
-    private static final String UPDATED_FIELD = "updated";
+    private static final String SINCE_FIELD = "since";
 
 
 
@@ -321,17 +321,17 @@ public class IndexResource extends AbstractContextResource {
                                                             final String callback ) {
 
         Map<String,Object> newPayload = payload;
-        if(newPayload == null ||  !payload.containsKey( UPDATED_FIELD )){
+        if(newPayload == null ||  !payload.containsKey(SINCE_FIELD)){
             newPayload = new HashMap<>(1);
-            newPayload.put(UPDATED_FIELD,0);
+            newPayload.put(SINCE_FIELD,0);
         }
 
-        Preconditions.checkArgument(newPayload.get(UPDATED_FIELD) instanceof Number,
+        Preconditions.checkArgument(newPayload.get(SINCE_FIELD) instanceof Number,
                 "You must specified the field \"updated\" in the payload and it must be a timestamp" );
 
         //add our updated timestamp to the request
-        if ( newPayload.containsKey( UPDATED_FIELD ) ) {
-            final long timestamp = ConversionUtils.getLong(newPayload.get(UPDATED_FIELD));
+        if ( newPayload.containsKey(SINCE_FIELD) ) {
+            final long timestamp = ConversionUtils.getLong(newPayload.get(SINCE_FIELD));
             request.withStartTimestamp( timestamp );
         }
 


[36/37] usergrid git commit: Fix typo and unused reference

Posted by sn...@apache.org.
Fix typo and unused reference


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/fe3bf560
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/fe3bf560
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/fe3bf560

Branch: refs/heads/usergrid-1318-queue
Commit: fe3bf5607b8047bac7a60634f9c8220273c4b133
Parents: f0c9d44
Author: Dave Johnson <sn...@apache.org>
Authored: Fri Oct 28 14:31:27 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Fri Oct 28 14:31:27 2016 -0400

----------------------------------------------------------------------
 .../apache/usergrid/rest/management/ExternalSSOEnabledIT.java  | 2 +-
 .../org/apache/usergrid/security/sso/ApigeeSSO2Provider.java   | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/fe3bf560/stack/rest/src/test/java/org/apache/usergrid/rest/management/ExternalSSOEnabledIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ExternalSSOEnabledIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ExternalSSOEnabledIT.java
index cae65df..7a2df1e 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ExternalSSOEnabledIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ExternalSSOEnabledIT.java
@@ -50,7 +50,7 @@ public class ExternalSSOEnabledIT extends AbstractRestIT {
     PrivateKey privateKey;
     String compactJws;
     String username = "SSOadminuser" + UUIDUtils.newTimeUUID();
-    ApigeeSSO2Provider apigeeSSO2ProviderTest;
+
     //SSO2 implementation
     public static final String USERGRID_EXTERNAL_SSO_ENABLED = "usergrid.external.sso.enabled";
     public static final String USERGRID_EXTERNAL_PROVIDER =    "usergrid.external.sso.provider";

http://git-wip-us.apache.org/repos/asf/usergrid/blob/fe3bf560/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
index 8e3c463..b1a05e6 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
@@ -61,7 +61,7 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
     public static final String USERGRID_EXTERNAL_PUBLICKEY_URL = "usergrid.external.sso.url";
 
-    public static final String USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS = "usergrid.external.sso.public-key-freshness";
+    public static final String USERGRID_EXTERNAL_PUBLICKEY_FRESHNESS = "usergrid.external.sso.public-key-freshness";
 
 
     public ApigeeSSO2Provider() {
@@ -241,11 +241,11 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
         lastPublicKeyFetch = System.currentTimeMillis();
 
-        String freshnessString = (String)properties.get( USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS );
+        String freshnessString = (String)properties.get( USERGRID_EXTERNAL_PUBLICKEY_FRESHNESS );
         try {
             freshnessTime = Long.parseLong( freshnessString );
         } catch ( Exception e ) {
-            logger.error("Ignoring invalid setting for " + USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS );
+            logger.error("Ignoring invalid setting for " + USERGRID_EXTERNAL_PUBLICKEY_FRESHNESS );
         }
     }
 }


[16/37] usergrid git commit: Revert "Add ability to start initial re-index seek with the UNIX timestamp. This will only start seeking from the time provided, rather than seeking all and discarding what doesn't match a filter."

Posted by sn...@apache.org.
Revert "Add ability to start initial re-index seek with the UNIX timestamp.  This will only start seeking from the time provided, rather than seeking all and discarding what doesn't match a filter."

This reverts commit 85cc93436a163c3ba21a7ac1286c6bce3daebeb4.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/5db402d5
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/5db402d5
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/5db402d5

Branch: refs/heads/usergrid-1318-queue
Commit: 5db402d53e40b99901b2a97894cbdd77e60881b3
Parents: 85cc934
Author: Michael Russo <mr...@apigee.com>
Authored: Mon Oct 3 21:46:46 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Mon Oct 3 21:46:46 2016 -0700

----------------------------------------------------------------------
 .../corepersistence/index/ReIndexServiceImpl.java | 18 ++++--------------
 .../rx/impl/AllEntityIdsObservable.java           |  6 +-----
 .../rx/impl/AllEntityIdsObservableImpl.java       |  7 ++-----
 .../graph/serialization/EdgesObservable.java      |  4 +---
 .../serialization/impl/EdgesObservableImpl.java   | 16 +++-------------
 .../usergrid/rest/system/IndexResource.java       | 12 ++++++------
 6 files changed, 17 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
index f37f9af..19fbcfa 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
@@ -135,17 +135,7 @@ public class ReIndexServiceImpl implements ReIndexService {
 
         final String jobId = StringUtils.sanitizeUUID( UUIDGenerator.newTimeUUID() );
 
-        final long startTimestamp;
-        if ( reIndexRequestBuilder.getUpdateTimestamp().isPresent() && reIndexRequestBuilder.getUpdateTimestamp().get() > 0 ){
-
-            // edge timestamps are UUID timestamps, we need to convert from UNIX epoch to a UUID timestamp
-            long uuidEpochNanos = 0x01b21dd213814000L; // num 100 nano seconds since uuid epoch
-            startTimestamp = reIndexRequestBuilder.getUpdateTimestamp().get()*10000 + uuidEpochNanos;
-            logger.info("Reindex provided with from timestamp, converted to an Edge timestamp is: {}", startTimestamp);
-        }else{
-            startTimestamp = 0;
-        }
-
+        final long modifiedSince = reIndexRequestBuilder.getUpdateTimestamp().or( Long.MIN_VALUE );
 
         // create an observable that loads a batch to be indexed
 
@@ -175,11 +165,11 @@ public class ReIndexServiceImpl implements ReIndexService {
         }
 
         allEntityIdsObservable.getEdgesToEntities( applicationScopes,
-            reIndexRequestBuilder.getCollectionName(), cursorSeek.getSeekValue(), startTimestamp )
+            reIndexRequestBuilder.getCollectionName(), cursorSeek.getSeekValue() )
             .buffer( indexProcessorFig.getReindexBufferSize())
             .doOnNext( edgeScopes -> {
                 logger.info("Sending batch of {} to be indexed.", edgeScopes.size());
-                indexService.indexBatch(edgeScopes, startTimestamp);
+                indexService.indexBatch(edgeScopes, modifiedSince);
                 count.addAndGet(edgeScopes.size() );
                 if( edgeScopes.size() > 0 ) {
                     writeCursorState(jobId, edgeScopes.get(edgeScopes.size() - 1));
@@ -188,7 +178,7 @@ public class ReIndexServiceImpl implements ReIndexService {
             .doOnCompleted(() -> writeStateMeta( jobId, Status.COMPLETE, count.get(), System.currentTimeMillis() ))
             .subscribeOn( Schedulers.io() ).subscribe();
 
-
+        
         return new ReIndexStatus( jobId, Status.STARTED, 0, 0 );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
index fe7a455..9070609 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservable.java
@@ -46,12 +46,8 @@ public interface AllEntityIdsObservable {
      * @param appScopes
      * @param edgeType The edge type to use (if specified)
      * @param lastEdge The edge to resume processing from
-     * @param startTimestamp An optional unix timestamp to start the seek ( it will be converted to an Edge )
      * @return
      */
-    Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes,
-                                              final Optional<String> edgeType,
-                                              Optional<Edge> lastEdge,
-                                              final long startTimestamp );
+    Observable<EdgeScope> getEdgesToEntities(final Observable<ApplicationScope> appScopes, final Optional<String> edgeType, final Optional<Edge> lastEdge);
 
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
index e6f3633..0420a32 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/rx/impl/AllEntityIdsObservableImpl.java
@@ -82,15 +82,12 @@ public class AllEntityIdsObservableImpl implements AllEntityIdsObservable {
 
 
     @Override
-    public Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes,
-                                                     final Optional<String> edgeType,
-                                                     final Optional<Edge> lastEdge,
-                                                     final long startTimestamp ) {
+    public Observable<EdgeScope> getEdgesToEntities( final Observable<ApplicationScope> appScopes, final Optional<String> edgeType, final Optional<Edge> lastEdge) {
 
         return appScopes.flatMap( applicationScope -> {
             final GraphManager gm = graphManagerFactory.createEdgeManager( applicationScope );
 
-            return edgesObservable.edgesFromSourceDescending( gm, applicationScope.getApplication(), edgeType, lastEdge, startTimestamp )
+            return edgesObservable.edgesFromSourceDescending( gm, applicationScope.getApplication(), edgeType, lastEdge )
                                   .map( edge -> new EdgeScope(applicationScope, edge ));
         } );
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
index 7c83207..78a1d4b 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/EdgesObservable.java
@@ -64,10 +64,8 @@ public interface EdgesObservable {
      * @param sourceNode
      * @param edgeType The edge type if specified.  Otherwise all types will be used
      * @param resume The edge to start seeking after.  Otherwise starts at the most recent
-     * @param startTimestamp A unix timestamp to start seeking from if you don't have the edge cursor
      * @return
      */
     Observable<Edge> edgesFromSourceDescending( final GraphManager gm, final Id sourceNode,
-                                                final Optional<String> edgeType, final Optional<Edge> resume,
-                                                final long startTimestamp );
+                                                final Optional<String> edgeType, final Optional<Edge> resume );
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
index 2504e87..20efe42 100644
--- a/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
+++ b/stack/corepersistence/graph/src/main/java/org/apache/usergrid/persistence/graph/serialization/impl/EdgesObservableImpl.java
@@ -20,7 +20,6 @@
 package org.apache.usergrid.persistence.graph.serialization.impl;
 
 
-import org.apache.usergrid.persistence.graph.impl.SimpleEdge;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -75,8 +74,8 @@ public class EdgesObservableImpl implements EdgesObservable {
 
     @Override
     public Observable<Edge> edgesFromSourceDescending( final GraphManager gm, final Id sourceNode,
-                                                       final Optional<String> edgeTypeInput, final Optional<Edge> resume,
-                                                       final long startTimestamp ) {
+                                                       final Optional<String> edgeTypeInput, final Optional<Edge> resume  ) {
+
 
 
         final Observable<String> edgeTypes = edgeTypeInput.isPresent()? Observable.just( edgeTypeInput.get() ):
@@ -85,22 +84,13 @@ public class EdgesObservableImpl implements EdgesObservable {
 
         return edgeTypes.flatMap(  edgeType -> {
 
-            final Optional<Edge> start;
-
-            if( !resume.isPresent() && startTimestamp > 0 ){
-                // the target node doesn't matter here, the search only looks at the timestamp
-                start = Optional.of(new SimpleEdge(sourceNode, edgeType, sourceNode, startTimestamp));
-            }else{
-                start = resume;
-            }
-
                 if (logger.isTraceEnabled()) {
                     logger.trace("Loading edges of edgeType {} from {}", edgeType, sourceNode);
                 }
 
                 return gm.loadEdgesFromSource(
                     new SimpleSearchByEdgeType( sourceNode, edgeType, Long.MAX_VALUE, SearchByEdgeType.Order.DESCENDING,
-                       start ) );
+                       resume ) );
         } );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/5db402d5/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java b/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
index 2be5b87..be60177 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/system/IndexResource.java
@@ -61,7 +61,7 @@ import java.util.UUID;
 public class IndexResource extends AbstractContextResource {
 
     private static final Logger logger = LoggerFactory.getLogger( IndexResource.class );
-    private static final String SINCE_FIELD = "since";
+    private static final String UPDATED_FIELD = "updated";
 
 
 
@@ -321,17 +321,17 @@ public class IndexResource extends AbstractContextResource {
                                                             final String callback ) {
 
         Map<String,Object> newPayload = payload;
-        if(newPayload == null ||  !payload.containsKey(SINCE_FIELD)){
+        if(newPayload == null ||  !payload.containsKey( UPDATED_FIELD )){
             newPayload = new HashMap<>(1);
-            newPayload.put(SINCE_FIELD,0);
+            newPayload.put(UPDATED_FIELD,0);
         }
 
-        Preconditions.checkArgument(newPayload.get(SINCE_FIELD) instanceof Number,
+        Preconditions.checkArgument(newPayload.get(UPDATED_FIELD) instanceof Number,
                 "You must specified the field \"updated\" in the payload and it must be a timestamp" );
 
         //add our updated timestamp to the request
-        if ( newPayload.containsKey(SINCE_FIELD) ) {
-            final long timestamp = ConversionUtils.getLong(newPayload.get(SINCE_FIELD));
+        if ( newPayload.containsKey( UPDATED_FIELD ) ) {
+            final long timestamp = ConversionUtils.getLong(newPayload.get(UPDATED_FIELD));
             request.withStartTimestamp( timestamp );
         }
 


[22/37] usergrid git commit: Tools to remove an Admin User from an Organization using the management service and the graph manager to remove any lingering edges.

Posted by sn...@apache.org.
Tools to remove an Admin User from an Organization using the management service and the graph manager to remove any lingering edges.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/9c5f5993
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/9c5f5993
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/9c5f5993

Branch: refs/heads/usergrid-1318-queue
Commit: 9c5f5993248f7773e325130fcafb6d34f1053d28
Parents: c65f903
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Oct 20 12:11:58 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Oct 20 12:11:58 2016 -0400

----------------------------------------------------------------------
 .../usergrid/tools/RemoveAdminUserFromOrg.java  | 230 +++++++++++++++++++
 1 file changed, 230 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/9c5f5993/stack/tools/src/main/java/org/apache/usergrid/tools/RemoveAdminUserFromOrg.java
----------------------------------------------------------------------
diff --git a/stack/tools/src/main/java/org/apache/usergrid/tools/RemoveAdminUserFromOrg.java b/stack/tools/src/main/java/org/apache/usergrid/tools/RemoveAdminUserFromOrg.java
new file mode 100644
index 0000000..5cc184b
--- /dev/null
+++ b/stack/tools/src/main/java/org/apache/usergrid/tools/RemoveAdminUserFromOrg.java
@@ -0,0 +1,230 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.tools;
+
+import com.google.common.base.Optional;
+import com.google.common.collect.BiMap;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.apache.usergrid.corepersistence.CpEntityManager;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.management.OrganizationInfo;
+import org.apache.usergrid.management.UserInfo;
+import org.apache.usergrid.persistence.Entity;
+import org.apache.usergrid.persistence.Query;
+import org.apache.usergrid.persistence.Results;
+import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
+import org.apache.usergrid.persistence.entities.Application;
+import org.apache.usergrid.persistence.entities.Group;
+import org.apache.usergrid.persistence.entities.User;
+import org.apache.usergrid.persistence.graph.*;
+import org.apache.usergrid.persistence.graph.impl.SimpleSearchByEdgeType;
+import org.apache.usergrid.persistence.model.entity.Id;
+import org.apache.usergrid.persistence.model.entity.SimpleId;
+
+import java.util.List;
+import java.util.UUID;
+
+
+/**
+ * Will log information about an Admin User and an Organization, and
+ * if the "-remove" option is specified will remove the Admin User from the Organization.
+ */
+public class RemoveAdminUserFromOrg extends ToolBase {
+
+    @Override
+    public Options createOptions() {
+
+        Options options = new Options();
+
+        options.addOption( "u", "user", true, "Email of Admin User to examine" );
+        options.addOption( "o", "org", true, "Organization to examine" );
+        options.addOption( "r", "remove", false, "Remove Admin User from Organization" );
+
+        return options;
+    }
+
+
+    @Override
+    public void runTool( CommandLine line ) throws Exception {
+
+        startSpring();
+
+        String orgName = line.getOptionValue("org");
+        String email = line.getOptionValue("user");
+
+        if ( orgName == null ) {
+            System.out.println("org argument is required");
+        }
+
+        if ( email == null ) {
+            System.out.println("user argument is required");
+        }
+
+        boolean remove = line.hasOption( "remove" );
+
+        // get user and org objects
+
+        UUID ownerId = emf.getManagementAppId();
+        CpEntityManager em = (CpEntityManager)emf.getEntityManager( ownerId );
+
+        UserInfo userInfo = managementService.getAdminUserByEmail( email );
+        User user = em.get( userInfo.getUuid(), User.class );
+
+        OrganizationInfo orgInfo = managementService.getOrganizationByName( orgName );
+        Group group = em.get( orgInfo.getUuid(), Group.class );
+
+
+        StringBuilder sb = new StringBuilder();
+        try {
+
+            sb.append( "\nUser " ).append( user.getUsername() ).append( ":" ).append( user.getUuid().toString() );
+            sb.append( "\nOrganization " ).append( orgName ).append( ":" ).append( orgInfo.getUuid() );
+
+
+            //---------------------------------------------------------------------------------------------
+            // log connections found via entity manager and management service
+
+            Results users = em.getCollection( group, "users", null, 1000, Query.Level.ALL_PROPERTIES, false );
+            if ( users.isEmpty() ) {
+                sb.append("\n   Organization has no Users\n");
+            } else {
+                sb.append("\n   Organization has Users:\n");
+                for ( Entity entity : users.getEntities() ) {
+                    sb.append("      User ").append( entity.getUuid() ).append( ":" ).append( entity.getName());
+                    sb.append("\n" );
+                }
+            }
+
+            BiMap<UUID, String> orgsForAdminUser = managementService.getOrganizationsForAdminUser( user.getUuid() );
+            if (orgsForAdminUser.isEmpty()) {
+                sb.append( "   User has no Organizations\n" );
+            } else {
+                sb.append( "   User has Organizations\n" );
+                for (UUID key : orgsForAdminUser.keySet()) {
+                    String name = orgsForAdminUser.get( key );
+                    sb.append( "       Organization " ).append( name ).append( ":" ).append( key ).append( "\n" );
+                }
+            }
+
+
+            List<UserInfo> adminUsers = managementService.getAdminUsersForOrganization( orgInfo.getUuid() );
+            if (adminUsers.isEmpty()) {
+                sb.append( "   Organization has no Admin Users\n" );
+            } else {
+                sb.append( "   Organization has Admin Users:" ).append( "\n" );
+                for (UserInfo info : adminUsers) {
+                    sb.append( "       Admin User " )
+                        .append( info.getUsername() ).append( ":" ).append( info.getUuid() ).append( "\n" );
+                }
+            }
+
+
+            //---------------------------------------------------------------------------------------------
+            // log connections found via graph manager
+
+            final GraphManagerFactory gmf = injector.getInstance( GraphManagerFactory.class );
+            final GraphManager graphManager = gmf.createEdgeManager(
+                new ApplicationScopeImpl( new SimpleId( emf.getManagementAppId(), Application.ENTITY_TYPE ) ) );
+
+            final Id groupId = new SimpleId( orgInfo.getUuid(), Group.ENTITY_TYPE );
+            final Id userId = new SimpleId( user.getUuid(), User.ENTITY_TYPE );
+
+
+            // edge versions from group -> user
+
+            sb.append( "Edges from collectionToEntity:\n" );
+            SearchByEdge collectionToEntity = CpNamingUtils.createEdgeFromCollectionName(
+                groupId, "users", userId );
+
+            graphManager.loadEdgeVersions( collectionToEntity ).forEach( edge ->
+                sb.append( "edge from " ).append( edge.getSourceNode() )
+                  .append( " to " ).append( edge.getTargetNode()));
+            sb.append("\n" );
+
+            // edge versions from user -> group
+
+            sb.append( "Edges from entityToCollection:\n" );
+            SearchByEdge entityToCollection = CpNamingUtils.createEdgeFromCollectionName(
+                userId, "groups", groupId );
+
+            graphManager.loadEdgeVersions( entityToCollection ).forEach( edge ->
+                sb.append( "edge from " ).append( edge.getSourceNode() )
+                    .append( " to " )
+                    .append( edge.getTargetNode() ).append("\n") );
+
+
+            //---------------------------------------------------------------------------------------------
+            // optionally remove admin user
+
+            if ( remove ) {
+                // use normal means to remove user from org
+                managementService.removeAdminUserFromOrganization( user.getUuid(), orgInfo.getUuid() );
+            }
+
+            // make sure no edges left behind
+
+            String usersCollType     = CpNamingUtils.getEdgeTypeFromCollectionName( "users" );
+            sb.append( "Edges of type ").append( usersCollType ).append(" targeting user:\n" );
+
+            graphManager.loadEdgesToTarget( createSearch( userId, usersCollType ) ).forEach( edge -> {
+
+                if ( remove && edge.getSourceNode().getUuid().equals( group.getUuid() ) ) {
+                    sb.append( "    DELETING edge from " ).append( edge.getSourceNode() )
+                        .append( " to " ).append( edge.getTargetNode() ).append("\n");
+
+                    graphManager.markEdge( edge );
+                    graphManager.deleteEdge( edge );
+
+                } else {
+                    sb.append( "    edge from " ).append( edge.getSourceNode() )
+                        .append( " to " ).append( edge.getTargetNode() ).append("\n");
+                }
+            });
+
+            sb.append( "Edges of type ").append( usersCollType ).append(" sourced from group:\n" );
+
+            graphManager.loadEdgesFromSource( createSearch( groupId, usersCollType ) ).forEach( edge -> {
+
+                if ( remove && edge.getTargetNode().getUuid().equals( user.getUuid() ) ) {
+                    sb.append( "    DELETING edge from " ).append( edge.getSourceNode() )
+                        .append( " to " ).append( edge.getTargetNode() ).append("\n");
+
+                    graphManager.markEdge( edge ).toBlocking().lastOrDefault( null );
+                    graphManager.deleteEdge( edge ).toBlocking().lastOrDefault( null );
+
+                } else {
+                    sb.append( "    edge from " ).append( edge.getSourceNode() )
+                        .append( " to " ).append( edge.getTargetNode() ).append("\n");
+                }}
+            );
+
+        } finally {
+            logger.info( sb.toString() );
+        }
+    }
+
+    private SearchByEdgeType createSearch( Id node, String edgeType ) {
+        return new SimpleSearchByEdgeType(
+            node,                             // node
+            edgeType,                         // edge type
+            0L,                               // max timestamp to return
+            SearchByEdgeType.Order.ASCENDING, // order
+            Optional.<Edge>absent());         // last
+
+    }
+}


[29/37] usergrid git commit: Correcting links to keys for USERGRID-1281

Posted by sn...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/11ad1d76/website/tmp/compiled_content
----------------------------------------------------------------------
diff --git a/website/tmp/compiled_content b/website/tmp/compiled_content
index f32524c..91c5445 100644
--- a/website/tmp/compiled_content
+++ b/website/tmp/compiled_content
@@ -1,4 +1,4 @@
-{:	data{PI"/bootstrap/bootstrap/:ET{:default{:	lastI"\ufffd\ufffd/*!
+{:	data{\ufffdI"/bootstrap/bootstrap/:ET{:default{:	lastI"\ufffd\ufffd/*!
  * Bootstrap v3.0.0
  *
  * Copyright 2013 Twitter, Inc
@@ -7073,4 +7073,7058 @@ I"
 </section>
 ;T;@\ufffdI"/static/github-btn/;T{;{;I"\ufffd9
 <html><body><style type="text/css">body{padding:0;margin:0;font:bold 11px/14px "Helvetica Neue",Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility;overflow:hidden}.github-btn{height:20px;overflow:hidden}.gh-btn,.gh-count,.gh-ico{float:left}.gh-btn,.gh-count{padding:2px 5px 2px 4px;color:#555;text-decoration:none;text-shadow:0 1px 0 #fff;white-space:nowrap;cursor:pointer;border-radius:3px}.gh-btn{background-color:#e6e6e6;background-image:-webkit-gradient(linear,0 0,0 100%,from(#fafafa),to(#eaeaea));background-image:-webkit-linear-gradient(#fafafa,#eaeaea);background-image:-moz-linear-gradient(top,#fafafa,#eaeaea);background-image:-ms-linear-gradient(#fafafa,#eaeaea);background-image:-o-linear-gradient(#fafafa,#eaeaea);background-image:linear-gradient(#fafafa,#eaeaea);background-repeat:no-repeat;border:1px solid #d4d4d4;border-bottom-color:#bcbcbc}.gh-btn:hover,.gh-btn:focus,.gh-btn:active{color:#fff;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,.25);border-color:#518
 cc6 #518cc6 #2a65a0;background-color:#3072b3}.gh-btn:hover,.gh-btn:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#599bdc),to(#3072b3));background-image:-webkit-linear-gradient(#599bdc,#3072b3);background-image:-moz-linear-gradient(top,#599bdc,#3072b3);background-image:-ms-linear-gradient(#599bdc,#3072b3);background-image:-o-linear-gradient(#599bdc,#3072b3);background-image:linear-gradient(#599bdc,#3072b3)}.gh-btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 5px rgba(0,0,0,.10);-moz-box-shadow:inset 0 2px 5px rgba(0,0,0,.10);box-shadow:inset 0 2px 5px rgba(0,0,0,.10)}.gh-ico{width:14px;height:15px;margin-top:-1px;margin-right:4px;vertical-align:middle;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAtCAQAAABGtvB0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAB7RJREFUWMPt12tQVPcZx/HHGw0VG6yo1Y42YGIbjamT6JhEbc1AUodaJNbnsNwsFRQUsUSQQUEUNILGotFITTA2olVCI7FoiLdquOgEcFBAQS5Z5bLcXFZcdvfs7ZxfX+yqoLvQ6btO+5w3e3bOdz87+9/5n12i/3RGkSf
 NoV/RQppDnjTq3yjYg9O4kg2s50pOY48hg/E+v63NNtXIomww1dRmey+hCUMRywVthDKntKy8rDynNEIp9LEwaDAhL0XWohzRWIRFiEa53HdqK00cjBAEU16N9RD8MRuz4W899GWNYOQgp4FLfopsvJs4Zj79jKbRdPIas6AxURYLUukHzoiJAfqz1bsPsoq38G4+xLu4a+en528GiDzFcfGnuZIOIU0Jorr8SM3JhoKqk6YH9akQJEPSAifIij9vuo930rMYT46kfCxK7g77i+Oi7oh4hejqLvSb6uM0QrxQf8IJsrItv4AorLk/ojDx6NOnwrocF1qlOoRIq+yPWI07x/cK+lYniEI6H0IkSP0RRuys4uWC7LiQzcWvkYtsxYCp/GXhDFlyiuxcwhPDjQORfd7JvoGSM+SCb+lUa8dA5M6cc0slkxMkWpewJXNWfkWA/IRI78z2iUuP0jkujA1l2xqn1W+ApZ9xHL+4mWFUOkH2V0eVn5iR9mlb6VGlAEaK+kalnIypa69n1jouTLs7r6bNbN72/rs1ByEDPUV4C8PIo/Oqcb8TpCE+0LQ6cveRkMKIpmBrhBh7DzMxjP0VlltbHBeYJOvO7mhJMp7VVUl6Y8fD74ho4snNsogXnCAYd/amYMrMunhsW/06bXxXch0RBwni11X4CTlrgmXjhV3HVnec6WvqrWj/hl4vSJUNCCbnA5/CqgDxD5XrGyO061VRbVwRYCysgg8N1gRCpy/vKTO0aaq0tWI19AiiwQfeqiuZFZH3Ay2BlqiefTdU38KbhmqmIB3V0EOPaqRjylDXExEmYBU+wzmcw2dYhaF21P/P//yMpMn0Cr1BC2khvUGv0GQaOUTBY3kNn2Yl93EfK/k0r+Gxg1w+nDzn+17cqyo1tFsNVoOhXVV6ce98X/Kk4c4AV94u6GwbZKg51Gx7JOh4B7s6DFynL6jMsRrsG6QGGvudxXDj2PQF5KhhL+EWQyHtaS+p
 NhSjAAW64pLqPe0KiSHU8ovPEpHLtUoAJhyGL0YTEcENvsiGCdDeixaeYfhFoYuRrL5Xio2Yh+eIiOCKeYhvKU1RM4Tup5jhsctMPYBcmDv3qTUY+de51q8BkyZ2GY0Y8EEp6hkHWjs/ilvFPxqAu69f27I/q4WhaGK3J8/P/7n2HoB9yS/nprz2G3qBvGgGzaTp5PXm4q+2fzAbHwK6Fp9Z/V4qKJWxo0uOWb2aIfRyCqfzCc7jTzhDeMhYvQFRGR2MoI8eB6OuHwbkPAyrXwdY+iqOVP2t+VLrlYYzVScsOqAxkUjKAW5/QS6P3u04hRhmup+OYemZA2/BtmNHNlF36gpzgJkn2Yq4GVa9VQ13ojsJcDA3dxHBXdJIpqQ5diQ8hnHkNtyI0g47QqLLieD2+W3Gym22omwroN9KRCOufewIUZXSWCIxCajea0eiyhgVG4jYTWFwhDDYm+hmjICoGlvRVQJgGlHCZIseDudyEBGmQlZX2JGVPREiJhNFejsh8H4WESZEGlbobYW+1dhBRHR7MZzMvUwiIrHVpLEjgZZYNRHRvnBnyNYzRERxnQxbIYnaKiKidqdI18dERL0VsBekkGNVRESn/ZwhmV8QEW1ofoTIFk0ljSWPU3OdId+nkgd5qMsfI+HGMB37sH9CeJjJMZJ2nP3Y748Pw+w/3cxdolrpZ30P/nK3EyURfr2/N3Ra1HZkcwfj89AHb2PBtZIQy7NERgeC8NbVpQI2dtsK3T+B/CVwoR+3L0avA+IoEVHaXMj6a3bk6DnG+j0YyYvzlnVezPk+URNqp9bqMzqLq7GJiChiK+NQsX3h1wLlWTSy9b3EgMJp2CRftvTZXt3UiBwsISKiEWUHAHGzHakNDrIG9fLzuUEK5fb5CNYcXCnakEM3sAlvEhHxmBCNQrq9xlZggqw3ad6dh1fNyoRQennhr433bUjN4z8bb78uqmUzJttP4Z7dyAjMg1fud0IvHxduBJsZa
 /UrzBF3HyWBxxj7mzHu0bmUBjRfIi8pUuptL9TeseoAUWl9oK2zX+Cp/AaQnmxEROqoGB2Ddxn9Dt+JUkU+SOpmJLYmd0T1EBHxME5jROvUcU8KuMk1QNXJsa+atuG6pV5TAmiK1N/qG4nIxWVW5VFAqsWYfghclXlhJobwj4YYfHLxUnwTI74prnGNhogn8VeMMFPTKfyw//4MT7kbUJX+bim9VBSuKQI0RZqiviZ6yd9fVQLI3Xj6HoRJzedj+hiCng/E5mxsYCTWxTeGGvmAoGOs0929gJ/S042nXA1Yxbr8qhPtpUDblY5r5od1+VYDIN/CNHp2MEl3NKsl0MpgCDIj2L74gVJWi/bY4wUc2IzGh7DdfiXAorV/gUXsgRs5HjyHKPXl3MbknpVGAYIcbkzuyW1UX8EauJLTwXjEohAqyJDQhkLEYjwNPnDHcmTgS1zGZfwdGVgOd/pvmX8Bbv8r+TZ9z+kAAAAASUVORK5CYII=);background-repeat:no-repeat;background-position:0 0}.gh-btn:hover .gh-ico,.gh-btn:focus .gh-ico,.gh-btn:active .gh-ico{background-position:-25px 0}.gh-count{position:relative;display:none;margin-left:4px;background-color:#fafafa;border:1px solid #d4d4d4}.gh-count:hover,.gh-count:focus{color:#4183c4}.gh-count:before,.gh-count:after{content:' ';position:absolute;display:inline-block;width:0;height:0;border-color:transparent;border-style:solid}.gh-count:before{top:50%;left:-3px;margin-top:-4px;
 border-width:4px 4px 4px 0;border-right-color:#fafafa}.gh-count:after{top:50%;left:-4px;z-index:-1;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#d4d4d4}.github-btn-large{height:30px}.github-btn-large .gh-btn,.github-btn-large .gh-count{padding:3px 10px 3px 8px;font-size:16px;line-height:22px;border-radius:4px}.github-btn-large .gh-ico{width:22px;height:23px;background-position:0 -20px}.github-btn-large .gh-btn:hover .gh-ico,.github-btn-large .gh-btn:focus .gh-ico,.github-btn-large .gh-btn:active .gh-ico{background-position:-25px -20px}.github-btn-large .gh-count{margin-left:6px}.github-btn-large .gh-count:before{left:-5px;margin-top:-6px;border-width:6px 6px 6px 0}.github-btn-large .gh-count:after{left:-6px;margin-top:-7px;border-width:7px 7px 7px 0}@media(-moz-min-device-pixel-ratio:2),(-o-min-device-pixel-ratio:2/1),(-webkit-min-device-pixel-ratio:2),(min-device-pixel-ratio:2){.gh-ico{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABaCAQAA
 ADkmzsCAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE81JREFUeNrtnGl0VFW2gHcIIggINLQoaj9bQHmgjUwRBZMK2A4Iora7CAFjGBIRFESZmwZkEgkiAg0oiigIggJhkkGgAjIpgyAkEAhICCGQkEDmoaru937UkKqQhFTwvbd6Lc5dK6tycm/t8917zj57uhH5/2h+Uk+aSGt5UoIkSJ6UVtJY6omf/Ec1P7lPnhBTKUd7afQHwqi//l1n6V69rHa16SXdox9pZ63yB319LWknplqdFgw78V32EdsV7Nhsadm/xn07793qwWKSdlLrj4CoqkP0vFLKcVYHaNWbFnCXBNbpvHNOYQqltIILP86s01kC5c83i/GYHncMO6Rg9JlPT648tSJ+wclRZ0MKnTDHtOVNCWgoQWP655x1jjub1UzkbQYzibXkODvPjO4nQXLXzWD00AJFGXZ5128FO7EUHwU7Y469m6oomq+vVlpAbQn8/n17EYARQ1eqe/6R6nQ3fgKwF64YL4FSu7IYvdSmvFawNRYLFn5gIn14hVfoyxQ2YcGyNbZ3oaI2NVdKQBUJiJ5s2IErW0dIkLSQO0Skhtwp9aSWVJWa8qgEbR7JVTDs302QAKnMqtQ2WqhE5p3fn7onYx5PUM3rblWjw5UFF/ad2x+Zp2iBtq6EiPsnRBpFwBkefOXFNi+ISQKlo4fGChJT+25hr9KEM2AvGhch9/uOcbvGK+FF5/aztu9hten32kz9tLE+oZ21ldbT5rpR7eFxrD+3P6xI0RN6u68q976gnCQglSYiGQcNe9LOt8OqBvcLnTZo3rtjI9p3G/p6yn7DyDwuQhOuQE7ifUE+q2IdppiN/UdYxj3mK4qihXrNQ2PZFMV8jXtZtv+IGUXf9VFEg93zATtPi0jVoqsAdqs1p1hjGXYAa7bUFeFpDPjp31LfN4zbNEWJusga7hXpf7VU5YsSni3Cva
 ydnqLoRb3NFxl/aVGYDnwhIiJ/zU2ijJafKgEiInwJhVf+0tw3kO6K2Ti/jzYiemf/3LJAzIaaRGiTuM+Mol19kbHmPcDOgyIi7TrnpZQFYthnvyM1RWiMAd8P9Qmkx+fKqAxGiIjolLIwFEVPqJ8II4dmKT0W+iLjzHoo2OX4fGQJ5bScxNr1RUSKDkPCWp9AwuKVpQncIyJi/r1cEPRRERotPquExfsiI/M0ZI91fM67SLlt21MiItkTIfOUTyCh+crm1Y7PZnv5ID26iIhs3aiE5vsiw5YLSS87PjuWddkt6RURkaRXwJrj2xpB2T7C8TnkBiDj+omI7PinovgiA2DV03Kn1JXaRmH5IGfNUltqf/cMgM8gS8Icn/vnlw/ydR8RkaWvVwZkyUtyp9SWWrYL5YMc6iS1pdZXL/sM0tuqvDNe22ugthuXWh6G2Vg4QFtr2yETld5WX2TYc+DgVNoTSDvWlcth5yla0/bQh2DP8glkSLbyxpcaoK211br9ZqNskLHp0/poW23Zf5kyJNsXGUXHIHbl+adovTco8Q1s5YBs4mnang04tRaKfvMJZPp5JfIozfkbzZiyKa6XrXSMoZnpP/E3mvJwRKwyI9GnJ/I5pB6SZiJyhwT88h7ZZWD8jMMXaZZ2FPjUJ5Aftihm49tnaDr1tc9G2Xek714VP/5KZL7ZCdDT/nZ2VErMMXsMH9KGh7/uZDaUzZt9WiPdwTAiekldOiV3rx4c0S59aMGm/GQM53wqLDjBIrrjsHjrRvQyDKCbTyB5I/sUKrpYRB/SuMHr+QELlo1xLpDwwkt7sWBhPnVFRHSx0rewYIRPINVIgbObpUPCI8RdWu6weNdOdYEUpQ99yn3y7fLk2c3ARXwyg4QOSxMUNTSYVitD1PranLXDNi3vm6soDnW84BAj6ICfiIgGq6EsS+BJ36xGRgDGnKHyeEIbrGkLvjBv7J+fCmAUASTMcp5YQx6fMxQDGOajYUr
 VgjUDchVNXRrA4rF71VBDDWVMujL1Ur+CAVlhi9yq+j69rLyZW7AaH/13biceiq6azdIh8ysMDAzI3A1X1hWk5p+9uMzp03d8VYsygJP46iqIEHLsYIhd0VNLA23b5yzvu3HAuhD71EvKzAv988ddGbXNidFYzygh9uMH6eG7Z0U7CiE36fWedTrv/yBvFYvsRWnr4dLy/EsZO5OXSwN5TEz9QvOSgULaVMJ54zaWbIozG4qmL1nCDnawo7d1bJwy4ee+eaOS/rVbRER76lXFbGyJ5WsfZ69LTi/sYM1cNVFMYpKO1pyLmyB5eX5a6u74aDGJadUkWxZgI6SSHjvN+HFrbIhNUfrHbfiqcFSobfRRZdye3kXDTg87rN11p6KE2LYd50ceqmz8gR4UAFw9snB4nc62gnPbID7ampOyN3HH0n9m/OpwSqh8gEOEp9kRe3BglnPXuKYMuGBm2OEe9ogrrp1kUNaJA2yn081EhGjNcafKzYLMExiJOwxr3ln3TnKMx24yqkUwW4t2rjzdJ7u07bBP1venbDFsIehmY3RUYzDnS90OExnEzQcBRWjKl1hsMXuPfnJ2aGZYvqJGeOGQ1LlJ+4/YYrCwiCZ/TNwUf55hFj+TChhcZi8z6Yz/Hxb3pSqvsMIzOOc+VvDSHyjo/6JRhba8xXzWYGEHa5jLQFpTRW61W+1Wu9VutVvtVvtfbf5SXx6URyVAOkqgBEoHCZBH5EH5k/zH2BJ+0kAekcBSs+4mMUmgtJD6f0juXWtpF/1A1+kJzdBCLdB0jdNonaLPaM2b/vKGEiAmMT3a5cuRR79J2ZuTaM2yW+1FRVk555J3H1m6cPjDz4lJTNLu5rK8VfRFXeXI9JZ65OlK7VrpQoKa0kpM1YOXjEne5cj0lhp2LEyyLB5dPVhM0koqc+PUT3tp3A1SDI7juIao74++kQRWDY6ekpNIBVrWuVUTqwZLoDTyFaOF/lRywD3tkXlDsgdnR+aV
 ErHfqS18WhdNxTS8b/qx6zNvnOEwv3LG4RB7tvSj74aLSZr6sF40Uj1i8q9Zo1I2x17YZ49xeSb2mKR9P8RNT+lt9UDJ1YgKY7QQ09aP7J7JhQwW0ZMHil0FqvBXevMl1zymWcHWGWKS5hVCUX+dXTy8t3I2xRW6aiC2sIzPWMgytrrqITbGDczxgJldofXyUK1OJ6M9IH6jV9kRLKrzmsvHBzgZXauTPFQRjGWuYb1eFH3SHoOF9YygM3fjvg/4cQ9/ZyQbsNhj1sSHFblRvtEb6f17a3VKsrjHlUY/bnh/qUJ/0lyXnLfU6iT33ghknmtIYzLS9mBhEU+XHcGiGs+wGEvanjEZbpR55QqoJYHxxU9jy9Tm0lYelnrlTsT60kLaj3mMLa7LTq29QaWKvukazsxkWwzRvFCBu+VHV9baYmYmu1HeLGdQbbfPcmPMw18ecW57baSuiPhLbakvDaWRNJQGUlP8pI60dZ7REn/muS7dMVvalrlStKVrx5iThIWoAeF6RL/QTuXuM930O02MfIsoLHOTnCAFWlZcqtHYCLvVOZaPREQ2js5MSNj476HOTS/oul3dVD148eikmLzLu6JERIhyLnvruIgyVLH662HHQCZfNiy8RxVd5RzYQQ0U0ZraVrvpaxqpvfRFfVRv00A94jxjE1V4z7BMuez8/XCpK6VK7Q6Zp50Yyx3POiXG8eu1+FmDxfTwc++/8dWYtVO3zoievGTM8L71n/5osOuKtIPO57/c8XvmmXodSq0e0n6OQbyZm7OLt0REwhLck8XQWLWW2DkK1J2i65UmIsKgvF0DXVUTpanihltnODHicO7ReaeLSx6yfi+ZtrYXubInUJDsnMp3EOvo+XGmNLweo6omKIqZw4cZ57hbfa5WaF9HCctx3q1/HTnkzEAmarWSMv7SxpENwU57V19hMhVsRVfFWaZGAHaAvEv3t70eRB1DmnaJr6nh6BuaUlGQwRlunb94uuuqn
 iVEVFszyTmmL919ddOPVBTk2ilp41refO7oi54sJW+X+QdH8vn3/Tzi6puaUFGQ8AK9zymiReK+HoaimEtmGBte+gUAK43dfW3P/FDhJ3Ktp9k1lfgrVoDUgyUml9Yz2xRl7BVGu/sCy0tTX3cccC1vRo5PUxSzXb1qrfq3NwwAY527q/bsd25UzOH1TOIbuOv2jGgAw4jwTv/py47hbDnOfe6+Az5geEwlGm37zdnzD08Z28Y4x+POfNS4P/MUPrUNE92710uOHss/vUB6z3VMrLRZboxHfcTwmEoZMxzPsvd8TxmnvwPAxp2unmXd8LGlHnApXGobVoAzq7xA+u9XlCHZBLtB3vIVJMRdB0Hg0CxF6fOrp4yMIwB5R4t7Tk7yFaQos9iDz/sVIMO7MiI8TVGmpuC2XwbM9RVEUZd6vGNaiqK8fsVTRt5lgGvfFfdcXIDvzW0lZ6wAyE/zAulVoCizDxf3jFlVCRC3Izr3gKKEFnjKsOYCXJxR3JO+sBIg7lud8iGALc9b+RqKMttDYU5e5ztIcaXw3I2ONedlXAKQMKm4J2u67xwea25CyR4RcWj+qJXFPXOW+ooRZi0uEJ/xTVkgh6ZLA2kgDaWh/ClxpK8YthxpIHdJfblL7v55SikgYVZFGe+hAX6Y7CvI0Mziq8evVErWc9lyAI5/KjWlljSQ+lL/QBdfQfKPSSOpL3+WBlL32AIAe64XyBt5ihIZqy/pSxqmofr8x7NCbb6BjErV7mrWLhqi4RGxihLpVfNoTQZIO3S+Z7rZ9hqhPEcfcn0k2UZ3zHQh5FpE6mEA6yUvkDGXFaVvkjbXlvqidtUXJg6efNk3kBlHNVK76qv6sgb1vaAoI7y0VuE+gMzT6zvSkhfpygu8zAofQT4mkm68SvdfXsk8A1D4sxfIxyccc/rzQds1swudeZxns38ckFdxjDHpRNEBE4/TaVcfR3nUTK9yWttcAMP2RS8edDnP1OW0Dxjbi/
 3VMc87DHybt2O9drVzng+jMU/yBO15ivEpe9/JqhjGiKsZuxlIV54giKcmjHL0Rq/3WuyvOkazcpw4rOu7pJ00TXyQgxXE2EUD95fVcFvS3qU9F4c59FafXdzjqjvgDpbYYtaeHHatfOPxnaz1J+wxRHkYPFsdz/fCKC+Q+o46xot7pJkz/t5cgqT17Nvpxx7KNx4PEe6VHG+WvMfp2Xi/wkTHsVecte9Nnd5JrH6y8iEWYMFyee/6E7OSR5Zws8ZkzL6w4cSFfViw8EmxBaWNHSXQY9MJ9LbjjS0OizUyVO4UoQexyUuDusnD4idCI8Jzvkj7tYRtdShrIeE8UMIhqOMsE4StJSMhtX90WaxLRES0pn6rNv15zJ10YS47sGB5v0QZ7ftphiNs9ynPecZaXHGxLceL4ZxSQp3lyZslQPypxQps1+KaPSuPSUOpJ40kIHmXN0jyrtsfKiWTEnDWFRjqdd1fi6Y7VLAa+qQIJhYPO6RW/VyriFCf56LnXz+pVs/jWe4u4WmaHJ58ZF7R9FKiYOcdz+SDgdJcBD++MWwJG6oHS5AEStDC4dfPqfXX+/7NPxrs9OR/LyXiRtC6E84BxmtNqjMu7adQq9p0p4bq3/XN4ri8R1Rx1nUOc0096fjb2pPFlrSHlAjX+whNnpUmIjQk17CnHVkzacGwHz/OOecOOlx1V8kvLfEVTZs86z7vjdLCbP62ZUNcOmqt+ovwr3nnFLWrVfMc7/OMTe9lU5acUULsY9OVyM3XJSKWO75hSLZteWnlN/hz2FnNtKNqsDQTP6IAu2EzChyqIGe7vQguTAXI3w5p673Cew9XDU7c5sQ4WkY5FM+fPNDTlS6Yr37UK9gyLs1zKn17WlG+ilOU1fHK8AMlMJzh1hD7yQN0KSMu2cqVLohdWTVYWs6rx3qvcq1xABcmApwb7gVSTVpWDT65xnliIa3KDhR/tjrePeyv9TbewLLv13mJ05M++31IlrJoi6L
 MXKQoK9cro496hZO+cF27Kp7Pyq4kYpD7nYRNdTpLR7nH+gxRfM7k3Fj4fRS4fp5+0w3iJ/dIhzqdEza4iQeVF8VtzJZZxRFcy1tNmOrKiEy9pER9pigffaEos2d4gmgjtbium5XMVo84SWly3BHc1MNms5ikndwtVURSN8CZ0d4glzZKFblbAsTU7R+ph4ujxjcKSHezxUy75Ea5pv0L2jGA4fQbf1r5cL7i+jljigtE/TVC013XTEuxxdD9BlL8XWFPsOZsiqoeLCZ5Sv47aQs4TPvL7wHED4Rz26SjmKoHb55RlOnGWF6B8jfescfMvuCxMo5pmNYQGXXUjTDHBfLeCa2h4Z55xtlJ9hjeuXGmB3/meOQHz6yf+sCzYkrcDo5Y/a6JAGsmQfKeB57dMK1YnwGzK1QARxVGY4k+6WXEZ+s3YdnKrFmK8vV4RZn6kaKGZhafFWpbexILoytaZ0ckeR4uU965bYXpsGEawPz3ADZFAYbV09TPpX+F84f48TaW07+MuC7ya7YrZsITSrO9Rl5N+BkLb+NDdpcW7Lr+5T3AuHbKMEqxuGLw7a1EEV5gs2HZEuuVHyzzeCtna6xhYXNZKrfcm9aTuArZvsfpQWWqH3iAT7DYY2J+m5Ra9utjofbJl3cfNSxY+Jj/qlzVAFXoxvfXJ6PdLY8VdKHyJRz40YnFWLDk7Np99NPECWkDc18vCrWH2sKLBuW8n7bw3N6jebuwYGERwdxkrQi1eJ4PiCaONPLIJZXjrGYyz3DzZSIi+PEkE1zJ6FKOzYwngP+U/5xBDQKIYDKLiWYzm1nDl0ykH229/0PArXarlWz/A3bbfoDcyFIFAAAAAElFTkSuQmCC);background-size:50px 45px}}</style> <span class=github-btn id=github-btn> <a class=gh-btn id=gh-btn href="#" target=_blank> <span 
 class=gh-ico></span> <span class=gh-text id=gh-text></span> </a> <a class=gh-count id=gh-count href="#" target=_blank></a> </span> <script type="text/javascript">var params=function(){var d=[],c;var a=window.location.href.slice(window.location.href.indexOf("?")+1).split("&");for(var b=0;b<a.length;b++){c=a[b].split("=");d.push(c[0]);d[c[0]]=c[1]}return d}();var user=params.user,repo=params.repo,type=params.type,count=params.count,size=params.size,head=document.getElementsByTagName("head")[0],button=document.getElementById("gh-btn"),mainButton=document.getElementById("github-btn"),text=document.getElementById("gh-text"),counter=document.getElementById("gh-count");function addCommas(a){return String(a).replace(/(\d)(?=(\d{3})+$)/g,"$1,")}function jsonp(b){var a=document.createElement("script");a.src=b+"?callback=callback";head.insertBefore(a,head.firstChild)}function callback(a){if(type=="watch"){counter.innerHTML=addCommas(a.data.watchers)}else{if(type=="fork"){counter.innerHTML=addC
 ommas(a.data.forks)}else{if(type=="follow"){counter.innerHTML=addCommas(a.data.followers)}}}if(count=="true"){counter.style.display="block"}}button.href="https://github.com/"+user+"/"+repo+"/";if(type=="watch"){mainButton.className+=" github-watchers";text.innerHTML="Star";counter.href="https://github.com/"+user+"/"+repo+"/stargazers"}else{if(type=="fork"){mainButton.className+=" github-forks";text.innerHTML="Fork";counter.href="https://github.com/"+user+"/"+repo+"/network"}else{if(type=="follow"){mainButton.className+=" github-me";text.innerHTML="Follow @"+user;button.href="https://github.com/"+user;counter.href="https://github.com/"+user+"/followers"}}}if(size=="large"){mainButton.className+=" github-btn-large"}if(type=="follow"){jsonp("https://api.github.com/users/"+user)}else{jsonp("https://api.github.com/repos/"+user+"/"+repo)};</script></body></html>;T;	@\ufffd;
-@\ufffdI"/img/miked/;T{;{:versioni
\ No newline at end of file
+@\ufffdI"/img/miked/;T{;{o:Nanoc::Identifier:
+@type:legacy:@stringI"/bootstrap/bootstrap/;T{;{;o:Nanoc::Int::TextualContent:@filenameI"b/Users/ApigeeCorporation/src/usergrid-code-review/website/content/bootstrap/bootstrap.min.css;T;I"\ufffd\ufffd/*!
+ * Bootstrap v3.0.0
+ *
+ * Copyright 2013 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world by @mdo and @fat.
+ *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 
 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decorati
 on:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select
 ,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-w
 idth:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,o
 l{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height
 :1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre co
 de{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-
 3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-
 6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offse
 t-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col
 -md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offse
 t-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-
 2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-lef
 t:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.tabl
 e-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.activ
 e>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.tabl
 e>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-
 overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>t
 d:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],sele
 ct[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color eas
 e-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-l
 eft:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webki
 t-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px 
 rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding
 -top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-ima
 ge:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.dis
 abled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;backg
 round-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{col
 or:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disab
 led,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disable
 d]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{paddi
 ng:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-
 webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e0
 16"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e04
 1"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-mo
 ve:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:
 "\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder
 -open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-
 link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:
 "\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{
 content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-l
 eft:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outl
 ine:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .care
 t,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table
 ;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown
 -toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-g
 roup-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>
 .btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>
 .btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radiu
 s:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{m
 argin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radiu
 s:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav
 -pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after
 {clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-hea
 der{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@
 media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(
 min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webk
 it-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-
 menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.n
 avbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav 
 .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navba
 r-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav
 bar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-me
 nu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.paginatio
 n>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination
 -sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:
 #fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-heigh
 t:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:
 4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbe
 ed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow
 :inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.act
 ive .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%
 ,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 5

<TRUNCATED>

[25/37] usergrid git commit: Add missing bad_confirmation_token.jsp

Posted by sn...@apache.org.
Add missing bad_confirmation_token.jsp


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/1abafe72
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/1abafe72
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/1abafe72

Branch: refs/heads/usergrid-1318-queue
Commit: 1abafe72be217bdc827f6aa386aae93e81260f33
Parents: 9c5f599
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Oct 20 16:43:30 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Oct 20 16:43:30 2016 -0400

----------------------------------------------------------------------
 .../UserResource/bad_confirmation_token.jsp     | 33 ++++++++++++++++++++
 1 file changed, 33 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/1abafe72/stack/rest/src/main/webapp/WEB-INF/jsp/org/apache/usergrid/rest/management/users/UserResource/bad_confirmation_token.jsp
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/webapp/WEB-INF/jsp/org/apache/usergrid/rest/management/users/UserResource/bad_confirmation_token.jsp b/stack/rest/src/main/webapp/WEB-INF/jsp/org/apache/usergrid/rest/management/users/UserResource/bad_confirmation_token.jsp
new file mode 100644
index 0000000..ecd74b8
--- /dev/null
+++ b/stack/rest/src/main/webapp/WEB-INF/jsp/org/apache/usergrid/rest/management/users/UserResource/bad_confirmation_token.jsp
@@ -0,0 +1,33 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+	pageEncoding="ISO-8859-1"%>
+<%@ page import="org.apache.usergrid.rest.AbstractContextResource"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+	<title>Error</title>
+	<link rel="stylesheet" type="text/css" href="/css/styles.css" />
+</head>
+<body>
+
+	<p>Confirmation token invalid or expired</p>
+
+</body>
+</html>


[24/37] usergrid git commit: Ensure the admin invited to org email is sent even when external SSO is enabled.

Posted by sn...@apache.org.
Ensure the admin invited to org email is sent even when external SSO is enabled.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/48d306f4
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/48d306f4
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/48d306f4

Branch: refs/heads/usergrid-1318-queue
Commit: 48d306f455c945c15a91c3c53637b6920cbb03d3
Parents: 04e49da
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Oct 20 11:05:56 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Oct 20 11:05:56 2016 -0700

----------------------------------------------------------------------
 .../usergrid/management/cassandra/ManagementServiceImpl.java     | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/48d306f4/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 35fdd30..c0915e4 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@ -1768,9 +1768,7 @@ public class ManagementServiceImpl implements ManagementService {
         invalidateManagementAppAuthCache();
 
         if ( email ) {
-            if(!tokens.isExternalSSOProviderEnabled()) {
-                sendAdminUserInvitedEmail(user, organization);
-            }
+            sendAdminUserInvitedEmail(user, organization);
         }
     }
 


[08/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/619aff37
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/619aff37
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/619aff37

Branch: refs/heads/usergrid-1318-queue
Commit: 619aff37417f162c93a087cfaa3a62539c828768
Parents: 6474c03 33a3e21
Author: Dave Johnson <sn...@apache.org>
Authored: Tue Feb 9 15:26:56 2016 -0500
Committer: Dave Johnson <sn...@apache.org>
Committed: Tue Feb 9 15:26:56 2016 -0500

----------------------------------------------------------------------
 CHANGELOG                                       |  13 +
 README.md                                       |  11 +-
 content/docs/README.html                        |  20 +-
 content/docs/_sources/index.txt                 |  19 +-
 .../_sources/installation/deployment-guide.txt  | 142 +++---
 content/docs/_sources/introduction/overview.txt |  32 +-
 .../_sources/introduction/usergrid-features.txt |   4 +-
 .../docs/_sources/reference/contribute-code.txt |  41 +-
 .../creating-a-new-application.txt              |  16 +
 .../using-usergrid/creating-account.txt         |  21 +
 .../using-usergrid/using-a-sandbox-app.txt      |  39 ++
 .../_sources/using-usergrid/using-the-api.txt   | 150 ++++++
 .../file-storage-configuration.html             |  20 +-
 content/docs/assets-and-files/folders.html      |  20 +-
 .../assets-and-files/legacy-asset-support.html  |  20 +-
 .../assets-and-files/retrieving-assets.html     |  20 +-
 .../docs/assets-and-files/uploading-assets.html |  20 +-
 .../creating-and-incrementing-counters.html     |  20 +-
 .../events-and-counters.html                    |  20 +-
 .../retrieving-counters.html                    |  20 +-
 .../docs/data-queries/advanced-query-usage.html |  20 +-
 .../docs/data-queries/operators-and-types.html  |  20 +-
 content/docs/data-queries/query-parameters.html |  20 +-
 .../docs/data-queries/querying-your-data.html   |  20 +-
 content/docs/data-storage/collections.html      |  20 +-
 content/docs/data-storage/data-store-dbms.html  |  24 +-
 content/docs/data-storage/entities.html         |  20 +-
 .../docs/data-storage/optimizing-access.html    |  20 +-
 .../entity-connections/connecting-entities.html |  20 +-
 .../disconnecting-entities.html                 |  20 +-
 .../entity-connections/retrieving-entities.html |  20 +-
 content/docs/genindex.html                      |  20 +-
 content/docs/geolocation/geolocation.html       |  20 +-
 content/docs/index.html                         | 119 ++---
 content/docs/installation/deployment-guide.html | 226 ++++-----
 .../docs/installation/ug1-deploy-to-tomcat.html |  46 +-
 .../installation/ug1-launcher-quick-start.html  |  45 +-
 .../docs/installation/ug2-deploy-to-tomcat.html |  20 +-
 content/docs/introduction/async-vs-sync.html    |  24 +-
 content/docs/introduction/data-model.html       |  20 +-
 content/docs/introduction/overview.html         |  84 ++--
 .../docs/introduction/usergrid-features.html    |  34 +-
 content/docs/jersey2skeleton/README.html        |  20 +-
 content/docs/objects.inv                        | Bin 692 -> 673 bytes
 content/docs/orgs-and-apps/admin-user.html      |  20 +-
 content/docs/orgs-and-apps/application.html     |  20 +-
 content/docs/orgs-and-apps/managing.html        |  20 +-
 content/docs/orgs-and-apps/organization.html    |  20 +-
 .../push-notifications/adding-push-support.html |  20 +-
 .../creating-and-managing-notifications.html    |  20 +-
 .../push-notifications/creating-notifiers.html  |  20 +-
 .../push-notifications/getting-started.html     |  20 +-
 .../managing-users-and-devices.html             |  20 +-
 content/docs/push-notifications/overview.html   |  20 +-
 .../docs/push-notifications/registering.html    |  20 +-
 content/docs/push-notifications/tbd.html        |  20 +-
 .../push-notifications/troubleshooting.html     |  20 +-
 content/docs/push-notifications/tutorial.html   |  20 +-
 .../docs/push-notifications/users-devices.html  |  20 +-
 content/docs/reference/contribute-code.html     |  88 ++--
 content/docs/reference/presos-and-videos.html   |  24 +-
 content/docs/rest-endpoints/api-docs.html       |  20 +-
 content/docs/sdks/ios-new.html                  |  20 +-
 content/docs/sdks/sdk-outline.html              |  20 +-
 content/docs/sdks/tbd.html                      |  24 +-
 content/docs/search.html                        |  20 +-
 content/docs/searchindex.js                     |   2 +-
 .../docs/security-and-auth/app-security.html    |  20 +-
 .../authenticating-api-requests.html            |  20 +-
 ...nticating-users-and-application-clients.html |  20 +-
 .../changing-token-time-live-ttl.html           |  20 +-
 .../docs/security-and-auth/facebook-sign.html   |  20 +-
 .../revoking-tokens-logout.html                 |  20 +-
 .../security-and-auth/securing-your-app.html    |  20 +-
 .../user-authentication-types.html              |  20 +-
 .../security-and-auth/using-permissions.html    |  20 +-
 content/docs/security-and-auth/using-roles.html |  20 +-
 content/docs/user-management/activity.html      |  20 +-
 content/docs/user-management/group.html         |  20 +-
 content/docs/user-management/groups.html        |  20 +-
 .../docs/user-management/messagee-example.html  |  20 +-
 .../docs/user-management/user-connections.html  |  20 +-
 .../docs/user-management/user-management.html   |  20 +-
 .../docs/user-management/working-user-data.html |  20 +-
 .../creating-a-new-application.html             | 332 ++++++++++++
 .../docs/using-usergrid/creating-account.html   | 343 +++++++++++++
 .../using-usergrid/using-a-sandbox-app.html     | 368 ++++++++++++++
 content/docs/using-usergrid/using-the-api.html  | 502 +++++++++++++++++++
 .../creating-a-new-application.md               |  16 -
 docs/getting-started/creating-account.md        |  21 -
 docs/getting-started/using-a-sandbox-app.md     |  39 --
 docs/getting-started/using-the-api.md           | 150 ------
 docs/index.rst                                  |  19 +-
 docs/installation/deployment-guide.md           | 142 +++---
 docs/introduction/overview.md                   |  32 +-
 docs/introduction/usergrid-features.md          |   4 +-
 docs/reference/contribute-code.md               |  41 +-
 .../creating-a-new-application.md               |  16 +
 docs/using-usergrid/creating-account.md         |  21 +
 docs/using-usergrid/using-a-sandbox-app.md      |  39 ++
 docs/using-usergrid/using-the-api.md            | 150 ++++++
 .../push/push-send-notification-controller.js   |   1 -
 release/README.txt                              |   6 +-
 release/binary-release.sh                       |  37 ++
 release/pom.xml                                 |  95 ++++
 release/release-candidate.sh                    |  42 +-
 release/release.sh                              |  32 +-
 release/src/main/assembly/binary.xml            |  99 ++++
 sdks/html5-javascript/Release.md                |   6 -
 stack/README.md                                 |  32 +-
 .../persistence/entities/Notification.java      |   2 +-
 .../usergrid/persistence/queue/QueueFig.java    |   2 +-
 .../queue/impl/QueueManagerFactoryImpl.java     |  51 +-
 .../queue/impl/SNSQueueManagerImpl.java         |   1 -
 .../notifications/ApplicationQueueManager.java  |   9 +-
 .../services/notifications/TaskManager.java     |  68 +--
 .../impl/ApplicationQueueManagerImpl.java       | 389 +++++++-------
 .../gcm/NotificationsServiceIT.java             | 114 ++---
 tests/integration/lib/entities.js               |   2 +-
 tests/integration/lib/notifications.js          |   1 +
 tests/integration/lib/notifiers.js              |  43 ++
 tests/integration/test/groups/groups.js         |  55 +-
 tests/integration/test/main.js                  |   5 +-
 .../test/notifications/notifications.js         | 313 ++++++++++++
 tests/integration/test/teardown.js              |  18 +-
 125 files changed, 3978 insertions(+), 2108 deletions(-)
----------------------------------------------------------------------



[10/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/967f7c8c
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/967f7c8c
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/967f7c8c

Branch: refs/heads/usergrid-1318-queue
Commit: 967f7c8ca055fcb34ef18f535d66073ce04903fc
Parents: 8a26365 93b864f
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Feb 18 10:51:20 2016 -0500
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Feb 18 10:51:20 2016 -0500

----------------------------------------------------------------------
 README.md                                       |    8 +-
 content/docs/README.html                        |    2 +-
 .../_sources/installation/deployment-guide.txt  |    2 +-
 .../file-storage-configuration.html             |    2 +-
 content/docs/assets-and-files/folders.html      |    2 +-
 .../assets-and-files/legacy-asset-support.html  |    2 +-
 .../assets-and-files/retrieving-assets.html     |    2 +-
 .../docs/assets-and-files/uploading-assets.html |    2 +-
 .../creating-and-incrementing-counters.html     |    2 +-
 .../events-and-counters.html                    |    2 +-
 .../retrieving-counters.html                    |    2 +-
 .../docs/data-queries/advanced-query-usage.html |    2 +-
 .../docs/data-queries/operators-and-types.html  |    2 +-
 content/docs/data-queries/query-parameters.html |    2 +-
 .../docs/data-queries/querying-your-data.html   |    2 +-
 content/docs/data-storage/collections.html      |    2 +-
 content/docs/data-storage/data-store-dbms.html  |    2 +-
 content/docs/data-storage/entities.html         |    2 +-
 .../docs/data-storage/optimizing-access.html    |    2 +-
 .../entity-connections/connecting-entities.html |    2 +-
 .../disconnecting-entities.html                 |    2 +-
 .../entity-connections/retrieving-entities.html |    2 +-
 content/docs/genindex.html                      |    2 +-
 content/docs/geolocation/geolocation.html       |    2 +-
 content/docs/index.html                         |    4 +-
 content/docs/installation/deployment-guide.html |   10 +-
 .../docs/installation/ug1-deploy-to-tomcat.html |    2 +-
 .../installation/ug1-launcher-quick-start.html  |    2 +-
 .../docs/installation/ug2-deploy-to-tomcat.html |    2 +-
 content/docs/introduction/async-vs-sync.html    |    2 +-
 content/docs/introduction/data-model.html       |    2 +-
 content/docs/introduction/overview.html         |    2 +-
 .../docs/introduction/usergrid-features.html    |    2 +-
 content/docs/jersey2skeleton/README.html        |    2 +-
 content/docs/orgs-and-apps/admin-user.html      |    2 +-
 content/docs/orgs-and-apps/application.html     |    2 +-
 content/docs/orgs-and-apps/managing.html        |    2 +-
 content/docs/orgs-and-apps/organization.html    |    2 +-
 .../push-notifications/adding-push-support.html |    2 +-
 .../creating-and-managing-notifications.html    |    2 +-
 .../push-notifications/creating-notifiers.html  |    2 +-
 .../push-notifications/getting-started.html     |    2 +-
 .../managing-users-and-devices.html             |    2 +-
 content/docs/push-notifications/overview.html   |    2 +-
 .../docs/push-notifications/registering.html    |    2 +-
 content/docs/push-notifications/tbd.html        |    2 +-
 .../push-notifications/troubleshooting.html     |    2 +-
 content/docs/push-notifications/tutorial.html   |    2 +-
 .../docs/push-notifications/users-devices.html  |    2 +-
 content/docs/reference/contribute-code.html     |    2 +-
 content/docs/reference/presos-and-videos.html   |    6 +-
 content/docs/rest-endpoints/api-docs.html       |    2 +-
 content/docs/sdks/ios-new.html                  |    2 +-
 content/docs/sdks/sdk-outline.html              |    2 +-
 content/docs/sdks/tbd.html                      |    6 +-
 content/docs/search.html                        |    2 +-
 content/docs/searchindex.js                     |    2 +-
 .../docs/security-and-auth/app-security.html    |    2 +-
 .../authenticating-api-requests.html            |    2 +-
 ...nticating-users-and-application-clients.html |    2 +-
 .../changing-token-time-live-ttl.html           |    2 +-
 .../docs/security-and-auth/facebook-sign.html   |    2 +-
 .../revoking-tokens-logout.html                 |    2 +-
 .../security-and-auth/securing-your-app.html    |    2 +-
 .../user-authentication-types.html              |    2 +-
 .../security-and-auth/using-permissions.html    |    2 +-
 content/docs/security-and-auth/using-roles.html |    2 +-
 content/docs/user-management/activity.html      |    2 +-
 content/docs/user-management/group.html         |    2 +-
 content/docs/user-management/groups.html        |    2 +-
 .../docs/user-management/messagee-example.html  |    2 +-
 .../docs/user-management/user-connections.html  |    2 +-
 .../docs/user-management/user-management.html   |    2 +-
 .../docs/user-management/working-user-data.html |    2 +-
 .../creating-a-new-application.html             |    2 +-
 .../docs/using-usergrid/creating-account.html   |    2 +-
 .../using-usergrid/using-a-sandbox-app.html     |    2 +-
 content/docs/using-usergrid/using-the-api.html  |    2 +-
 content/releases/index.html                     |   11 +-
 docs/installation/deployment-guide.md           |    2 +-
 sdks/swift/.gitignore                           |   25 +
 sdks/swift/LICENSE.txt                          |   19 +
 sdks/swift/Package.swift                        |   30 +
 sdks/swift/README.md                            |  802 ++++
 .../ActivityFeed.xcodeproj/project.pbxproj      |  827 ++++
 .../contents.xcworkspacedata                    |    7 +
 .../contents.xcworkspacedata                    |    7 +
 .../xcshareddata/ActivityFeed.xcscmblueprint    |   30 +
 sdks/swift/Samples/ActivityFeed/Podfile         |    8 +
 sdks/swift/Samples/ActivityFeed/Readme.md       |   29 +
 .../ActivityFeed/Source/ActivityEntity.swift    |   60 +
 .../ActivityFeed/Source/AppDelegate.swift       |   65 +
 .../AppIcon.appiconset/Contents.json            |   38 +
 .../Source/Assets.xcassets/Contents.json        |    6 +
 .../UsergridGuy.imageset/Contents.json          |   21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |  Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |   27 +
 .../Source/Base.lproj/Main.storyboard           |  371 ++
 .../Source/FollowViewController.swift           |   50 +
 .../ActivityFeed/Source/FormTextField.swift     |   71 +
 .../Samples/ActivityFeed/Source/Info.plist      |   43 +
 .../Source/LoginViewController.swift            |   77 +
 .../Source/MessageTableViewCell.swift           |  101 +
 .../ActivityFeed/Source/MessageTextView.swift   |   39 +
 .../Source/MessageViewController.swift          |  224 ++
 .../Source/RegisterViewController.swift         |   62 +
 .../ActivityFeed/Source/UsergridManager.swift   |   78 +
 .../Source/ViewControllerExtensions.swift       |   36 +
 .../Assets.xcassets/README__ignoredByTemplate__ |    1 +
 .../ExtensionDelegate.swift                     |   45 +
 .../WatchSample Extension/Info.plist            |   45 +
 .../InterfaceController.swift                   |   81 +
 .../AppIcon.appiconset/Contents.json            |   55 +
 .../WatchSample/Base.lproj/Interface.storyboard |   46 +
 .../Samples/ActivityFeed/WatchSample/Info.plist |   35 +
 .../Samples/Push/Push.xcodeproj/project.pbxproj |  473 +++
 .../contents.xcworkspacedata                    |    7 +
 .../Push.xcworkspace/contents.xcworkspacedata   |    7 +
 sdks/swift/Samples/Push/Readme.md               |   21 +
 .../swift/Samples/Push/Source/AppDelegate.swift |   53 +
 .../AppIcon.appiconset/Contents.json            |   38 +
 .../Push/Source/Assets.xcassets/Contents.json   |    6 +
 .../UsergridGuy.imageset/Contents.json          |   21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |  Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |   27 +
 .../Push/Source/Base.lproj/Main.storyboard      |   75 +
 sdks/swift/Samples/Push/Source/Info.plist       |   38 +
 .../Samples/Push/Source/UsergridManager.swift   |   72 +
 .../Samples/Push/Source/ViewController.swift    |   39 +
 sdks/swift/Samples/Readme.md                    |   27 +
 sdks/swift/Source/Info.plist                    |   26 +
 sdks/swift/Source/Usergrid.swift                |  625 +++
 sdks/swift/Source/UsergridAsset.swift           |  198 +
 .../Source/UsergridAssetRequestWrapper.swift    |   48 +
 sdks/swift/Source/UsergridAuth.swift            |  276 ++
 sdks/swift/Source/UsergridClient.swift          |  904 +++++
 sdks/swift/Source/UsergridClientConfig.swift    |  149 +
 sdks/swift/Source/UsergridDevice.swift          |  178 +
 sdks/swift/Source/UsergridEntity.swift          |  611 +++
 sdks/swift/Source/UsergridEnums.swift           |  415 ++
 sdks/swift/Source/UsergridExtensions.swift      |   42 +
 sdks/swift/Source/UsergridFileMetaData.swift    |  114 +
 sdks/swift/Source/UsergridKeychainHelpers.swift |  196 +
 sdks/swift/Source/UsergridQuery.swift           |  590 +++
 sdks/swift/Source/UsergridRequest.swift         |  245 ++
 sdks/swift/Source/UsergridRequestManager.swift  |  156 +
 sdks/swift/Source/UsergridResponse.swift        |  203 +
 sdks/swift/Source/UsergridResponseError.swift   |   90 +
 sdks/swift/Source/UsergridSDK.h                 |   37 +
 sdks/swift/Source/UsergridSessionDelegate.swift |   90 +
 sdks/swift/Source/UsergridUser.swift            |  497 +++
 sdks/swift/Tests/ASSET_Tests.swift              |   82 +
 sdks/swift/Tests/AUTH_Tests.swift               |   66 +
 sdks/swift/Tests/CONNECTION_Tests.swift         |   87 +
 sdks/swift/Tests/ClientCreationTests.swift      |   92 +
 sdks/swift/Tests/Entity_Tests.swift             |  173 +
 sdks/swift/Tests/GET_Tests.swift                |  101 +
 sdks/swift/Tests/Info.plist                     |   24 +
 sdks/swift/Tests/PUT_Tests.swift                |  146 +
 sdks/swift/Tests/TestAssets/logo_apigee.png     |  Bin 0 -> 10696 bytes
 sdks/swift/Tests/TestAssets/test.png            |  Bin 0 -> 1417937 bytes
 sdks/swift/Tests/User_Tests.swift               |  121 +
 sdks/swift/UsergridSDK.podspec                  |   18 +
 .../swift/UsergridSDK.xcodeproj/project.pbxproj | 1179 ++++++
 .../contents.xcworkspacedata                    |    7 +
 .../xcshareddata/WorkspaceSettings.xcsettings   |    8 +
 .../xcschemes/UsergridSDK OSX.xcscheme          |  100 +
 .../xcschemes/UsergridSDK iOS.xcscheme          |  100 +
 .../xcschemes/UsergridSDK tvOS.xcscheme         |  114 +
 .../xcschemes/UsergridSDK watchOS.xcscheme      |   80 +
 .../xcschemes/UsergridSDK_OSX_Tests.xcscheme    |   56 +
 .../xcschemes/UsergridSDK_TVOS_Tests.xcscheme   |   56 +
 .../xcschemes/UsergridSDK_iOS_Tests.xcscheme    |   57 +
 sdks/swift/docs/Classes.html                    |  694 ++++
 sdks/swift/docs/Classes/Usergrid.html           | 3704 +++++++++++++++++
 sdks/swift/docs/Classes/UsergridAppAuth.html    |  402 ++
 sdks/swift/docs/Classes/UsergridAsset.html      |  694 ++++
 .../Classes/UsergridAssetUploadRequest.html     |  348 ++
 sdks/swift/docs/Classes/UsergridAuth.html       |  550 +++
 sdks/swift/docs/Classes/UsergridClient.html     | 3800 ++++++++++++++++++
 .../docs/Classes/UsergridClientConfig.html      |  736 ++++
 sdks/swift/docs/Classes/UsergridDevice.html     |  644 +++
 sdks/swift/docs/Classes/UsergridEntity.html     | 2612 ++++++++++++
 .../docs/Classes/UsergridFileMetaData.html      |  524 +++
 sdks/swift/docs/Classes/UsergridQuery.html      | 2270 +++++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 sdks/swift/docs/Classes/UsergridRequest.html    |  611 +++
 sdks/swift/docs/Classes/UsergridResponse.html   |  961 +++++
 .../docs/Classes/UsergridResponseError.html     |  465 +++
 sdks/swift/docs/Classes/UsergridUser.html       | 2319 +++++++++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 sdks/swift/docs/Classes/UsergridUserAuth.html   |  402 ++
 sdks/swift/docs/Enums.html                      |  427 ++
 sdks/swift/docs/Enums/UsergridAuthFallback.html |  248 ++
 .../docs/Enums/UsergridDeviceProperties.html    |  361 ++
 sdks/swift/docs/Enums/UsergridDirection.html    |  278 ++
 .../docs/Enums/UsergridEntityProperties.html    |  506 +++
 sdks/swift/docs/Enums/UsergridHttpMethod.html   |  333 ++
 .../docs/Enums/UsergridImageContentType.html    |  278 ++
 .../swift/docs/Enums/UsergridQueryOperator.html |  423 ++
 .../docs/Enums/UsergridQuerySortOrder.html      |  330 ++
 .../docs/Enums/UsergridUserProperties.html      |  516 +++
 sdks/swift/docs/Extensions.html                 |  175 +
 sdks/swift/docs/Extensions/UsergridAsset.html   |  184 +
 sdks/swift/docs/Extensions/UsergridAuth.html    |  260 ++
 sdks/swift/docs/Extensions/UsergridClient.html  | 1962 +++++++++
 sdks/swift/docs/Global Variables.html           |  202 +
 sdks/swift/docs/Protocols.html                  |  146 +
 sdks/swift/docs/Protocols/UsergridAuth.html     |  260 ++
 sdks/swift/docs/Typealiases.html                |  403 ++
 sdks/swift/docs/css/highlight.css               |  200 +
 sdks/swift/docs/css/jazzy.css                   |  331 ++
 .../docs/docsets/.docset/Contents/Info.plist    |   20 +
 .../Contents/Resources/Documents/Classes.html   |  573 +++
 .../Resources/Documents/Classes/Usergrid.html   | 3270 +++++++++++++++
 .../Documents/Classes/UsergridAppAuth.html      |  319 ++
 .../Documents/Classes/UsergridAsset.html        |  557 +++
 .../Documents/Classes/UsergridAuth.html         |  380 ++
 .../Documents/Classes/UsergridClient.html       | 3199 +++++++++++++++
 .../Documents/Classes/UsergridClientConfig.html |  559 +++
 .../Documents/Classes/UsergridDevice.html       |  382 ++
 .../Documents/Classes/UsergridEntity.html       | 2388 +++++++++++
 .../Documents/Classes/UsergridFileMetaData.html |  387 ++
 .../Documents/Classes/UsergridQuery.html        | 2010 +++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 .../Documents/Classes/UsergridResponse.html     |  880 ++++
 .../Documents/Classes/UsergridUser.html         |  994 +++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 .../Documents/Classes/UsergridUserAuth.html     |  319 ++
 .../Contents/Resources/Documents/Enums.html     |  372 ++
 .../Documents/Enums/UsergridAuthFallback.html   |  221 +
 .../Enums/UsergridDeviceProperties.html         |  334 ++
 .../Documents/Enums/UsergridDirection.html      |  251 ++
 .../Enums/UsergridEntityProperties.html         |  479 +++
 .../Enums/UsergridImageContentType.html         |  251 ++
 .../Documents/Enums/UsergridQueryOperator.html  |  396 ++
 .../Documents/Enums/UsergridQuerySortOrder.html |  303 ++
 .../Documents/Enums/UsergridUserProperties.html |  489 +++
 .../Resources/Documents/Extensions.html         |  175 +
 .../Documents/Extensions/UsergridAsset.html     |  184 +
 .../Documents/Extensions/UsergridAuth.html      |  260 ++
 .../Documents/Extensions/UsergridClient.html    | 1962 +++++++++
 .../Contents/Resources/Documents/Protocols.html |  146 +
 .../Documents/Protocols/UsergridAuth.html       |  260 ++
 .../Resources/Documents/Typealiases.html        |  318 ++
 .../Resources/Documents/css/highlight.css       |  202 +
 .../Contents/Resources/Documents/css/jazzy.css  |  302 ++
 .../Contents/Resources/Documents/img/carat.png  |  Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |  Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |  Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |  234 ++
 .../Contents/Resources/Documents/js/jazzy.js    |   31 +
 .../Resources/Documents/js/jquery.min.js        |    4 +
 .../Resources/Documents/undocumented.txt        |   11 +
 .../.docset/Contents/Resources/docSet.dsidx     |  Bin 0 -> 114688 bytes
 sdks/swift/docs/docsets/.tgz                    |  Bin 0 -> 111866 bytes
 .../UsergridSDK.docset/Contents/Info.plist      |   20 +
 .../Contents/Resources/Documents/Classes.html   |  694 ++++
 .../Resources/Documents/Classes/Usergrid.html   | 3704 +++++++++++++++++
 .../Documents/Classes/UsergridAppAuth.html      |  402 ++
 .../Documents/Classes/UsergridAsset.html        |  694 ++++
 .../Classes/UsergridAssetUploadRequest.html     |  348 ++
 .../Documents/Classes/UsergridAuth.html         |  550 +++
 .../Documents/Classes/UsergridClient.html       | 3800 ++++++++++++++++++
 .../Documents/Classes/UsergridClientConfig.html |  736 ++++
 .../Documents/Classes/UsergridDevice.html       |  644 +++
 .../Documents/Classes/UsergridEntity.html       | 2612 ++++++++++++
 .../Documents/Classes/UsergridFileMetaData.html |  524 +++
 .../Documents/Classes/UsergridQuery.html        | 2270 +++++++++++
 .../UsergridQuery/UsergridQueryOperator.html    |  272 ++
 .../UsergridQuery/UsergridQuerySortOrder.html   |  203 +
 .../Documents/Classes/UsergridRequest.html      |  611 +++
 .../Documents/Classes/UsergridResponse.html     |  961 +++++
 .../Classes/UsergridResponseError.html          |  465 +++
 .../Documents/Classes/UsergridUser.html         | 2319 +++++++++++
 .../UsergridUser/UsergridUserProperties.html    |  346 ++
 .../Documents/Classes/UsergridUserAuth.html     |  402 ++
 .../Contents/Resources/Documents/Enums.html     |  427 ++
 .../Documents/Enums/UsergridAuthFallback.html   |  248 ++
 .../Enums/UsergridDeviceProperties.html         |  361 ++
 .../Documents/Enums/UsergridDirection.html      |  278 ++
 .../Enums/UsergridEntityProperties.html         |  506 +++
 .../Documents/Enums/UsergridHttpMethod.html     |  333 ++
 .../Enums/UsergridImageContentType.html         |  278 ++
 .../Documents/Enums/UsergridQueryOperator.html  |  423 ++
 .../Documents/Enums/UsergridQuerySortOrder.html |  330 ++
 .../Documents/Enums/UsergridUserProperties.html |  516 +++
 .../Resources/Documents/Extensions.html         |  175 +
 .../Documents/Extensions/UsergridAsset.html     |  184 +
 .../Documents/Extensions/UsergridAuth.html      |  260 ++
 .../Documents/Extensions/UsergridClient.html    | 1962 +++++++++
 .../Resources/Documents/Global Variables.html   |  202 +
 .../Contents/Resources/Documents/Protocols.html |  146 +
 .../Documents/Protocols/UsergridAuth.html       |  260 ++
 .../Resources/Documents/Typealiases.html        |  403 ++
 .../Resources/Documents/css/highlight.css       |  200 +
 .../Contents/Resources/Documents/css/jazzy.css  |  331 ++
 .../Contents/Resources/Documents/img/carat.png  |  Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |  Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |  Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |  919 +++++
 .../Contents/Resources/Documents/js/jazzy.js    |   40 +
 .../Resources/Documents/js/jquery.min.js        |    4 +
 .../Resources/Documents/undocumented.txt        |    0
 .../Contents/Resources/docSet.dsidx             |  Bin 0 -> 151552 bytes
 sdks/swift/docs/docsets/UsergridSDK.tgz         |  Bin 0 -> 145485 bytes
 sdks/swift/docs/img/carat.png                   |  Bin 0 -> 274 bytes
 sdks/swift/docs/img/dash.png                    |  Bin 0 -> 1338 bytes
 sdks/swift/docs/img/gh.png                      |  Bin 0 -> 1571 bytes
 sdks/swift/docs/index.html                      |  919 +++++
 sdks/swift/docs/js/jazzy.js                     |   40 +
 sdks/swift/docs/js/jquery.min.js                |    4 +
 sdks/swift/docs/undocumented.txt                |    0
 stack/README.md                                 |    7 +-
 .../corepersistence/CpEntityManager.java        |   27 +
 .../usergrid/persistence/EntityManager.java     |    2 +
 .../services/AbstractCollectionService.java     |   36 +-
 .../usergrid/services/CollectionServiceIT.java  |   16 +
 website/content/releases/index.html             |   11 +-
 321 files changed, 99824 insertions(+), 139 deletions(-)
----------------------------------------------------------------------



[12/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/85ca4b83
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/85ca4b83
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/85ca4b83

Branch: refs/heads/usergrid-1318-queue
Commit: 85ca4b8363678f5c66362e81db861700cc2ed480
Parents: ddcc14f 9250a81
Author: Dave Johnson <sn...@apache.org>
Authored: Mon May 23 10:16:32 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon May 23 10:16:32 2016 -0400

----------------------------------------------------------------------
 UsergridSDK.podspec                             |   18 +
 content/community/index.html                    |    3 +-
 content/index.html                              |    3 +-
 content/releases/index.html                     |    3 +-
 sdks/java/README.md                             |  598 +++++-
 sdks/java/pom.xml                               |   73 +-
 .../org/apache/usergrid/java/client/Client.java | 1292 -------------
 .../apache/usergrid/java/client/Usergrid.java   |  285 +++
 .../usergrid/java/client/UsergridClient.java    |  427 +++++
 .../java/client/UsergridClientConfig.java       |   60 +
 .../usergrid/java/client/UsergridEnums.java     |  170 ++
 .../usergrid/java/client/UsergridRequest.java   |  205 +++
 .../java/client/UsergridRequestManager.java     |   86 +
 .../java/client/auth/UsergridAppAuth.java       |   55 +
 .../usergrid/java/client/auth/UsergridAuth.java |   75 +
 .../java/client/auth/UsergridUserAuth.java      |   56 +
 .../usergrid/java/client/entities/Activity.java |  625 -------
 .../usergrid/java/client/entities/Device.java   |   68 -
 .../usergrid/java/client/entities/Entity.java   |  191 --
 .../usergrid/java/client/entities/Group.java    |   79 -
 .../usergrid/java/client/entities/Message.java  |  148 --
 .../usergrid/java/client/entities/User.java     |  158 --
 .../java/client/exception/ClientException.java  |   41 -
 .../client/exception/UsergridException.java     |   50 +
 .../java/client/model/UsergridDevice.java       |   60 +
 .../java/client/model/UsergridEntity.java       |  487 +++++
 .../java/client/model/UsergridUser.java         |  198 ++
 .../java/client/query/UsergridQuery.java        |  434 +++++
 .../java/client/response/AggregateCounter.java  |   52 -
 .../client/response/AggregateCounterSet.java    |  111 --
 .../java/client/response/ApiResponse.java       |  421 -----
 .../client/response/ClientCredentialsInfo.java  |   58 -
 .../java/client/response/QueueInfo.java         |   44 -
 .../java/client/response/UsergridResponse.java  |  230 +++
 .../client/response/UsergridResponseError.java  |   98 +
 .../usergrid/java/client/utils/JsonUtils.java   |  262 ++-
 .../usergrid/java/client/utils/MapUtils.java    |   27 +-
 .../usergrid/java/client/utils/ObjectUtils.java |   28 +-
 .../usergrid/java/client/utils/UrlUtils.java    |  124 --
 .../utils/UsergridEntityDeserializer.java       |   41 +
 .../client/ClientAuthFallBackTestCase.java      |   72 +
 .../usergrid/client/ClientAuthTestCase.java     |   85 +
 .../client/ClientConnectionsTestCase.java       |  171 ++
 .../usergrid/client/ClientRestTestCase.java     |   90 +
 .../apache/usergrid/client/EntityTestCase.java  |  676 +++++++
 .../apache/usergrid/client/QueryTestCase.java   |  194 ++
 .../usergrid/client/SDKTestConfiguration.java   |   38 +
 .../apache/usergrid/client/SDKTestUtils.java    |  108 ++
 .../client/UsergridClientAuthTestCase.java      |   73 +
 .../usergrid/client/UsergridInitTestCase.java   |   48 +
 .../client/UsergridResponseErrorTestCase.java   |   62 +
 .../client/UsergridResponseTestCase.java        |   85 +
 .../usergrid/client/UsergridTestCase.java       |   30 +
 sdks/java/usergrid-java-client-2.1.0.jar        |  Bin 0 -> 1992232 bytes
 sdks/swift/README.md                            |    2 +-
 .../Source/Base.lproj/Main.storyboard           |   26 +-
 .../ActivityFeed/Source/FormTextField.swift     |    2 +-
 .../Source/MessageViewController.swift          |   26 +-
 .../Samples/Push/Source/UsergridManager.swift   |    2 +-
 sdks/swift/Source/Usergrid.swift                |   32 +-
 sdks/swift/Source/UsergridAsset.swift           |   18 +-
 sdks/swift/Source/UsergridAuth.swift            |    6 +-
 sdks/swift/Source/UsergridClient.swift          |   89 +-
 sdks/swift/Source/UsergridClientConfig.swift    |   14 +-
 sdks/swift/Source/UsergridDevice.swift          |   41 +-
 sdks/swift/Source/UsergridEntity.swift          |  104 +-
 sdks/swift/Source/UsergridEnums.swift           |   22 +-
 sdks/swift/Source/UsergridExtensions.swift      |   82 +-
 sdks/swift/Source/UsergridFileMetaData.swift    |    4 +-
 sdks/swift/Source/UsergridQuery.swift           |    3 +-
 sdks/swift/Source/UsergridRequest.swift         |    2 +-
 sdks/swift/Source/UsergridRequestManager.swift  |   72 +-
 sdks/swift/Source/UsergridResponse.swift        |    6 +-
 sdks/swift/Source/UsergridUser.swift            |   62 +-
 sdks/swift/Tests/ASSET_Tests.swift              |  218 ++-
 sdks/swift/Tests/AUTH_Tests.swift               |   92 +-
 sdks/swift/Tests/CONNECTION_Tests.swift         |   42 +-
 sdks/swift/Tests/ClientCreationTests.swift      |   44 +-
 sdks/swift/Tests/GET_Tests.swift                |   38 +-
 sdks/swift/Tests/PUT_Tests.swift                |   38 +-
 sdks/swift/Tests/TestAssets/UsergridGuy.jpg     |  Bin 0 -> 12981 bytes
 sdks/swift/Tests/User_Tests.swift               |  310 +++-
 sdks/swift/UsergridSDK.podspec                  |   18 -
 .../swift/UsergridSDK.xcodeproj/project.pbxproj |    4 +-
 sdks/swift/docs/Classes.html                    |   16 +-
 sdks/swift/docs/Classes/Usergrid.html           |  290 ++-
 sdks/swift/docs/Classes/UsergridAppAuth.html    |   30 +-
 sdks/swift/docs/Classes/UsergridAsset.html      |   44 +-
 .../Classes/UsergridAssetUploadRequest.html     |   20 +-
 sdks/swift/docs/Classes/UsergridAuth.html       |   34 +-
 sdks/swift/docs/Classes/UsergridClient.html     |  275 ++-
 .../docs/Classes/UsergridClientConfig.html      |   54 +-
 sdks/swift/docs/Classes/UsergridDevice.html     |  205 ++-
 sdks/swift/docs/Classes/UsergridEntity.html     |  215 ++-
 .../docs/Classes/UsergridFileMetaData.html      |   30 +-
 sdks/swift/docs/Classes/UsergridQuery.html      |  156 +-
 sdks/swift/docs/Classes/UsergridRequest.html    |   36 +-
 sdks/swift/docs/Classes/UsergridResponse.html   |   42 +-
 .../docs/Classes/UsergridResponseError.html     |   24 +-
 sdks/swift/docs/Classes/UsergridUser.html       |  231 ++-
 sdks/swift/docs/Classes/UsergridUserAuth.html   |   30 +-
 sdks/swift/docs/Enums.html                      |   28 +-
 sdks/swift/docs/Enums/UsergridAuthMode.html     |  283 +++
 .../docs/Enums/UsergridDeviceProperties.html    |   20 +-
 sdks/swift/docs/Enums/UsergridDirection.html    |   16 +-
 .../docs/Enums/UsergridEntityProperties.html    |   24 +-
 sdks/swift/docs/Enums/UsergridHttpMethod.html   |   16 +-
 .../docs/Enums/UsergridImageContentType.html    |   16 +-
 .../swift/docs/Enums/UsergridQueryOperator.html |   20 +-
 .../docs/Enums/UsergridQuerySortOrder.html      |   20 +-
 .../docs/Enums/UsergridUserProperties.html      |   20 +-
 sdks/swift/docs/Extensions.html                 |   72 +-
 sdks/swift/docs/Extensions/NSDate.html          |  448 +++++
 sdks/swift/docs/Global Variables.html           |   18 +-
 sdks/swift/docs/Typealiases.html                |   36 +-
 .../Contents/Resources/Documents/Classes.html   |  209 ++-
 .../Resources/Documents/Classes/Usergrid.html   | 1086 ++++++++---
 .../Documents/Classes/UsergridAppAuth.html      |  183 +-
 .../Documents/Classes/UsergridAsset.html        |  265 ++-
 .../Classes/UsergridAssetUploadRequest.html     |  356 ++++
 .../Documents/Classes/UsergridAuth.html         |  274 ++-
 .../Documents/Classes/UsergridClient.html       | 1310 +++++++++----
 .../Documents/Classes/UsergridClientConfig.html |  345 +++-
 .../Documents/Classes/UsergridDevice.html       |  519 +++++-
 .../Documents/Classes/UsergridEntity.html       |  809 +++++---
 .../Documents/Classes/UsergridFileMetaData.html |  217 ++-
 .../Documents/Classes/UsergridQuery.html        |  540 ++++--
 .../Documents/Classes/UsergridRequest.html      |  619 +++++++
 .../Documents/Classes/UsergridResponse.html     |  309 ++--
 .../Classes/UsergridResponseError.html          |  473 +++++
 .../Documents/Classes/UsergridUser.html         | 1734 ++++++++++++++++--
 .../Documents/Classes/UsergridUserAuth.html     |  169 +-
 .../Contents/Resources/Documents/Enums.html     |  115 +-
 .../Documents/Enums/UsergridAuthFallback.html   |   53 +-
 .../Documents/Enums/UsergridAuthMode.html       |  283 +++
 .../Enums/UsergridDeviceProperties.html         |   83 +-
 .../Documents/Enums/UsergridDirection.html      |   71 +-
 .../Enums/UsergridEntityProperties.html         |  101 +-
 .../Documents/Enums/UsergridHttpMethod.html     |  341 ++++
 .../Enums/UsergridImageContentType.html         |   73 +-
 .../Documents/Enums/UsergridQueryOperator.html  |   89 +-
 .../Documents/Enums/UsergridQuerySortOrder.html |   83 +-
 .../Documents/Enums/UsergridUserProperties.html |   95 +-
 .../Resources/Documents/Extensions.html         |   72 +-
 .../Resources/Documents/Extensions/NSDate.html  |  448 +++++
 .../Resources/Documents/Global Variables.html   |  210 +++
 .../Resources/Documents/Typealiases.html        |  159 +-
 .../Resources/Documents/css/highlight.css       |    6 +-
 .../Contents/Resources/Documents/css/jazzy.css  |   65 +-
 .../Contents/Resources/Documents/index.html     |  741 +++++++-
 .../Contents/Resources/Documents/js/jazzy.js    |   11 +-
 .../Resources/Documents/undocumented.txt        |   11 -
 .../.docset/Contents/Resources/docSet.dsidx     |  Bin 114688 -> 147456 bytes
 sdks/swift/docs/docsets/.tgz                    |  Bin 111866 -> 148251 bytes
 sdks/swift/docs/index.html                      |   24 +-
 .../main/resources/usergrid-default.properties  |   10 +-
 .../corepersistence/ApplicationIdCacheImpl.java |    9 +-
 .../corepersistence/CpEntityManager.java        |    4 +-
 .../index/IndexSchemaCacheFig.java              |    2 +-
 .../index/IndexSchemaCacheImpl.java             |    3 +-
 .../corepersistence/index/IndexServiceImpl.java |    1 +
 .../org/apache/usergrid/utils/StringUtils.java  |    8 +
 .../main/resources/usergrid-core-context.xml    |    6 +
 .../shard/impl/NodeShardAllocationImpl.java     |    7 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |   18 +-
 .../usergrid/persistence/queue/QueueFig.java    |    4 +-
 .../queue/impl/QueueManagerFactoryImpl.java     |   27 +-
 .../org/apache/usergrid/rest/RootResource.java  |   25 +
 .../rest/applications/CollectionResource.java   |    8 +-
 .../apache/usergrid/rest/NotificationsIT.java   |   11 +
 .../collection/CollectionsResourceIT.java       |  147 +-
 .../events/ApplicationRequestCounterIT.java     |   48 +
 .../cassandra/ManagementServiceImpl.java        |   93 +-
 .../ApplicationQueueManagerCache.java           |  143 ++
 .../notifications/NotificationsService.java     |   11 +-
 .../services/notifications/QueueListener.java   |   58 +-
 .../services/notifications/TaskManager.java     |  117 +-
 .../impl/ApplicationQueueManagerImpl.java       |  151 +-
 .../services/notifiers/NotifiersService.java    |    6 +
 .../gcm/NotificationsServiceIT.java             |   77 +
 website/README.md                               |    2 +-
 website/layouts/footer.html                     |    3 +-
 182 files changed, 20010 insertions(+), 6904 deletions(-)
----------------------------------------------------------------------



[18/37] usergrid git commit: Make sure that 2nd hop index event lands on utility queue if it was consumed from that queue originally.

Posted by sn...@apache.org.
Make sure that 2nd hop index event lands on utility queue if it was consumed from that queue originally.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a4cc63f8
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a4cc63f8
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a4cc63f8

Branch: refs/heads/usergrid-1318-queue
Commit: a4cc63f8ca1ce16a2057d7219c3b5606ac3f464d
Parents: f8c92f6
Author: Michael Russo <mr...@apigee.com>
Authored: Mon Oct 3 23:37:59 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Mon Oct 3 23:37:59 2016 -0700

----------------------------------------------------------------------
 .../corepersistence/asyncevents/AsyncEventServiceImpl.java     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/a4cc63f8/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
index bc5d139..dba4edf 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
@@ -864,7 +864,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
                                                      List<IndexEventResult> indexEventResults = callEventHandlers( messages );
 
                                                      // submit the processed messages to index producer
-                                                     List<QueueMessage> messagesToAck = submitToIndex( indexEventResults );
+                                                     List<QueueMessage> messagesToAck = submitToIndex( indexEventResults, isUtilityQueue );
 
                                                      if ( messagesToAck.size() < messages.size() ) {
                                                          logger.warn( "Missing {} message(s) from index processing",
@@ -904,7 +904,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
      * Submit results to index and return the queue messages to be ack'd
      *
      */
-    private List<QueueMessage> submitToIndex(List<IndexEventResult> indexEventResults) {
+    private List<QueueMessage> submitToIndex(List<IndexEventResult> indexEventResults, boolean forUtilityQueue) {
 
         // if nothing came back then return empty list
         if(indexEventResults==null){
@@ -931,7 +931,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
             // collect into a list of QueueMessages that can be ack'd later
             .collect(Collectors.toList());
 
-       queueIndexOperationMessage(combined, false);
+       queueIndexOperationMessage(combined, forUtilityQueue);
 
         return queueMessages;
     }


[02/37] usergrid git commit: fix miked link

Posted by sn...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/2298062e/website/tmp/compiled_content
----------------------------------------------------------------------
diff --git a/website/tmp/compiled_content b/website/tmp/compiled_content
index 3ac8a96..f32524c 100644
--- a/website/tmp/compiled_content
+++ b/website/tmp/compiled_content
@@ -1,4 +1,4 @@
-{:	data{OI"/bootstrap/bootstrap/:ET{:default{:	lastI"\ufffd\ufffd/*!
+{:	data{PI"/bootstrap/bootstrap/:ET{:default{:	lastI"\ufffd\ufffd/*!
  * Bootstrap v3.0.0
  *
  * Copyright 2013 Twitter, Inc
@@ -8,7 +8,7 @@
  * Designed and built with all the love in the world by @mdo and @fat.
  *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 
 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decorati
 on:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select
 ,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;height:auto;max-width:100%;padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);border:0}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16.099999999999998px;font-weight:200;line-height:1.4}@media(min-w
 idth:768px){.lead{font-size:21px}}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}.text-primary{color:#428bca}.text-warning{color:#c09853}.text-danger{color:#b94a48}.text-success{color:#468847}.text-info{color:#3a87ad}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h1 small,h2 small,h3 small{font-size:65%}h4,h5,h6{margin-top:10px;margin-bottom:10px}h4 small,h5 small,h6 small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,o
 l{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:0}@media(min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height
 :1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre co
 de{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row{margin-right:-15px;margin-left:-15px}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-
 3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11{float:left}.col-xs-1{width:8.333333333333332%}.col-xs-2{width:16.666666666666664%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333333333%}.col-xs-5{width:41.66666666666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333333333336%}.col-xs-8{width:66.66666666666666%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333333334%}.col-xs-11{width:91.66666666666666%}.col-xs-12{width:100%}@media(min-width:768px){.container{max-width:750px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-
 6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-sm-push-1{left:8.333333333333332%}.col-sm-push-2{left:16.666666666666664%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333333333%}.col-sm-push-5{left:41.66666666666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333333333336%}.col-sm-push-8{left:66.66666666666666%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333333334%}.col-sm-push-11{left:91.66666666666666%}.col-sm-pull-1{right:8.333333333333332%}.col-sm-pull-2{right:16.666666666666664%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333333333%}.col-sm-pull-5{right:41.66666666666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333333333336%}.col-sm-pull-8{right:66.66666666666666%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333333334%}.col-sm-pull-11{right:91.66666666666666%}.col-sm-offse
 t-1{margin-left:8.333333333333332%}.col-sm-offset-2{margin-left:16.666666666666664%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333333333%}.col-sm-offset-5{margin-left:41.66666666666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333333333336%}.col-sm-offset-8{margin-left:66.66666666666666%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333333334%}.col-sm-offset-11{margin-left:91.66666666666666%}}@media(min-width:992px){.container{max-width:970px}.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11{float:left}.col-md-1{width:8.333333333333332%}.col-md-2{width:16.666666666666664%}.col-md-3{width:25%}.col-md-4{width:33.33333333333333%}.col-md-5{width:41.66666666666667%}.col-md-6{width:50%}.col-md-7{width:58.333333333333336%}.col-md-8{width:66.66666666666666%}.col-md-9{width:75%}.col-md-10{width:83.33333333333334%}.col-md-11{width:91.66666666666666%}.col
 -md-12{width:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333333333332%}.col-md-push-2{left:16.666666666666664%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333333333%}.col-md-push-5{left:41.66666666666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333333333336%}.col-md-push-8{left:66.66666666666666%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333333334%}.col-md-push-11{left:91.66666666666666%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333333333332%}.col-md-pull-2{right:16.666666666666664%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333333333%}.col-md-pull-5{right:41.66666666666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333333333336%}.col-md-pull-8{right:66.66666666666666%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333333334%}.col-md-pull-11{right:91.66666666666666%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333333333332%}.col-md-offset-2{margin-left:16.666666666666664%}.col-md-offse
 t-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333333333%}.col-md-offset-5{margin-left:41.66666666666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333333333336%}.col-md-offset-8{margin-left:66.66666666666666%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333333334%}.col-md-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333333333332%}.col-lg-push-
 2{left:16.666666666666664%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333333333%}.col-lg-push-5{left:41.66666666666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333333333336%}.col-lg-push-8{left:66.66666666666666%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333333334%}.col-lg-push-11{left:91.66666666666666%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333333333332%}.col-lg-pull-2{right:16.666666666666664%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333333333%}.col-lg-pull-5{right:41.66666666666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333333333336%}.col-lg-pull-8{right:66.66666666666666%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333333334%}.col-lg-pull-11{right:91.66666666666666%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333333333332%}.col-lg-offset-2{margin-left:16.666666666666664%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333333333%}.col-lg-offset-5{margin-lef
 t:41.66666666666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333333333336%}.col-lg-offset-8{margin-left:66.66666666666666%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333333334%}.col-lg-offset-11{margin-left:91.66666666666666%}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.tabl
 e-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*="col-"]{display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.activ
 e>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8;border-color:#d6e9c6}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6;border-color:#c9e2b3}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.tabl
 e>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede;border-color:#eed3d7}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc;border-color:#e6c1c7}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc;border-color:#f8e5be}@media(max-width:768px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:scroll;overflow-y:hidden;border:1px solid #ddd;-ms-
 overflow-style:-ms-autohiding-scrollbar;-webkit-overflow-scrolling:touch}.table-responsive>.table{margin-bottom:0;background-color:#fff}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>t
 d:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>thead>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>thead>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}select[multiple],sele
 ct[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}output{display:block;padding-top:7px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle}.form-control:-moz-placeholder{color:#999}.form-control::-moz-placeholder{color:#999}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color eas
 e-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}textarea.form-control{height:auto}.form-group{margin-bottom:15px}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-l
 eft:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm{height:auto}.input-lg{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:45px;line-height:45px}textarea.input-lg{height:auto}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .form-control{border-color:#c09853;-webki
 t-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .form-control{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .form-control{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px 
 rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.form-control-static{padding-top:7px;margin-bottom:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media(min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block}.form-inline .radio,.form-inline .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0}}.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding
 -top:7px;margin-top:0;margin-bottom:0}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}.form-horizontal .form-group:before,.form-horizontal .form-group:after{display:table;content:" "}.form-horizontal .form-group:after{clear:both}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-ima
 ge:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.dis
 abled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#3276b1;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-warning{color:#fff;backg
 round-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ed9c28;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{col
 or:#fff;background-color:#d2322d;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disab
 led,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b3d7;border-color:#269abc}.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disable
 d]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{paddi
 ng:1px 5px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@font-face{font-family:'Glyphicons Halflings';src:url('../fonts/glyphicons-halflings-regular.eot');src:url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),url('../fonts/glyphicons-halflings-regular.woff') format('woff'),url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'),url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';-
 webkit-font-smoothing:antialiased;font-style:normal;font-weight:normal;line-height:1}.glyphicon:empty{width:1em}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e0
 16"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e04
 1"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-print:before{content:"\e045"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-mo
 ve:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:
 "\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder
 -open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-
 link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:
 "\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{
 content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-briefcase:before{content:"\1f4bc"}.glyphicon-calendar:before{content:"\1f4c5"}.glyphicon-pushpin:before{content:"\1f4cc"}.glyphicon-paperclip:before{content:"\1f4ce"}.glyphicon-camera:before{content:"\1f4f7"}.glyphicon-lock:before{content:"\1f512"}.glyphicon-bell:before{content:"\1f514"}.glyphicon-bookmark:before{content:"\1f516"}.glyphicon-fire:before{content:"\1f525"}.glyphicon-wrench:before{content:"\1f527"}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-bottom:0 dotted;border-l
 eft:4px solid transparent;content:""}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#428bca}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outl
 ine:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0 dotted;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media(min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}}.btn-default .caret{border-top-color:#333}.btn-primary .caret,.btn-success .caret,.btn-warning .care
 t,.btn-danger .caret,.btn-info .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret,.dropup .btn-danger .caret,.dropup .btn-info .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table
 ;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown
 -toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{padding:5px 10px;padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-g
 roup-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-bottom-left-radius:4px;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>
 .btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;border-collapse:separate;table-layout:fixed}.btn-group-justified .btn{display:table-cell;float:none;width:1%}[data-toggle="buttons"]>.btn>input[type="radio"],[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group .form-control{width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>
 .btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;text-align:center;background-color:#eee;border:1px solid #ccc;border-radiu
 s:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{m
 argin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radiu
 s:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}@media(min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav
 -pills>li>a{border-radius:5px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}@media(min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media(min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after
 {clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;z-index:1000;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}@media(min-width:768px){.navbar{border-radius:4px}}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}.navbar-header:before,.navbar-header:after{display:table;content:" "}.navbar-header:after{clear:both}@media(min-width:768px){.navbar-hea
 der{float:left}}.navbar-collapse{max-height:340px;padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse:before,.navbar-collapse:after{display:table;content:" "}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media(min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-collapse .navbar-nav.navbar-left:first-child{margin-left:-15px}.navbar-collapse .navbar-nav.navbar-right:last-child{margin-right:-15px}.navbar-collapse .navbar-text:last-child{margin-right:0}}.container>.navbar-header,.container>.navbar-collapse{margin-right:-15px;margin-left:-15px}@
 media(min-width:768px){.container>.navbar-header,.container>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{border-width:0 0 1px}@media(min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;border-width:0 0 1px}@media(min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;z-index:1030}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media(min-width:768px){.navbar>.container .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media(
 min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media(max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media(min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}@media(min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webk
 it-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}@media(min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;padding-left:0;margin-top:0;margin-bottom:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{float:none;margin-left:0}}@media(max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media(min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav.pull-right>li>.dropdown-
 menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-text{float:left;margin-top:15px;margin-bottom:15px}@media(min-width:768px){.navbar-text{margin-right:15px;margin-left:15px}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.n
 avbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#ccc}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e6e6e6}.navbar-default .navbar-nav>.dropdown>a:hover .caret,.navbar-default .navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.open>a .caret,.navbar-default .navbar-nav>.open>a:hover .caret,.navbar-default .navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-default .navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}@media(max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav 
 .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navba
 r-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav
 bar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media(max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#999}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-me
 nu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.paginatio
 n>li>a:focus,.pagination>li>span:focus{background-color:#eee}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination
 -sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:
 #fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-heigh
 t:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}.container .jumbotron{border-radius:6px}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1{font-size:63px}}.thumbnail{display:inline-block;display:block;height:auto;max-width:100%;padding:4px;margin-bottom:20px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:
 4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img{display:block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable{padding-right:35px}.alert-dismissable .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbe
 ed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow
 :inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.act
 ive .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%
 ,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,2
 55,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(
 255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:
 hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background
 -color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel-body:before,.panel-body:after{display:table;content:" "}.panel-body:after{clear:both}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0}.panel>.list-group .list-group-item:
 first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.list-group .list-group-item:last-child{border-bottom:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.table{margin-bottom:0}.panel>.panel-body+.table{border-top:1px solid #ddd}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;margin-bottom:0;font-size:16px}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-group .panel{margin-bottom:0;overflow:hidden;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse .panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #dd
 d}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#ddd}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#428bca}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning>.panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.pane
 l-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#fbeed5}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger>.panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#eed3d7}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-co
 lor:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}body.modal-open,.modal-open .navbar-fixed-top,.modal-open .navbar-fixed-bottom{margin-right:15px}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-
 transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-dialog{z-index:1050;width:auto;padding:10px;margin-right:auto;margin-left:auto}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.
 modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:600px;padding-top:30px;padding-bottom:30px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-ra
 dius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:#000;border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;displ
 ay:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bott
 om:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out 
 left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear
 -gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-
 prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-rig

<TRUNCATED>

[21/37] usergrid git commit: Configurable Password Policy and 5 supporting JUnit tests.

Posted by sn...@apache.org.
Configurable Password Policy and 5 supporting JUnit tests.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a30e1a56
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a30e1a56
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a30e1a56

Branch: refs/heads/usergrid-1318-queue
Commit: a30e1a564e74b033601db60d37960fca46b34fe7
Parents: c65f903
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Oct 19 13:42:34 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Oct 19 14:05:17 2016 -0400

----------------------------------------------------------------------
 .../exceptions/AbstractExceptionMapper.java     |   2 +-
 .../PasswordPolicyViolationExceptionMapper.java |  48 ++++++
 .../collection/users/PermissionsResourceIT.java |   4 +-
 .../collection/users/UserResourceIT.java        |  38 ++++-
 .../usergrid/rest/management/AdminUsersIT.java  |  51 ++++++
 .../rest/management/ManagementResourceIT.java   |   4 +-
 .../rest/management/RegistrationIT.java         |   6 +-
 .../cassandra/ManagementServiceImpl.java        |  73 +++++++--
 .../usergrid/security/PasswordPolicy.java       |  53 ++++++
 .../usergrid/security/PasswordPolicyFig.java    |  79 +++++++++
 .../usergrid/security/PasswordPolicyImpl.java   | 156 ++++++++++++++++++
 .../PasswordPolicyViolationException.java       |  46 ++++++
 .../services/guice/ServiceModuleImpl.java       |   8 +
 .../usergrid/security/PasswordPolicyTest.java   |  47 ++++++
 .../security/PasswordPolicyTestFig.java         | 161 +++++++++++++++++++
 15 files changed, 750 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
index 19d35fd..4a4b8b0 100644
--- a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/AbstractExceptionMapper.java
@@ -102,7 +102,7 @@ public abstract class AbstractExceptionMapper<E extends java.lang.Throwable> imp
     }
 
 
-    private Response toResponse( int status, String jsonResponse ) {
+    protected Response toResponse( int status, String jsonResponse ) {
         if ( status >= 500 ) {
             // only log real errors as errors
             logger.error( "Server Error ({}):\n{}", status, jsonResponse );

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/PasswordPolicyViolationExceptionMapper.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/PasswordPolicyViolationExceptionMapper.java b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/PasswordPolicyViolationExceptionMapper.java
new file mode 100644
index 0000000..fcd09e3
--- /dev/null
+++ b/stack/rest/src/main/java/org/apache/usergrid/rest/exceptions/PasswordPolicyViolationExceptionMapper.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.rest.exceptions;
+
+
+import org.apache.usergrid.rest.ApiResponse;
+import org.apache.usergrid.services.exceptions.PasswordPolicyViolationException;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.Provider;
+
+import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
+import static org.apache.usergrid.utils.JsonUtils.mapToJsonString;
+
+
+/** <p> Mapper for OAuthProblemException. </p> */
+@Provider
+public class PasswordPolicyViolationExceptionMapper extends AbstractExceptionMapper<PasswordPolicyViolationException> {
+
+    @Override
+    public Response toResponse( PasswordPolicyViolationException e ) {
+
+        ApiResponse apiResponse = new ApiResponse();
+        apiResponse.setError( e.getMessage() );
+
+        StringBuilder sb = new StringBuilder();
+        for ( String violation : e.getViolations() ) {
+            sb.append( violation ).append(" ");
+        }
+        apiResponse.setErrorDescription( sb.toString() );
+
+        return toResponse( SC_BAD_REQUEST, mapToJsonString(apiResponse) );
+    }
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/PermissionsResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/PermissionsResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/PermissionsResourceIT.java
index 5380e00..aff952b 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/PermissionsResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/PermissionsResourceIT.java
@@ -638,12 +638,12 @@ public class PermissionsResourceIT extends AbstractRestIT {
 
         // cannot create app user named me
         try {
-            app().collection( "users" ).post( new User( "me", "it's me", "me@example.com", "me!" ) );
+            app().collection( "users" ).post( new User( "me", "it's me", "me@example.com", "me!me!" ) );
             fail("Must not be able to create app user named me");
         } catch ( BadRequestException expected ) {}
 
         // cannot use update to rename app user to me
-        Entity user = app().collection( "users" ).post( new User( "dave", "Sneaky Me", "me@example.com", "me!" ) );
+        Entity user = app().collection( "users" ).post( new User( "dave", "Sneaky Me", "me@example.com", "me!me!" ) );
         try {
             app().collection( "users" ).entity( user ).put( new Entity().chainPut( "username", "me" ));
             fail("Must not be able to update app user to name me");

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/UserResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/UserResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/UserResourceIT.java
index d36d0a1..c9dc0d8 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/UserResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/users/UserResourceIT.java
@@ -47,6 +47,7 @@ import java.io.IOException;
 
 import javax.ws.rs.core.MediaType;
 
+import static org.apache.usergrid.security.PasswordPolicy.ERROR_POLICY_VIOLIATION;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -776,6 +777,7 @@ public class UserResourceIT extends AbstractRestIT {
     }
 
 
+
     @Test
     public void test_PUT_password_ok() {
         Entity entity = usersResource.post(new User("edanuff", "edanuff", "edanuff@email.com", "sesame"));
@@ -798,7 +800,7 @@ public class UserResourceIT extends AbstractRestIT {
     @Test
     public void setUserPasswordAsAdmin() throws IOException {
         usersResource.post(new User("edanuff", "edanuff", "edanuff@email.com", "sesame"));
-        String newPassword = "foo";
+        String newPassword = "foofoo";
         refreshIndex();
 
         // change the password as admin. The old password isn't required
@@ -816,8 +818,8 @@ public class UserResourceIT extends AbstractRestIT {
     public void passwordMismatchErrorUser() {
         usersResource.post(new User("edanuff", "edanuff", "edanuff@email.com", "sesame"));
 
-        String origPassword = "foo";
-        String newPassword = "bar";
+        String origPassword = "foofoo";
+        String newPassword = "barbar";
 
         ChangePasswordEntity data = new ChangePasswordEntity(origPassword, newPassword);
 
@@ -833,6 +835,36 @@ public class UserResourceIT extends AbstractRestIT {
 
 
     @Test
+    public void createAppUserWithInvalidPassword() {
+
+        try {
+            Entity entity = usersResource.post(new User("edanuff", "edanuff", "edanuff@email.com", "foo"));
+            fail("Invalid password should have caused error");
+
+        } catch( ClientErrorException uie ) {
+            errorParse( 400, ERROR_POLICY_VIOLIATION, uie );
+        }
+    }
+
+
+    @Test
+    public void testChangePassordToInvalidValue() {
+
+        Entity entity = usersResource.post(new User("edanuff", "edanuff", "edanuff@email.com", "sesame"));
+        refreshIndex();
+
+        try {
+            usersResource.entity(entity).collection("password").post(new ChangePasswordEntity("sesame", "abc"));
+            fail("Invalid password should have caused error");
+
+        } catch( ClientErrorException uie ) {
+            errorParse( 400, ERROR_POLICY_VIOLIATION, uie );
+        }
+
+    }
+
+
+    @Test
     public void addRemoveRole() throws IOException {
         String roleName = "rolename";
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/test/java/org/apache/usergrid/rest/management/AdminUsersIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/AdminUsersIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/AdminUsersIT.java
index a8bd834..f80f131 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/AdminUsersIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/AdminUsersIT.java
@@ -19,6 +19,7 @@ package org.apache.usergrid.rest.management;
 
 import com.sun.jersey.api.client.UniformInterfaceException;
 import net.jcip.annotations.NotThreadSafe;
+import org.apache.commons.lang.RandomStringUtils;
 import org.apache.usergrid.management.MockImapClient;
 import org.apache.usergrid.persistence.core.util.StringUtils;
 import org.apache.usergrid.persistence.index.utils.UUIDUtils;
@@ -42,6 +43,7 @@ import java.io.IOException;
 import java.util.*;
 
 import static org.apache.usergrid.management.AccountCreationProps.*;
+import static org.apache.usergrid.security.PasswordPolicy.ERROR_POLICY_VIOLIATION;
 import static org.junit.Assert.*;
 
 
@@ -92,6 +94,55 @@ public class AdminUsersIT extends AbstractRestIT {
 
 
     /**
+     * Test that creating user with password that violates policy results in informative error message.
+     */
+    @Test
+    public void createUserWithInvalidPassword() throws IOException {
+
+        String rando = RandomStringUtils.randomAlphanumeric(10);
+        Form userForm = new Form();
+        userForm.param( "username", "user_" + rando );
+        userForm.param( "name", rando);
+        userForm.param( "email", "user_" + rando + "@example.com" );
+        userForm.param( "password", "abc" );
+
+        try {
+            management().users().post( User.class, userForm );
+            fail("Invalid password should have caused error");
+
+        } catch( ClientErrorException uie ) {
+            errorParse( 400, ERROR_POLICY_VIOLIATION, uie );
+        }
+
+    }
+
+
+    /**
+     * Test that setting a password that violates policy results in informative error message.
+     */
+    @Test
+    public void resetPasswordWithInvalidNewPassword() throws IOException {
+
+        String username = clientSetup.getUsername();
+        String password = clientSetup.getPassword();
+
+        Map<String, Object> passwordPayload = new HashMap<String, Object>();
+
+        // Default password policy is lenient, only requires length of 4
+        passwordPayload.put( "newpassword", "abc" );
+        passwordPayload.put( "oldpassword", password );
+
+        try {
+            management.users().user( username ).password().post( Entity.class, passwordPayload );
+            fail("Invalid password should have caused error");
+
+        } catch( ClientErrorException uie ) {
+            errorParse( 400, ERROR_POLICY_VIOLIATION, uie );
+        }
+    }
+
+
+    /**
      * Check that we cannot change the password by using an older password
      */
     @Test

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
index 1a3eb1d..635368e 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
@@ -81,7 +81,7 @@ public class ManagementResourceIT extends AbstractRestIT {
             .users()
             .post( ApiResponse.class, new User( "test" + uuid, "test" + uuid, "test" + uuid + "@email.com", "test" ) );
         Map<String, Object> data = new HashMap<>();
-        data.put( "newpassword", "foo" );
+        data.put( "newpassword", "foofoo" );
         data.put( "oldpassword", "test" );
         management.users()
             .user( "test" + uuid )
@@ -90,7 +90,7 @@ public class ManagementResourceIT extends AbstractRestIT {
         Token token = management.token().post(Token.class, new Token( "test"+uuid, "foo" ) );
         management.token().setToken( token );
         data.clear();
-        data.put( "oldpassword", "foo" );
+        data.put( "oldpassword", "foofoo" );
         data.put( "newpassword", "test" );
         management.users().user("test"+uuid).password().post(Entity.class, data);
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
index 885710d..8404632 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
@@ -145,6 +145,7 @@ public class RegistrationIT extends AbstractRestIT {
 
     /**
      * Test checking that we should be able to add a admin with no password attached to them.
+     *
      * @throws Exception
      */
 
@@ -163,7 +164,10 @@ public class RegistrationIT extends AbstractRestIT {
             // this should send resetpwd  link in email to newly added org admin user(that did not exist
             ///in usergrid) and "User Invited To Organization" email
             String adminToken = getAdminToken().getAccessToken();
-            Entity node = postAddAdminToOrg(this.clientSetup.getOrganizationName(), this.clientSetup.getUsername()+"@servertest.com", "");
+            Entity node = postAddAdminToOrg(
+                this.clientSetup.getOrganizationName(),
+                this.clientSetup.getUsername()+"@servertest.com",
+                "changeme");
             UUID userId = node.getUuid();
 
             refreshIndex();

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 03377a3..35fdd30 100644
--- a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@ -54,6 +54,7 @@ import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.apache.usergrid.security.AuthPrincipalInfo;
 import org.apache.usergrid.security.AuthPrincipalType;
+import org.apache.usergrid.security.PasswordPolicy;
 import org.apache.usergrid.security.crypto.EncryptionService;
 import org.apache.usergrid.security.oauth.AccessInfo;
 import org.apache.usergrid.security.oauth.ClientCredentialsInfo;
@@ -70,6 +71,7 @@ import org.apache.usergrid.security.tokens.TokenInfo;
 import org.apache.usergrid.security.tokens.TokenService;
 import org.apache.usergrid.security.tokens.exceptions.TokenException;
 import org.apache.usergrid.services.*;
+import org.apache.usergrid.services.exceptions.PasswordPolicyViolationException;
 import org.apache.usergrid.utils.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -172,6 +174,8 @@ public class ManagementServiceImpl implements ManagementService {
 
     protected LocalShiroCache localShiroCache;
 
+    protected PasswordPolicy passwordPolicy;
+
 
     private LoadingCache<UUID, OrganizationConfig> orgConfigByAppCache = CacheBuilder.newBuilder().maximumSize( 1000 )
         .expireAfterWrite( Long.valueOf( System.getProperty(ORG_CONFIG_CACHE_PROP, "30000") ) , TimeUnit.MILLISECONDS)
@@ -215,6 +219,8 @@ public class ManagementServiceImpl implements ManagementService {
         this.service = injector.getInstance(ApplicationService.class);
         this.localShiroCache = injector.getInstance(LocalShiroCache.class);
 
+        this.passwordPolicy = injector.getInstance( PasswordPolicy.class );
+
     }
 
     @Autowired
@@ -929,7 +935,8 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    public UserInfo createAdminFromPrexistingPassword( UUID organizationId, User user, CredentialsInfo ci ) throws Exception {
+    public UserInfo createAdminFromPrexistingPassword( UUID organizationId, User user, CredentialsInfo ci )
+        throws Exception {
 
         return doCreateAdmin( organizationId, user, ci,
                 // we can't actually set the mongo password. We never have the plain text in
@@ -941,6 +948,12 @@ public class ManagementServiceImpl implements ManagementService {
 
     @Override
     public UserInfo createAdminFrom( UUID organizationId, User user, String password ) throws Exception {
+
+        Collection<String> policyVioliations = passwordPolicy.policyCheck( password, false );
+        if ( !policyVioliations.isEmpty() ) {
+            throw new PasswordPolicyViolationException( passwordPolicy.getDescription( true ), policyVioliations );
+        }
+
         return doCreateAdmin(organizationId, user,
             encryptionService.defaultEncryptedCredentials(password, user.getUuid(), smf.getManagementAppId()),
             encryptionService.plainTextCredentials(mongoPassword(user.getUsername(), password), user.getUuid(),
@@ -949,20 +962,23 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    public UserInfo createAdminUser( UUID organizationId, String username, String name, String email, String password, boolean activated,
+    public UserInfo createAdminUser( UUID organizationId, String username, String name, String email,
+                                     String password, boolean activated,
                                      boolean disabled ) throws Exception {
         return createAdminUser(organizationId, username, name, email, password, activated, disabled, null);
     }
 
 
     @Override
-    public UserInfo createAdminUser( UUID organizationId, String username, String name, String email, String password, boolean activated,
-                                     boolean disabled, Map<String, Object> userProperties ) throws Exception {
+    public UserInfo createAdminUser( UUID organizationId, String username, String name, String email, String password,
+                                     boolean activated, boolean disabled, Map<String, Object> userProperties )
+        throws Exception {
 
         if ( !validateAdminInfo(username, name, email, password) ) {
             return null;
         }
-        return createAdminUserInternal( organizationId, username, name, email, password, activated, disabled, userProperties );
+        return createAdminUserInternal(
+            organizationId, username, name, email, password, activated, disabled, userProperties );
     }
 
 
@@ -976,25 +992,32 @@ public class ManagementServiceImpl implements ManagementService {
 
         EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
 
-        if ( !( tokens.isExternalSSOProviderEnabled() && SubjectUtils.isServiceAdmin()) && !em.isPropertyValueUniqueForEntity( "user", "username", username ) ) {
+        if ( !( tokens.isExternalSSOProviderEnabled() && SubjectUtils.isServiceAdmin())
+            && !em.isPropertyValueUniqueForEntity( "user", "username", username ) ) {
             throw new DuplicateUniquePropertyExistsException( "user", "username", username );
         }
 
-        if ( !(tokens.isExternalSSOProviderEnabled()&& SubjectUtils.isServiceAdmin())  && !em.isPropertyValueUniqueForEntity( "user", "email", email ) ) {
+        if ( !(tokens.isExternalSSOProviderEnabled()&& SubjectUtils.isServiceAdmin())
+            && !em.isPropertyValueUniqueForEntity( "user", "email", email ) ) {
             throw new DuplicateUniquePropertyExistsException( "user", "email", email );
         }
         return true;
     }
 
 
-    protected UserInfo createAdminUserInternal( UUID organizationId, String username, String name, String email, String password,
-                                              boolean activated, boolean disabled, Map<String, Object> userProperties )
+    protected UserInfo createAdminUserInternal( UUID organizationId, String username, String name, String email,
+                                                String password, boolean activated, boolean disabled,
+                                                Map<String, Object> userProperties )
             throws Exception {
+
+
         logger.info( "createAdminUserInternal: {}", username );
 
-        if ( isBlank( password ) ) {
-            password = encodeBase64URLSafeString( bytes( UUID.randomUUID() ) );
+        Collection<String> policyVioliations = passwordPolicy.policyCheck( password, true );
+        if ( !policyVioliations.isEmpty() ) {
+            throw new PasswordPolicyViolationException( passwordPolicy.getDescription( true ), policyVioliations );
         }
+
         if ( username == null ) {
             username = email;
         }
@@ -1265,6 +1288,11 @@ public class ManagementServiceImpl implements ManagementService {
             return;
         }
 
+        Collection<String> policyVioliations = passwordPolicy.policyCheck( newPassword, true );
+        if ( !policyVioliations.isEmpty() ) {
+            throw new PasswordPolicyViolationException( passwordPolicy.getDescription( true ), policyVioliations );
+        }
+
         EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
         User user = em.get( userId, User.class );
 
@@ -1646,7 +1674,8 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    public Map<String, Object> getAdminUserOrganizationData(UserInfo user, boolean includeApps, boolean includeOrgUsers) throws Exception {
+    public Map<String, Object> getAdminUserOrganizationData(UserInfo user, boolean includeApps, boolean includeOrgUsers)
+        throws Exception {
 
         Map<String, Object> json = new HashMap<>();
 
@@ -2654,8 +2683,8 @@ public class ManagementServiceImpl implements ManagementService {
             String token = getConfirmationTokenForAdminUser(user.getUuid(), 0, organizationId);
             OrganizationConfig orgConfig = organizationId != null ?
                 getOrganizationConfigByUuid(organizationId) : getOrganizationConfigForUserInfo(user);
-            String confirmation_url = orgConfig.getFullUrl(WorkflowUrl.ADMIN_CONFIRMATION_URL, user.getUuid().toString()) +
-                "?token=" + token;
+            String confirmation_url = orgConfig.getFullUrl(WorkflowUrl.ADMIN_CONFIRMATION_URL,
+                user.getUuid().toString()) + "?token=" + token;
             sendAdminUserEmail(user, "User Account Confirmation: " + user.getEmail(),
                 emailMsg(hashMap("confirm_email", user.getEmail()).map("confirmation_url", confirmation_url),
                     PROPERTIES_EMAIL_ADMIN_CONFIRMATION));
@@ -2779,7 +2808,8 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     @Override
-    public boolean checkPasswordResetTokenForAppUser( UUID applicationId, UUID userId, String token ) throws Exception {
+    public boolean checkPasswordResetTokenForAppUser( UUID applicationId, UUID userId, String token )
+        throws Exception {
         AuthPrincipalInfo principal = null;
         try {
             principal = getPrincipalFromAccessToken( token, TOKEN_TYPE_PASSWORD_RESET, APPLICATION_USER );
@@ -3036,10 +3066,16 @@ public class ManagementServiceImpl implements ManagementService {
 
     @Override
     public void setAppUserPassword( UUID applicationId, UUID userId, String newPassword ) throws Exception {
+
         if ( ( userId == null ) || ( newPassword == null ) ) {
             return;
         }
 
+        Collection<String> policyVioliations = passwordPolicy.policyCheck( newPassword, false );
+        if ( !policyVioliations.isEmpty() ) {
+            throw new PasswordPolicyViolationException( passwordPolicy.getDescription( false ), policyVioliations );
+        }
+
         EntityManager em = emf.getEntityManager( applicationId );
         User user = em.get(userId, User.class);
 
@@ -3051,6 +3087,7 @@ public class ManagementServiceImpl implements ManagementService {
     @Override
     public void setAppUserPassword( UUID applicationId, UUID userId, String oldPassword, String newPassword )
             throws Exception {
+
         if ( ( userId == null ) ) {
             throw new IllegalArgumentException( "userId is required" );
         }
@@ -3097,7 +3134,8 @@ public class ManagementServiceImpl implements ManagementService {
         final CredentialsInfo ci = readUserPasswordCredentials( applicationId, userId, User.ENTITY_TYPE );
 
         if ( ci == null ) {
-            throw new EntityNotFoundException("Could not find credentials for user with id " + userId + " in application" + applicationId );
+            throw new EntityNotFoundException("Could not find credentials for user with id " + userId
+                + " in application" + applicationId );
         }
 
         return ci;
@@ -3242,7 +3280,8 @@ public class ManagementServiceImpl implements ManagementService {
 
 
     /** read the user password credential's info */
-    protected CredentialsInfo readUserPasswordCredentials( UUID appId, UUID ownerId, String ownerType ) throws Exception {
+    protected CredentialsInfo readUserPasswordCredentials( UUID appId, UUID ownerId, String ownerType )
+        throws Exception {
         return readCreds( appId, ownerId, ownerType, USER_PASSWORD );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicy.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicy.java b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicy.java
new file mode 100644
index 0000000..cc29b20
--- /dev/null
+++ b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicy.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.security;
+
+
+import java.util.Collection;
+
+
+/**
+ * Interface to password policy.
+ */
+public interface PasswordPolicy {
+
+    String ERROR_POLICY_VIOLIATION    = "error_password_policy_violation";
+
+    String ERROR_UPPERCASE_POLICY     = "error_uppercase_policy";
+
+    String ERROR_DIGITS_POLICY        = "error_digits_policy";
+
+    String ERROR_SPECIAL_CHARS_POLICY = "error_special_chars_policy";
+
+    String ERROR_LENGTH_POLICY        = "error_length_policy";
+
+
+    /**
+     * Check to see if password conforms to policy.
+     *
+     * @param password Password to check.
+     * @return Collection of error strings, one for each policy violated or empty if password conforms.
+     */
+    Collection<String> policyCheck( String password, boolean isAdminUser );
+
+
+    /**
+     * Get description of password policy for error messages.
+     */
+    String getDescription( boolean isAdminUser );
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyFig.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyFig.java b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyFig.java
new file mode 100644
index 0000000..41cda7c
--- /dev/null
+++ b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyFig.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.security;
+
+import org.safehaus.guicyfig.Default;
+import org.safehaus.guicyfig.FigSingleton;
+import org.safehaus.guicyfig.GuicyFig;
+import org.safehaus.guicyfig.Key;
+
+
+@FigSingleton
+public interface PasswordPolicyFig extends GuicyFig {
+
+    String ALLOWED_SPECIAL_CHARS       = "usergrid.password-policy.allowed-special-chars";
+
+    String MIN_UPPERCASE_ADMIN         = "usergrid.password-policy.min-uppercase-admin";
+    String MIN_UPPERCASE               = "usergrid.password-policy.min-uppercase";
+
+    String MIN_DIGITS_ADMIN            = "usergrid.password-policy.min-uppercase-admin";
+    String MIN_DIGITS                  = "usergrid.password-policy.min-uppercase";
+
+    String MIN_SPECIAL_CHARS_ADMIN     = "usergrid.password-policy.min-special-chars-admin";
+    String MIN_SPECIAL_CHARS           = "usergrid.password-policy.min-special-chars";
+
+    String MIN_LENGTH_ADMIN            = "usergrid.password-policy.min-length-admin";
+    String MIN_LENGTH                  = "usergrid.password-policy.min-length";
+
+
+    @Key(MIN_UPPERCASE_ADMIN)
+    @Default("0")
+    int getMinUppercaseAdmin();
+
+    @Key(MIN_UPPERCASE)
+    @Default("0")
+    int getMinUppercase();
+
+    @Key(MIN_DIGITS_ADMIN)
+    @Default("0")
+    int getMinDigitsAdmin();
+
+    @Key(MIN_DIGITS)
+    @Default("0")
+    int getMinDigits();
+
+    @Key(MIN_SPECIAL_CHARS_ADMIN)
+    @Default("0")
+    int getMinSpecialCharsAdmin();
+
+    @Key(MIN_SPECIAL_CHARS)
+    @Default("0")
+    int getMinSpecialChars();
+
+    @Key(MIN_LENGTH_ADMIN)
+    @Default("4")
+    int getMinLengthAdmin();
+
+    @Key(MIN_LENGTH)
+    @Default("4")
+    int getMinLength();
+
+    @Key(ALLOWED_SPECIAL_CHARS)
+    @Default("`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
+    String getAllowedSpecialChars();
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyImpl.java b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyImpl.java
new file mode 100644
index 0000000..500592a
--- /dev/null
+++ b/stack/services/src/main/java/org/apache/usergrid/security/PasswordPolicyImpl.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.security;
+
+import com.google.inject.Inject;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+
+public class PasswordPolicyImpl implements PasswordPolicy {
+
+    private final PasswordPolicyFig passwordPolicyFig;
+
+
+    @Inject
+    PasswordPolicyImpl( PasswordPolicyFig passwordPolicyFig ) {
+        this.passwordPolicyFig = passwordPolicyFig;
+    }
+
+
+    @Override
+    public String getDescription( boolean isAdminUser ) {
+
+        final int minLength;
+        final int minUppercase;
+        final int minDigits;
+        final int minSpecialChars;
+
+        if ( isAdminUser ) {
+            minLength       = passwordPolicyFig.getMinLengthAdmin();
+            minUppercase    = passwordPolicyFig.getMinUppercaseAdmin();
+            minDigits       = passwordPolicyFig.getMinDigitsAdmin();
+            minSpecialChars = passwordPolicyFig.getMinSpecialCharsAdmin();
+        } else {
+            minLength       = passwordPolicyFig.getMinLength();
+            minUppercase    = passwordPolicyFig.getMinUppercase();
+            minDigits       = passwordPolicyFig.getMinDigits();
+            minSpecialChars = passwordPolicyFig.getMinSpecialChars();
+        }
+
+        StringBuilder sb = new StringBuilder();
+        sb.append( "Password must be at least " ).append( minLength ).append(" characters. ");
+        if ( minUppercase > 0 ) {
+            sb.append( "Must include " ).append( minUppercase ).append(" uppercase characters. ");
+        }
+        if ( minDigits > 0 ) {
+            sb.append( "Must include " ).append( minDigits ).append(" numbers. ");
+        }
+        if ( minSpecialChars > 0 ) {
+            sb.append( "Must include " ).append( minUppercase ).append(" special characters. ");
+        }
+        return sb.toString();
+    }
+
+
+    @Override
+    public Collection<String> policyCheck( String password, boolean isAdminUser ) {
+
+        final int minLength;
+        final int minUppercase;
+        final int minDigits;
+        final int minSpecialChars;
+
+        if ( isAdminUser ) {
+            minLength       = passwordPolicyFig.getMinLengthAdmin();
+            minUppercase    = passwordPolicyFig.getMinUppercaseAdmin();
+            minDigits       = passwordPolicyFig.getMinDigitsAdmin();
+            minSpecialChars = passwordPolicyFig.getMinSpecialCharsAdmin();
+        } else {
+            minLength       = passwordPolicyFig.getMinLength();
+            minUppercase    = passwordPolicyFig.getMinUppercase();
+            minDigits       = passwordPolicyFig.getMinDigits();
+            minSpecialChars = passwordPolicyFig.getMinSpecialChars();
+        }
+
+        return policyCheck( password, minLength, minUppercase, minDigits, minSpecialChars );
+    }
+
+
+    public Collection<String> policyCheck(
+        String password, int minLength, int minUppercase, int minDigits, int minSpecialChars ) {
+
+
+        List<String> violations = new ArrayList<>(3);
+
+        // check length
+        if ( password == null || password.length() < minLength ) {
+            violations.add( PasswordPolicy.ERROR_LENGTH_POLICY
+                + ": must be at least " + minLength + " characters" );
+        }
+
+        // count upper case
+        if ( minUppercase > 0 ) {
+            int upperCaseCount = 0;
+            for (char c : password.toCharArray()) {
+                if (StringUtils.isAllUpperCase( String.valueOf( c ) )) {
+                    upperCaseCount++;
+                }
+            }
+            if (upperCaseCount < minUppercase) {
+                violations.add( PasswordPolicy.ERROR_UPPERCASE_POLICY
+                    + ": requires " + minUppercase + " uppercase characters" );
+            }
+        }
+
+        // count digits case
+        if ( minDigits > 0 ) {
+            int digitCount = 0;
+            for (char c : password.toCharArray()) {
+                if (StringUtils.isNumeric( String.valueOf( c ) )) {
+                    digitCount++;
+                }
+            }
+            if (digitCount < minDigits) {
+                violations.add( PasswordPolicy.ERROR_DIGITS_POLICY
+                    + ": requires " + minDigits + " digits" );
+            }
+        }
+
+        // count special characters
+        if ( minSpecialChars > 0 ) {
+            int specialCharCount = 0;
+            for (char c : password.toCharArray()) {
+                if (passwordPolicyFig.getAllowedSpecialChars().contains( String.valueOf( c ) )) {
+                    specialCharCount++;
+                }
+            }
+            if (specialCharCount < minSpecialChars) {
+                violations.add( PasswordPolicy.ERROR_SPECIAL_CHARS_POLICY
+                    + ": requires " + minSpecialChars + " special characters" );
+            }
+        }
+
+        return violations;
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/services/exceptions/PasswordPolicyViolationException.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/exceptions/PasswordPolicyViolationException.java b/stack/services/src/main/java/org/apache/usergrid/services/exceptions/PasswordPolicyViolationException.java
new file mode 100644
index 0000000..531e3fd
--- /dev/null
+++ b/stack/services/src/main/java/org/apache/usergrid/services/exceptions/PasswordPolicyViolationException.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.services.exceptions;
+
+
+import java.util.Collection;
+
+import static org.apache.usergrid.security.PasswordPolicy.ERROR_POLICY_VIOLIATION;
+
+
+public class PasswordPolicyViolationException extends RuntimeException {
+    private static final long serialVersionUID = 1L;
+
+    private final Collection<String> violations;
+    private final String description;
+
+    public PasswordPolicyViolationException( String description, Collection<String> violations ) {
+        super( ERROR_POLICY_VIOLIATION );
+        this.violations = violations;
+        this.description = description;
+    }
+
+
+    public Collection<String> getViolations() {
+        return violations;
+    }
+
+
+    public String getDescription() {
+        return description;
+    }
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/main/java/org/apache/usergrid/services/guice/ServiceModuleImpl.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/services/guice/ServiceModuleImpl.java b/stack/services/src/main/java/org/apache/usergrid/services/guice/ServiceModuleImpl.java
index 58b301a..c7f7d08 100644
--- a/stack/services/src/main/java/org/apache/usergrid/services/guice/ServiceModuleImpl.java
+++ b/stack/services/src/main/java/org/apache/usergrid/services/guice/ServiceModuleImpl.java
@@ -24,6 +24,7 @@ import com.google.inject.TypeLiteral;
 import com.google.inject.multibindings.Multibinder;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.usergrid.corepersistence.ServiceModule;
+import org.apache.usergrid.corepersistence.index.CoreIndexFig;
 import org.apache.usergrid.locking.guice.LockModule;
 import org.apache.usergrid.management.AppInfoMigrationPlugin;
 import org.apache.usergrid.persistence.cache.CacheFactory;
@@ -31,8 +32,12 @@ import org.apache.usergrid.persistence.cache.impl.CacheFactoryImpl;
 import org.apache.usergrid.persistence.cache.impl.ScopedCacheSerialization;
 import org.apache.usergrid.persistence.cache.impl.ScopedCacheSerializationImpl;
 import org.apache.usergrid.persistence.core.migration.data.MigrationPlugin;
+import org.apache.usergrid.security.PasswordPolicy;
+import org.apache.usergrid.security.PasswordPolicyFig;
+import org.apache.usergrid.security.PasswordPolicyImpl;
 import org.apache.usergrid.security.shiro.UsergridAuthenticationInfo;
 import org.apache.usergrid.security.shiro.UsergridAuthorizationInfo;
+import org.safehaus.guicyfig.GuicyFigModule;
 
 
 // <bean id="notificationsQueueListener" class="org.apache.usergrid.services.notifications.QueueListener"
@@ -70,5 +75,8 @@ public class ServiceModuleImpl extends AbstractModule implements ServiceModule {
         bind(    new TypeLiteral<ScopedCacheSerialization<String, UsergridAuthenticationInfo>>() {})
             .to( new TypeLiteral<ScopedCacheSerializationImpl<String, UsergridAuthenticationInfo>>() {});
 
+        bind( PasswordPolicy.class ).to( PasswordPolicyImpl.class );
+
+        install( new GuicyFigModule( PasswordPolicyFig.class ) );
     }
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTest.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTest.java b/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTest.java
new file mode 100644
index 0000000..1599b18
--- /dev/null
+++ b/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.security;
+
+import org.apache.usergrid.ServiceITSetup;
+import org.apache.usergrid.ServiceITSetupImpl;
+import org.junit.Assert;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+
+public class PasswordPolicyTest {
+
+    @ClassRule
+    public static ServiceITSetup setup = new ServiceITSetupImpl();
+
+
+    @Test
+    public void testBasicOperation() {
+
+        PasswordPolicyImpl passwordPolicy =
+            (PasswordPolicyImpl)setup.getInjector().getInstance( PasswordPolicy.class );
+
+        Assert.assertEquals( 4, passwordPolicy.policyCheck( "secret", 12, 1, 1, 1 ).size() );
+        Assert.assertEquals( 3, passwordPolicy.policyCheck( "Secret", 12, 1, 1, 1 ).size() );
+        Assert.assertEquals( 2, passwordPolicy.policyCheck( "Secr3t", 12, 1, 1, 1 ).size() );
+        Assert.assertEquals( 1, passwordPolicy.policyCheck( "Secr3t!", 12, 1, 1, 1 ).size() );
+        Assert.assertEquals( 0, passwordPolicy.policyCheck( "Secr3t!longer", 12, 1, 1, 1 ).size() );
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a30e1a56/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTestFig.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTestFig.java b/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTestFig.java
new file mode 100644
index 0000000..27a74d0
--- /dev/null
+++ b/stack/services/src/test/java/org/apache/usergrid/security/PasswordPolicyTestFig.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.security;
+
+import org.apache.usergrid.ServiceITSetup;
+import org.apache.usergrid.ServiceITSetupImpl;
+import org.junit.Assert;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.safehaus.guicyfig.Bypass;
+import org.safehaus.guicyfig.OptionState;
+import org.safehaus.guicyfig.Overrides;
+
+import java.beans.PropertyChangeListener;
+import java.util.Map;
+import java.util.Properties;
+
+
+public class PasswordPolicyTestFig implements PasswordPolicyFig {
+
+
+    @Override
+    public int getMinUppercaseAdmin() {
+        return 1;
+    }
+
+    @Override
+    public int getMinUppercase() {
+        return 1;
+    }
+
+    @Override
+    public int getMinDigitsAdmin() {
+        return 1;
+    }
+
+    @Override
+    public int getMinDigits() {
+        return 1;
+    }
+
+    @Override
+    public int getMinSpecialCharsAdmin() {
+        return 1;
+    }
+
+    @Override
+    public int getMinSpecialChars() {
+        return 1;
+    }
+
+    @Override
+    public int getMinLengthAdmin() {
+        return 1;
+    }
+
+    @Override
+    public int getMinLength() {
+        return 1;
+    }
+
+    @Override
+    public String getAllowedSpecialChars() {
+        return null;
+    }
+
+    @Override
+    public void addPropertyChangeListener(PropertyChangeListener listener) {
+
+    }
+
+    @Override
+    public void removePropertyChangeListener(PropertyChangeListener listener) {
+
+    }
+
+    @Override
+    public OptionState[] getOptions() {
+        return new OptionState[0];
+    }
+
+    @Override
+    public OptionState getOption(String key) {
+        return null;
+    }
+
+    @Override
+    public String getKeyByMethod(String methodName) {
+        return null;
+    }
+
+    @Override
+    public Object getValueByMethod(String methodName) {
+        return null;
+    }
+
+    @Override
+    public Properties filterOptions(Properties properties) {
+        return null;
+    }
+
+    @Override
+    public Map<String, Object> filterOptions(Map<String, Object> entries) {
+        return null;
+    }
+
+    @Override
+    public void override(String key, String override) {
+
+    }
+
+    @Override
+    public boolean setOverrides(Overrides overrides) {
+        return false;
+    }
+
+    @Override
+    public Overrides getOverrides() {
+        return null;
+    }
+
+    @Override
+    public void bypass(String key, String bypass) {
+
+    }
+
+    @Override
+    public boolean setBypass(Bypass bypass) {
+        return false;
+    }
+
+    @Override
+    public Bypass getBypass() {
+        return null;
+    }
+
+    @Override
+    public Class getFigInterface() {
+        return null;
+    }
+
+    @Override
+    public boolean isSingleton() {
+        return false;
+    }
+}


[34/37] usergrid git commit: If claims cannot be parsed, fetch new JWT token

Posted by sn...@apache.org.
If claims cannot be parsed, fetch new JWT token


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/d7c14bbc
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/d7c14bbc
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/d7c14bbc

Branch: refs/heads/usergrid-1318-queue
Commit: d7c14bbc8d24cbbb721817a08eeb50cc7081d7ab
Parents: 77ad91a
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Oct 24 14:53:54 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Oct 24 14:53:54 2016 -0400

----------------------------------------------------------------------
 .../security/sso/ApigeeSSO2Provider.java        | 55 +++++++++++---------
 1 file changed, 29 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/d7c14bbc/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
index 8ee8e03..27843b5 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
@@ -37,9 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import java.security.KeyFactory;
-import java.security.NoSuchAlgorithmException;
 import java.security.PublicKey;
-import java.security.spec.InvalidKeySpecException;
 import java.security.spec.X509EncodedKeySpec;
 import java.util.HashMap;
 import java.util.Map;
@@ -146,38 +144,43 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
         return properties.getProperty(USERGRID_EXTERNAL_PUBLICKEY_URL);
     }
 
-    public Jws<Claims> getClaimsForKeyUrl(String token, PublicKey ssoPublicKey) throws NoSuchAlgorithmException, InvalidKeySpecException, BadTokenException, ExpiredTokenException {
+    public Jws<Claims> getClaimsForKeyUrl(String token, PublicKey ssoPublicKey) throws BadTokenException {
+
         Jws<Claims> claims = null;
 
-        if(ssoPublicKey == null){
-            throw new IllegalArgumentException("Public key must be provided with Apigee " +
-                "token in order to verify signature.");
+        if (ssoPublicKey == null) {
+            throw new IllegalArgumentException( "Public key must be provided with Apigee JWT " +
+                "token in order to verify signature." );
         }
 
-        try {
-            claims = Jwts.parser().setSigningKey(ssoPublicKey).parseClaimsJws(token);
-        } catch (SignatureException se) {
-            if(logger.isDebugEnabled()) {
-                logger.debug("Signature was invalid for Apigee JWT: {} and key: {}", token, ssoPublicKey);
-            }
-            throw new BadTokenException("Invalid Apigee SSO token signature");
-        } catch (MalformedJwtException me){
-            if(logger.isDebugEnabled()) {
-                logger.debug("Beginning JSON object section of Apigee JWT invalid for token: {}", token);
+        int tries = 0;
+        int maxTries = 2;
+        while ( claims == null && tries++ < maxTries ) {
+            try {
+                claims = Jwts.parser().setSigningKey( ssoPublicKey ).parseClaimsJws( token );
+
+            } catch (SignatureException se) {
+                logger.warn( "Signature was invalid for Apigee JWT token: {} and key: {}", token, ssoPublicKey );
+
+            } catch (ExpiredJwtException e) {
+                final long expiry = Long.valueOf( e.getClaims().get( "exp" ).toString() );
+                final long expirationDelta = ((System.currentTimeMillis() / 1000) - expiry) * 1000;
+                logger.info(String.format("Apigee JWT Token expired %d milliseconds ago.", expirationDelta));
+
+            } catch (MalformedJwtException me) {
+                logger.error("Malformed JWT token", me);
+                throw new BadTokenException( "Malformed Apigee JWT token", me );
+
+            } catch (ArrayIndexOutOfBoundsException aio) {
+                logger.error("Error parsing JWT token", aio);
+                throw new BadTokenException( "Error parsing Apigee JWT token", aio );
             }
-            throw new BadTokenException("Malformed Apigee JWT");
-        } catch (ArrayIndexOutOfBoundsException aio){
-            if(logger.isDebugEnabled()) {
-                logger.debug("Signature section of Apigee JWT invalid for token: {}", token);
+
+            if ( claims == null ) {
+                this.publicKey =  getPublicKey( getExternalSSOUrl() );
             }
-            throw new BadTokenException("Malformed Apigee JWT");
-        } catch ( ExpiredJwtException e ){
-            final long expiry = Long.valueOf(e.getClaims().get("exp").toString());
-            final long expirationDelta = ((System.currentTimeMillis()/1000) - expiry)*1000;
-            throw new ExpiredTokenException(String.format("Token expired %d milliseconds ago.", expirationDelta ));
         }
 
-
         return claims;
     }
 


[04/37] usergrid git commit: Another try at rename.

Posted by sn...@apache.org.
Another try at rename.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f3879a46
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f3879a46
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f3879a46

Branch: refs/heads/usergrid-1318-queue
Commit: f3879a46c1fbda03dac8f51c09427c4bd4912ea1
Parents: 2298062
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Oct 21 09:48:10 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Oct 21 09:48:10 2015 -0400

----------------------------------------------------------------------
 content/img/miked.jpg | Bin 0 -> 36443 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f3879a46/content/img/miked.jpg
----------------------------------------------------------------------
diff --git a/content/img/miked.jpg b/content/img/miked.jpg
new file mode 100644
index 0000000..8dca2ee
Binary files /dev/null and b/content/img/miked.jpg differ


[35/37] usergrid git commit: Add key freshness and full set of tests

Posted by sn...@apache.org.
Add key freshness and full set of tests


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f0c9d44c
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f0c9d44c
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f0c9d44c

Branch: refs/heads/usergrid-1318-queue
Commit: f0c9d44c23559b2e9b80161770770231b16ad2df
Parents: d7c14bb
Author: Dave Johnson <sn...@apache.org>
Authored: Tue Oct 25 17:03:18 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Tue Oct 25 17:03:18 2016 -0400

----------------------------------------------------------------------
 .../security/sso/ApigeeSSO2Provider.java        |  86 ++++--
 .../usergrid/security/ApigeeSSO2ProviderIT.java | 297 +++++++++++++++++++
 2 files changed, 354 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f0c9d44c/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
----------------------------------------------------------------------
diff --git a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
index 27843b5..8e3c463 100644
--- a/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
+++ b/stack/services/src/main/java/org/apache/usergrid/security/sso/ApigeeSSO2Provider.java
@@ -45,9 +45,7 @@ import java.util.Properties;
 
 import static org.apache.commons.codec.binary.Base64.decodeBase64;
 
-/**
- * Created by ayeshadastagiri on 6/22/16.
- */
+
 public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
     private static final Logger logger = LoggerFactory.getLogger(ApigeeSSO2Provider.class);
@@ -56,9 +54,16 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
     protected ManagementService management;
     protected Client client;
     protected PublicKey publicKey;
+    protected long freshnessTime = 3000L;
+
+    public long lastPublicKeyFetch = 0L;
+
 
     public static final String USERGRID_EXTERNAL_PUBLICKEY_URL = "usergrid.external.sso.url";
 
+    public static final String USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS = "usergrid.external.sso.public-key-freshness";
+
+
     public ApigeeSSO2Provider() {
         ClientConfig clientConfig = new ClientConfig();
         clientConfig.register(new JacksonFeature());
@@ -67,17 +72,18 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
     public PublicKey getPublicKey(String keyUrl) {
 
-        if(keyUrl != null && !keyUrl.isEmpty()) {
+        if ( keyUrl != null && !keyUrl.isEmpty()) {
             try {
                 Map<String, Object> publicKey = client.target(keyUrl).request().get(Map.class);
-                String ssoPublicKey = publicKey.get(RESPONSE_PUBLICKEY_VALUE).toString().split("----\n")[1].split("\n---")[0];
+                String ssoPublicKey = publicKey.get(RESPONSE_PUBLICKEY_VALUE)
+                    .toString().split("----\n")[1].split("\n---")[0];
                 byte[] publicBytes = decodeBase64(ssoPublicKey);
                 X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
                 KeyFactory keyFactory = KeyFactory.getInstance("RSA");
                 PublicKey pubKey = keyFactory.generatePublic(keySpec);
                 return pubKey;
             }
-            catch(Exception e){
+            catch (Exception e) {
                 throw new IllegalArgumentException("error getting public key");
             }
         }
@@ -91,14 +97,13 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
         UserInfo userInfo = validateAndReturnUserInfo(token, ttl);
 
-        if(userInfo == null){
-            throw new ExternalSSOProviderAdminUserNotFoundException("Unable to load user from token: "+token);
+        if (userInfo == null) {
+            throw new ExternalSSOProviderAdminUserNotFoundException("Unable to load user from token: " + token);
         }
 
         return new TokenInfo(UUIDUtils.newTimeUUID(), "access", 1, 1, 1, ttl,
                 new AuthPrincipalInfo(AuthPrincipalType.ADMIN_USER, userInfo.getUuid(),
                     CpNamingUtils.MANAGEMENT_APPLICATION_ID), null);
-
     }
 
     @Override
@@ -134,7 +139,7 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
     @Override
     public Map<String, Object> getAllTokenDetails(String token, String keyUrl) throws Exception {
-        Jws<Claims> claims = getClaimsForKeyUrl(token,getPublicKey(keyUrl));
+        Jws<Claims> claims = getClaimsForKeyUrl( token );
         return JsonUtils.toJsonMap(claims.getBody());
 
     }
@@ -144,50 +149,64 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
         return properties.getProperty(USERGRID_EXTERNAL_PUBLICKEY_URL);
     }
 
-    public Jws<Claims> getClaimsForKeyUrl(String token, PublicKey ssoPublicKey) throws BadTokenException {
+    public Jws<Claims> getClaimsForKeyUrl( String token ) throws BadTokenException {
 
         Jws<Claims> claims = null;
 
-        if (ssoPublicKey == null) {
-            throw new IllegalArgumentException( "Public key must be provided with Apigee JWT " +
-                "token in order to verify signature." );
-        }
+        Exception lastException = null;
 
         int tries = 0;
         int maxTries = 2;
         while ( claims == null && tries++ < maxTries ) {
             try {
-                claims = Jwts.parser().setSigningKey( ssoPublicKey ).parseClaimsJws( token );
+                claims = Jwts.parser().setSigningKey( publicKey ).parseClaimsJws( token );
 
             } catch (SignatureException se) {
-                logger.warn( "Signature was invalid for Apigee JWT token: {} and key: {}", token, ssoPublicKey );
+                // bad signature, need to get latest publicKey and try again
+                // logger.debug( "Signature was invalid for Apigee JWT token: {}", token );
+                lastException = se;
+
+            } catch (ArrayIndexOutOfBoundsException aio) {
+                // unknown error, need to get latest publicKey and try again
+                logger.debug("Error parsing JWT token", aio);
+                throw new BadTokenException( "Unknown error processing JWT", aio );
 
             } catch (ExpiredJwtException e) {
                 final long expiry = Long.valueOf( e.getClaims().get( "exp" ).toString() );
                 final long expirationDelta = ((System.currentTimeMillis() / 1000) - expiry) * 1000;
-                logger.info(String.format("Apigee JWT Token expired %d milliseconds ago.", expirationDelta));
+                logger.debug(String.format("Apigee JWT Token expired %d milliseconds ago.", expirationDelta));
+
+                // token is expired
+                throw new BadTokenException( "Expired JWT", e );
 
             } catch (MalformedJwtException me) {
-                logger.error("Malformed JWT token", me);
-                throw new BadTokenException( "Malformed Apigee JWT token", me );
+                logger.debug( "Malformed JWT", me );
 
-            } catch (ArrayIndexOutOfBoundsException aio) {
-                logger.error("Error parsing JWT token", aio);
-                throw new BadTokenException( "Error parsing Apigee JWT token", aio );
+                // token is malformed
+                throw new BadTokenException( "Malformed JWT", me );
             }
 
-            if ( claims == null ) {
-                this.publicKey =  getPublicKey( getExternalSSOUrl() );
+            long keyFreshness = System.currentTimeMillis() - lastPublicKeyFetch;
+            if ( claims == null && keyFreshness > this.freshnessTime ) {
+                logger.debug("Failed to get claims for token {}... fetching new public key", token);
+                publicKey =  getPublicKey( getExternalSSOUrl() );
+                lastPublicKeyFetch = System.currentTimeMillis();
+                logger.info("New public key is {}", publicKey);
             }
         }
 
+        if ( claims == null ) {
+            logger.error("Error getting Apigee JWT claims", lastException);
+            throw new BadTokenException( "Error getting Apigee JWT claims", lastException );
+        } else {
+            logger.debug( "Success! Got claims for token {} key {}", token, publicKey.toString() );
+        }
+
         return claims;
     }
 
     public Jws<Claims> getClaims(String token) throws Exception{
-
-        return getClaimsForKeyUrl(token,publicKey);
-
+        return getClaimsForKeyUrl(token);
     }
 
     private void validateClaims (final Jws<Claims> claims) throws ExpiredTokenException {
@@ -196,7 +215,7 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
 
         final long expiry = Long.valueOf(body.get("exp").toString());
 
-        if(expiry - (System.currentTimeMillis()/1000) < 0 ){
+        if (expiry - (System.currentTimeMillis()/1000) < 0 ){
 
             final long expirationDelta = ((System.currentTimeMillis()/1000) - expiry)*1000;
 
@@ -219,5 +238,14 @@ public class ApigeeSSO2Provider implements ExternalSSOProvider {
     public void setProperties(Properties properties) {
         this.properties = properties;
         this.publicKey =  getPublicKey(getExternalSSOUrl());
+
+        lastPublicKeyFetch = System.currentTimeMillis();
+
+        String freshnessString = (String)properties.get( USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS );
+        try {
+            freshnessTime = Long.parseLong( freshnessString );
+        } catch ( Exception e ) {
+            logger.error("Ignoring invalid setting for " + USERGRID_EXTERMAL_PUBLICKEY_FRESHNESS );
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f0c9d44c/stack/services/src/test/java/org/apache/usergrid/security/ApigeeSSO2ProviderIT.java
----------------------------------------------------------------------
diff --git a/stack/services/src/test/java/org/apache/usergrid/security/ApigeeSSO2ProviderIT.java b/stack/services/src/test/java/org/apache/usergrid/security/ApigeeSSO2ProviderIT.java
new file mode 100644
index 0000000..8dc13cf
--- /dev/null
+++ b/stack/services/src/test/java/org/apache/usergrid/security/ApigeeSSO2ProviderIT.java
@@ -0,0 +1,297 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.security;
+
+import io.jsonwebtoken.*;
+import io.jsonwebtoken.SignatureException;
+import io.jsonwebtoken.impl.crypto.RsaProvider;
+import org.apache.commons.collections4.map.HashedMap;
+import org.apache.commons.lang.RandomStringUtils;
+import org.apache.usergrid.NewOrgAppAdminRule;
+import org.apache.usergrid.ServiceITSetup;
+import org.apache.usergrid.ServiceITSetupImpl;
+import org.apache.usergrid.cassandra.ClearShiroSubject;
+import org.apache.usergrid.management.ManagementService;
+import org.apache.usergrid.management.UserInfo;
+import org.apache.usergrid.persistence.Entity;
+import org.apache.usergrid.persistence.EntityManager;
+import org.apache.usergrid.persistence.SimpleEntityRef;
+import org.apache.usergrid.persistence.entities.User;
+import org.apache.usergrid.security.sso.ApigeeSSO2Provider;
+import org.apache.usergrid.security.tokens.TokenInfo;
+import org.apache.usergrid.security.tokens.exceptions.BadTokenException;
+import org.junit.*;
+import org.mockito.Mockito;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.*;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.*;
+
+import static org.apache.commons.codec.binary.Base64.decodeBase64;
+
+
+/**
+ * Created by Dave Johnson (snoopdave@apache.org) on 10/25/16.
+ */
+public class ApigeeSSO2ProviderIT {
+    private static final Logger logger = LoggerFactory.getLogger(ApigeeSSO2ProviderIT.class);
+
+    @ClassRule
+    public static final ServiceITSetup setup = new ServiceITSetupImpl();
+
+
+    @Test
+    public void testBasicOperation() throws Exception {
+
+        // create keypair
+        KeyPair kp = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKey = kp.getPublic();
+        PrivateKey privateKey = kp.getPrivate();
+
+        // create provider with private key
+        ApigeeSSO2Provider provider = new MockApigeeSSO2Provider();
+        provider.setManagement( setup.getMgmtSvc() );
+        provider.setPublicKey( publicKey );
+
+        // create user, claims and a token for those things
+        User user = createUser();
+        long exp = System.currentTimeMillis() + 10000;
+        Map<String, Object> claims = createClaims( user.getUsername(), user.getEmail(), exp );
+        String token = Jwts.builder().setClaims(claims).signWith( SignatureAlgorithm.RS256, privateKey).compact();
+
+        // test that provider can validate the token, get user, return token info
+        TokenInfo tokenInfo = provider.validateAndReturnTokenInfo( token, 86400L );
+        Assert.assertNotNull( tokenInfo );
+    }
+
+
+    @Test
+    public void testExpiredToken() throws Exception {
+
+        // create keypair
+        KeyPair kp = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKey = kp.getPublic();
+        PrivateKey privateKey = kp.getPrivate();
+
+        // create provider with private key
+        ApigeeSSO2Provider provider = new MockApigeeSSO2Provider();
+        provider.setManagement( setup.getMgmtSvc() );
+        provider.setPublicKey( publicKey );
+
+        // create user, claims and a token for those things
+        User user = createUser();
+        long exp = System.currentTimeMillis() - 1500;
+        Map<String, Object> claims = createClaims( user.getUsername(), user.getEmail(), exp );
+        String token = Jwts.builder()
+            .setClaims(claims)
+            .setExpiration( new Date() )
+            .signWith( SignatureAlgorithm.RS256, privateKey)
+            .compact();
+
+        Thread.sleep(500); // wait for claims to timeout
+
+        // test that token is expired
+        try {
+            provider.validateAndReturnTokenInfo( token, 86400L );
+            Assert.fail("Should have failed due to expired token");
+
+        } catch ( BadTokenException e ) {
+            Assert.assertTrue( e.getCause() instanceof ExpiredJwtException );
+        }
+    }
+
+
+    @Test
+    public void testMalformedToken() throws Exception {
+
+        // create keypair
+        KeyPair kp = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKey = kp.getPublic();
+
+        // create provider with private key
+        ApigeeSSO2Provider provider = new MockApigeeSSO2Provider();
+        provider.setManagement( setup.getMgmtSvc() );
+        provider.setPublicKey( publicKey );
+
+        // test that token is malformed
+        try {
+            provider.getClaims( "{;aklsjd;fkajsd;fkjasd;lfkj}" );
+            Assert.fail("Should have failed due to malformed token");
+
+        } catch ( BadTokenException e ) {
+            Assert.assertTrue( e.getCause() instanceof MalformedJwtException );
+        }
+    }
+
+    @Test
+    public void testNewPublicKeyFetch() throws Exception {
+
+        // create old keypair
+        KeyPair kp = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKey = kp.getPublic();
+        PrivateKey privateKey = kp.getPrivate();
+
+        // create new keypair
+        KeyPair kpNew = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKeyNew = kpNew.getPublic();
+        PrivateKey privateKeyNew = kpNew.getPrivate();
+
+        // create mock provider with old and old key
+        MockApigeeSSO2ProviderNewKey provider = new MockApigeeSSO2ProviderNewKey( publicKey, publicKeyNew );
+        provider.setManagement( setup.getMgmtSvc() );
+
+        // create user, claims and a token for those things. Sign with new public key
+        User user = createUser();
+        long exp = System.currentTimeMillis() + 10000;
+        Map<String, Object> claims = createClaims( user.getUsername(), user.getEmail(), exp );
+        String token = Jwts.builder().setClaims(claims).signWith( SignatureAlgorithm.RS256, privateKeyNew).compact();
+
+        // test that provider can validate the token, get user, return token info
+        TokenInfo tokenInfo = provider.validateAndReturnTokenInfo( token, 86400L );
+        Assert.assertNotNull( tokenInfo );
+
+        // assert that provider called for new key
+        Assert.assertTrue( provider.isGetPublicKeyCalled() );
+
+
+        // try it again, but this time it should fail due to freshness value
+
+        provider.setPublicKey( publicKey ); // set old key
+
+        // test that signature exception thrown
+        try {
+            provider.validateAndReturnTokenInfo( token, 86400L );
+            Assert.fail("Should have failed due to bad signature");
+
+        } catch ( BadTokenException e ) {
+            Assert.assertTrue( e.getCause() instanceof SignatureException );
+        }
+
+    }
+
+
+    @Test
+    public void testBadSignature() throws Exception {
+
+        // create old keypair
+        KeyPair kp = RsaProvider.generateKeyPair(1024);
+        PublicKey publicKey = kp.getPublic();
+        PrivateKey privateKey = kp.getPrivate();
+
+        // create new keypair
+        KeyPair kpNew = RsaProvider.generateKeyPair(1024);
+        PrivateKey privateKeyNew = kpNew.getPrivate();
+
+        // create mock provider with old public key
+        ApigeeSSO2Provider provider = new MockApigeeSSO2ProviderNewKey( publicKey, publicKey );
+        provider.setManagement( setup.getMgmtSvc() );
+
+        // create user, claims and a token for those things. Sign with new public key
+        User user = createUser();
+        long exp = System.currentTimeMillis() + 10000;
+        Map<String, Object> claims = createClaims( user.getUsername(), user.getEmail(), exp );
+        String token = Jwts.builder().setClaims(claims).signWith( SignatureAlgorithm.RS256, privateKeyNew).compact();
+
+        // test that signature exception thrown
+        try {
+            provider.validateAndReturnTokenInfo( token, 86400L );
+            Assert.fail("Should have failed due to bad signature");
+
+        } catch ( BadTokenException e ) {
+            Assert.assertTrue( e.getCause() instanceof SignatureException );
+        }
+
+    }
+
+    private User createUser() throws Exception {
+        String rando = RandomStringUtils.randomAlphanumeric( 10 );
+        String username = "user_" + rando;
+        String email = username + "@example.com";
+        Map<String, Object> properties = new HashMap<String, Object>() {{
+            put( "username", username );
+            put( "email", email );
+        }};
+        EntityManager em = setup.getEmf().getEntityManager( setup.getEmf().getManagementAppId() );
+        Entity entity = em.create( "user", properties );
+
+        return em.get( new SimpleEntityRef( User.ENTITY_TYPE, entity.getUuid() ), User.class );
+    }
+
+
+    private Map<String, Object> createClaims(final String username, final String email, long exp ) {
+        return new HashedMap<String, Object>() {{
+                put("jti","c7df0339-3847-450b-a925-628ef237953a");
+                put("sub","b6d62259-217b-4e96-8f49-e00c366e4fed");
+                put("scope","size = 5");
+                put("client_id", "dummy1");
+                put("azp","dummy2");
+                put("grant_type" ,"password");
+                put("user_id","b6d62259-217b-4e96-8f49-e00c366e4fed");
+                put("origin","usergrid");
+                put("user_name", username );
+                put("email", email);
+                put("rev_sig","dfe5d0d3");
+                put("exp", exp);
+                put("iat", System.currentTimeMillis());
+                put("iss", "https://jwt.example.com/token");
+                put("zid","uaa");
+                put("aud"," size = 6");
+            }};
+    }
+}
+
+class MockApigeeSSO2Provider extends ApigeeSSO2Provider {
+    private static final Logger logger = LoggerFactory.getLogger(MockApigeeSSO2Provider.class);
+
+    @Override
+    public PublicKey getPublicKey(String keyUrl ) {
+        return publicKey;
+    }
+
+    @Override
+    public void setPublicKey( PublicKey publicKey ) {
+        this.publicKey = publicKey;
+    }
+}
+
+
+class MockApigeeSSO2ProviderNewKey extends ApigeeSSO2Provider {
+    private static final Logger logger = LoggerFactory.getLogger(MockApigeeSSO2Provider.class);
+
+    private PublicKey newKey;
+    private boolean getPublicKeyCalled = false;
+
+    public MockApigeeSSO2ProviderNewKey( PublicKey oldKey, PublicKey newKey ) {
+        this.publicKey = oldKey;
+        this.newKey = newKey;
+        this.properties = new Properties();
+    }
+
+    @Override
+    public PublicKey getPublicKey( String keyUrl ) {
+        getPublicKeyCalled = true;
+        return newKey;
+    }
+
+    public boolean isGetPublicKeyCalled() {
+        return getPublicKeyCalled;
+    }
+}
+
+


[17/37] usergrid git commit: Add a utility queue to the async event service for things like re-index.

Posted by sn...@apache.org.
Add a utility queue to the async event service for things like re-index.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f8c92f6e
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f8c92f6e
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f8c92f6e

Branch: refs/heads/usergrid-1318-queue
Commit: f8c92f6eff376a58394bca3be2340ace6d0de02c
Parents: 5db402d
Author: Michael Russo <mr...@apigee.com>
Authored: Mon Oct 3 22:48:49 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Mon Oct 3 22:48:49 2016 -0700

----------------------------------------------------------------------
 .../asyncevents/AsyncEventService.java          |   3 +-
 .../asyncevents/AsyncEventServiceImpl.java      | 114 +++++++++++++++----
 .../index/IndexProcessorFig.java                |   9 ++
 .../corepersistence/index/ReIndexAction.java    |   5 +-
 .../index/ReIndexServiceImpl.java               |   4 +-
 .../read/traverse/AbstractReadGraphFilter.java  |   2 +-
 .../AbstractReadReverseGraphFilter.java         |   2 +-
 7 files changed, 110 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventService.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventService.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventService.java
index d833cf7..ec84a0a 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventService.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventService.java
@@ -81,8 +81,9 @@ public interface AsyncEventService extends ReIndexAction {
     /**
      *
      * @param indexOperationMessage
+     * @param forUtilityQueue
      */
-    void queueIndexOperationMessage( final IndexOperationMessage indexOperationMessage );
+    void queueIndexOperationMessage(final IndexOperationMessage indexOperationMessage, boolean forUtilityQueue);
 
     /**
      * @param applicationScope

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
index a108e40..bc5d139 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
@@ -78,6 +78,8 @@ import rx.Subscriber;
 import rx.Subscription;
 import rx.schedulers.Schedulers;
 
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
+
 
 /**
  * TODO, this whole class is becoming a nightmare.  We need to remove all consume from this class and refactor it into the following manner.
@@ -103,8 +105,11 @@ public class AsyncEventServiceImpl implements AsyncEventService {
     // SQS maximum receive messages is 10
     public int MAX_TAKE = 10;
     public static final String QUEUE_NAME = "index"; //keep this short as AWS limits queue name size to 80 chars
+    public static final String QUEUE_NAME_UTILITY = "utility"; //keep this short as AWS limits queue name size to 80 chars
+
 
     private final QueueManager queue;
+    private final QueueManager utilityQueue;
     private final IndexProcessorFig indexProcessorFig;
     private final QueueFig queueFig;
     private final IndexProducer indexProducer;
@@ -125,6 +130,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
 
     private final Counter indexErrorCounter;
     private final AtomicLong counter = new AtomicLong();
+    private final AtomicLong counterUtility = new AtomicLong();
     private final AtomicLong inFlight = new AtomicLong();
     private final Histogram messageCycle;
     private final MapManager esMapPersistence;
@@ -160,7 +166,9 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         this.rxTaskScheduler = rxTaskScheduler;
 
         QueueScope queueScope = new QueueScopeImpl(QUEUE_NAME, QueueScope.RegionImplementation.ALL);
+        QueueScope utilityQueueScope = new QueueScopeImpl(QUEUE_NAME_UTILITY, QueueScope.RegionImplementation.ALL);
         this.queue = queueManagerFactory.getQueueManager(queueScope);
+        this.utilityQueue = queueManagerFactory.getQueueManager(utilityQueueScope);
 
         this.indexProcessorFig = indexProcessorFig;
         this.queueFig = queueFig;
@@ -201,12 +209,16 @@ public class AsyncEventServiceImpl implements AsyncEventService {
     }
 
 
-    private void offerTopic( final Serializable operation ) {
+    private void offerTopic(final Serializable operation, boolean forUtilityQueue) {
         final Timer.Context timer = this.writeTimer.time();
 
         try {
             //signal to SQS
-            this.queue.sendMessageToTopic( operation );
+            if (forUtilityQueue) {
+                this.utilityQueue.sendMessageToTopic(operation);
+            } else {
+                this.queue.sendMessageToTopic(operation);
+            }
         }
         catch ( IOException e ) {
             throw new RuntimeException( "Unable to queue message", e );
@@ -216,12 +228,16 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         }
     }
 
-    private void offerBatch(final List operations){
-        final Timer.Context timer = this.writeTimer.time();
 
+    private void offerBatch(final List operations, boolean forUtilityQueue){
+        final Timer.Context timer = this.writeTimer.time();
         try {
             //signal to SQS
-            this.queue.sendMessages(operations);
+            if( forUtilityQueue ){
+                this.utilityQueue.sendMessages(operations);
+            }else{
+                this.queue.sendMessages(operations);
+            }
         } catch (IOException e) {
             throw new RuntimeException("Unable to queue message", e);
         } finally {
@@ -229,6 +245,15 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         }
     }
 
+    private void offerBatchToUtilityQueue(final List operations){
+        try {
+            //signal to SQS
+            this.utilityQueue.sendMessages(operations);
+        } catch (IOException e) {
+            throw new RuntimeException("Unable to queue message", e);
+        }
+    }
+
 
     /**
      * Take message from SQS
@@ -246,6 +271,22 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         }
     }
 
+    /**
+     * Take message from SQS utility queue
+     */
+    private List<QueueMessage> takeFromUtilityQueue() {
+
+        final Timer.Context timer = this.readTimer.time();
+
+        try {
+            return utilityQueue.getMessages(MAX_TAKE, AsyncEvent.class);
+        }
+        finally {
+            //stop our timer
+            timer.stop();
+        }
+    }
+
 
 
     /**
@@ -271,6 +312,17 @@ public class AsyncEventServiceImpl implements AsyncEventService {
     }
 
     /**
+     * Ack message in SQS
+     */
+    public void ackUtilityQueue(final List<QueueMessage> messages) {
+        try{
+            utilityQueue.commitMessages( messages );
+        }catch(Exception e){
+            throw new RuntimeException("Unable to ack messages", e);
+        }
+    }
+
+    /**
      * calls the event handlers and returns a result with information on whether it needs to be ack'd and whether it needs to be indexed
      * @param messages
      * @return
@@ -401,7 +453,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         IndexLocationStrategy indexLocationStrategy = indexLocationStrategyFactory.getIndexLocationStrategy(
             applicationScope);
         offerTopic( new InitializeApplicationIndexEvent( queueFig.getPrimaryRegion(),
-            new ReplicatedIndexLocationStrategy( indexLocationStrategy ) ) );
+            new ReplicatedIndexLocationStrategy( indexLocationStrategy ) ), false);
     }
 
 
@@ -418,7 +470,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         final IndexOperationMessage indexMessage =
             eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null);
 
-        queueIndexOperationMessage( indexMessage );
+        queueIndexOperationMessage( indexMessage, false);
 
     }
 
@@ -515,8 +567,9 @@ public class AsyncEventServiceImpl implements AsyncEventService {
     /**
      * Queue up an indexOperationMessage for multi region execution
      * @param indexOperationMessage
+     * @param forUtilityQueue
      */
-    public void queueIndexOperationMessage( final IndexOperationMessage indexOperationMessage ) {
+    public void queueIndexOperationMessage(final IndexOperationMessage indexOperationMessage, boolean forUtilityQueue) {
 
         // don't try to produce something with nothing
         if(indexOperationMessage == null || indexOperationMessage.isEmpty()){
@@ -533,8 +586,6 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         //write to the map in ES
         esMapPersistence.putString( newMessageId.toString(), jsonValue, expirationTimeInSeconds );
 
-
-
         //now queue up the index message
 
         final ElasticsearchIndexEvent elasticsearchIndexEvent =
@@ -542,7 +593,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
 
         //send to the topic so all regions index the batch
 
-        offerTopic( elasticsearchIndexEvent );
+        offerTopic( elasticsearchIndexEvent, forUtilityQueue );
     }
 
     private void handleIndexOperation(final ElasticsearchIndexEvent elasticsearchIndexEvent) throws IndexDocNotFoundException {
@@ -607,7 +658,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
 
         // queue the de-index of old versions to the topic so cleanup happens in all regions
         offerTopic( new DeIndexOldVersionsEvent( queueFig.getPrimaryRegion(),
-            new EntityIdScope( applicationScope, entityId), markedVersion) );
+            new EntityIdScope( applicationScope, entityId), markedVersion), false);
 
     }
 
@@ -717,9 +768,14 @@ public class AsyncEventServiceImpl implements AsyncEventService {
      */
     public void start() {
         final int count = indexProcessorFig.getWorkerCount();
+        final int utilityCount = indexProcessorFig.getWorkerCountUtility();
 
         for (int i = 0; i < count; i++) {
-            startWorker();
+            startWorker(QUEUE_NAME);
+        }
+
+        for (int i = 0; i < utilityCount; i++) {
+            startWorker(QUEUE_NAME_UTILITY);
         }
     }
 
@@ -738,22 +794,31 @@ public class AsyncEventServiceImpl implements AsyncEventService {
     }
 
 
-    private void startWorker() {
+    private void startWorker(final String type) {
+        Preconditions.checkNotNull(type, "Worker type required");
         synchronized (mutex) {
 
+            boolean isUtilityQueue = isNotEmpty(type) && type.toLowerCase().contains(QUEUE_NAME_UTILITY.toLowerCase());
+
             Observable<List<QueueMessage>> consumer =
                     Observable.create( new Observable.OnSubscribe<List<QueueMessage>>() {
                         @Override
                         public void call( final Subscriber<? super List<QueueMessage>> subscriber ) {
 
                             //name our thread so it's easy to see
-                            Thread.currentThread().setName( "QueueConsumer_" + counter.incrementAndGet() );
+                            long threadNum = isUtilityQueue ? counterUtility.incrementAndGet() : counter.incrementAndGet();
+                            Thread.currentThread().setName( "QueueConsumer_" + type+ "_" + threadNum );
 
-                            List<QueueMessage> drainList = null;
+                                List<QueueMessage> drainList = null;
 
                             do {
                                 try {
-                                    drainList = take();
+                                    if ( isUtilityQueue ){
+                                        drainList = takeFromUtilityQueue();
+                                    }else{
+                                        drainList = take();
+
+                                    }
                                     //emit our list in it's entity to hand off to a worker pool
                                         subscriber.onNext(drainList);
 
@@ -808,7 +873,12 @@ public class AsyncEventServiceImpl implements AsyncEventService {
 
                                                      // ack each message if making it to this point
                                                      if( messagesToAck.size() > 0 ){
-                                                         ack( messagesToAck );
+
+                                                         if ( isUtilityQueue ){
+                                                             ackUtilityQueue( messagesToAck );
+                                                         }else{
+                                                             ack( messagesToAck );
+                                                         }
                                                      }
 
                                                      return messagesToAck;
@@ -861,7 +931,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
             // collect into a list of QueueMessages that can be ack'd later
             .collect(Collectors.toList());
 
-       queueIndexOperationMessage(combined);
+       queueIndexOperationMessage(combined, false);
 
         return queueMessages;
     }
@@ -871,10 +941,10 @@ public class AsyncEventServiceImpl implements AsyncEventService {
         EntityIndexOperation entityIndexOperation =
             new EntityIndexOperation( applicationScope, id, updatedSince);
 
-        queueIndexOperationMessage(eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null));
+        queueIndexOperationMessage(eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null), false);
     }
 
-    public void indexBatch(final List<EdgeScope> edges, final long updatedSince) {
+    public void indexBatch(final List<EdgeScope> edges, final long updatedSince, boolean forUtilityQueue) {
 
         final List<EntityIndexEvent> batch = new ArrayList<>();
         edges.forEach(e -> {
@@ -884,7 +954,7 @@ public class AsyncEventServiceImpl implements AsyncEventService {
 
         });
 
-        offerBatch( batch );
+        offerBatch( batch, forUtilityQueue );
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexProcessorFig.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexProcessorFig.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexProcessorFig.java
index 1038408..45dff1c 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexProcessorFig.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/IndexProcessorFig.java
@@ -36,6 +36,8 @@ public interface IndexProcessorFig extends GuicyFig {
 
     String ELASTICSEARCH_WORKER_COUNT = "elasticsearch.worker_count";
 
+    String ELASTICSEARCH_WORKER_COUNT_UTILITY = "elasticsearch.worker_count_utility";
+
     String EVENT_CONCURRENCY_FACTOR = "event.concurrency.factor";
 
     String ELASTICSEARCH_QUEUE_IMPL = "elasticsearch.queue_impl";
@@ -82,6 +84,13 @@ public interface IndexProcessorFig extends GuicyFig {
     int getWorkerCount();
 
     /**
+     * The number of worker threads used to read utility requests from the queue ( mostly re-index ).
+     */
+    @Default("2")
+    @Key(ELASTICSEARCH_WORKER_COUNT_UTILITY)
+    int getWorkerCountUtility();
+
+    /**
      * Set the implementation to use for queuing.
      * Valid values: TEST, LOCAL, SQS, SNS
      * NOTE: SQS and SNS equate to the same implementation of Amazon queue services.

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexAction.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexAction.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexAction.java
index 5e201fb..2b3573e 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexAction.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexAction.java
@@ -39,9 +39,10 @@ public interface ReIndexAction {
     void index( final ApplicationScope applicationScope, final Id id, final long updatedSince );
 
     /**
-     * Index a batch list of entities.
+     * Index a batch list of entities.  Goes to the utility queue.
      * @param edges
      * @param updatedSince
+     * @param forUtilityQueue
      */
-    void indexBatch ( final List<EdgeScope> edges, final long updatedSince);
+    void indexBatch(final List<EdgeScope> edges, final long updatedSince, boolean forUtilityQueue);
 }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
index 19fbcfa..b292005 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
@@ -169,7 +169,7 @@ public class ReIndexServiceImpl implements ReIndexService {
             .buffer( indexProcessorFig.getReindexBufferSize())
             .doOnNext( edgeScopes -> {
                 logger.info("Sending batch of {} to be indexed.", edgeScopes.size());
-                indexService.indexBatch(edgeScopes, modifiedSince);
+                indexService.indexBatch(edgeScopes, modifiedSince, true);
                 count.addAndGet(edgeScopes.size() );
                 if( edgeScopes.size() > 0 ) {
                     writeCursorState(jobId, edgeScopes.get(edgeScopes.size() - 1));
@@ -178,7 +178,7 @@ public class ReIndexServiceImpl implements ReIndexService {
             .doOnCompleted(() -> writeStateMeta( jobId, Status.COMPLETE, count.get(), System.currentTimeMillis() ))
             .subscribeOn( Schedulers.io() ).subscribe();
 
-        
+
         return new ReIndexStatus( jobId, Status.STARTED, 0, 0 );
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadGraphFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadGraphFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadGraphFilter.java
index 62f6548..83f4c8b 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadGraphFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadGraphFilter.java
@@ -258,7 +258,7 @@ public abstract class AbstractReadGraphFilter extends AbstractPathFilter<Id, Id,
             .collect(() -> new IndexOperationMessage(), (collector, single) -> collector.ingest(single))
             .filter(msg -> !msg.isEmpty())
             .doOnNext(indexOperation -> {
-                asyncEventService.queueIndexOperationMessage(indexOperation);
+                asyncEventService.queueIndexOperationMessage(indexOperation, false);
             });
 
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c92f6e/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadReverseGraphFilter.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadReverseGraphFilter.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadReverseGraphFilter.java
index dcda98f..1afb524 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadReverseGraphFilter.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/pipeline/read/traverse/AbstractReadReverseGraphFilter.java
@@ -251,7 +251,7 @@ public abstract class AbstractReadReverseGraphFilter extends AbstractPathFilter<
             .collect(() -> new IndexOperationMessage(), (collector, single) -> collector.ingest(single))
             .filter(msg -> !msg.isEmpty())
             .doOnNext(indexOperation -> {
-                asyncEventService.queueIndexOperationMessage(indexOperation);
+                asyncEventService.queueIndexOperationMessage(indexOperation, false);
             });
 
     }


[31/37] usergrid git commit: Update Cassandra and ElasticSearch versions supported & add node about the need for start_rpc=true in Cassandra 2+

Posted by sn...@apache.org.
http://git-wip-us.apache.org/repos/asf/usergrid/blob/77ad91a6/docs/installation/deployment-guide.md
----------------------------------------------------------------------
diff --git a/docs/installation/deployment-guide.md b/docs/installation/deployment-guide.md
index 560b6eb..3b1b89a 100644
--- a/docs/installation/deployment-guide.md
+++ b/docs/installation/deployment-guide.md
@@ -1,37 +1,28 @@
 # Usergrid 2.1.0 Deployment Guide
 
-This document explains how to deploy the Usergrid v2.1.0 Backend-as-a-Service (BaaS), 
-which comprises the Usergrid Stack, a Java web application, and the Usergrid Portal,
-which is an HTML5/JavaScript application. 
+This document explains how to deploy the Usergrid v2.1.0 Backend-as-a-Service (BaaS), which comprises the Usergrid Stack, a Java web application, and the Usergrid Portal, which is an HTML5/JavaScript application. 
 
 
 ## Intended audience
 
-You should be able to follow this guide if you are a developer, system admin or 
-operations person with some knowledge of Java application deployment and good 
-knowledge of Linux and the bash shell.
+You should be able to follow this guide if you are a developer, system admin or operations person with some knowledge of Java application deployment and good knowledge of Linux and the bash shell.
 
-This guide is a starting point and does NOT explain everything you need to know to 
-run Usergrid at-scale and in production. To do that you will need some additional 
-skills and knowledge around running, monitoring and trouble-shooting Tomcat 
-applications, multi-node Cassandra & ElasticSearch clusters and more.
+This guide is a starting point and does NOT explain everything you need to know to run Usergrid at-scale and in production. To do that you will need some additional skills and knowledge around running, monitoring and trouble-shooting Tomcat applications, multi-node Cassandra & ElasticSearch clusters and more.
 
 
 ## Prerequsites
 
-Below are the software requirements for Usergrid 2.1.0 Stack and Portal. 
-You can install them all on one computer for development purposes, and for 
-deployment you can deploy them separately using clustering.
+Below are the software requirements for Usergrid 2.1.0 Stack and Portal. You can install them all on one computer for development purposes, and for deployment you can deploy them separately using clustering.
 
    * Linux or a UNIX-like system (Usergrid may run on Windows, but we haven't tried it)
    
    * [Java SE 8 JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html)
    
-   * [Apache Tomcat 7+](https://tomcat.apache.org/download-70.cgi)
+   * [Apache Tomcat 7](https://tomcat.apache.org/download-70.cgi)
    
-   * [Apache Cassandra 1.2.1+](http://cassandra.apache.org/download/)
+   * [Apache Cassandra 1.2.x or 2.x](http://cassandra.apache.org/download/)
    
-   * [ElasticSearch 1.4+](https://www.elastic.co/downloads/elasticsearch)  
+   * [ElasticSearch 1.4.x or 1.7.x](https://www.elastic.co/downloads/elasticsearch)  
    
 Optional but helpful:
 
@@ -76,26 +67,24 @@ The files that you need for deploying Usergrid Stack and Portal are `ROOT.war` a
 
 ## Deploying the Usergrid Stack
 
-The Usergrid Stack is a Java EE web application that runs on Tomcat, 
-uses the Cassandra database for storage and the ElasticSearch search-engine for queries.
+The Usergrid Stack is a Java EE web application that runs on Tomcat, uses the Cassandra database for storage and the ElasticSearch search-engine for queries.
  
-Before installing the Usegrid Stack into Tomcat, you'll start by setting up the 
-required database and search engine nodes. 
+Before installing the Usegrid Stack into Tomcat, you'll start by setting up the required database and search engine nodes. 
  
    
 ### Stack STEP #1: Setup Cassandra 
 
-Usergrid needs access to at least one Apache Cassandra node. You can setup a single node of
-Cassandra on your computer for development and testing. For production deployment, 
-a three or more node cluster is recommended.
+Usergrid needs access to at least one Apache Cassandra node. You can setup a single node of Cassandra on your computer for development and testing. For production deployment, a three or more node cluster is recommended.
 
-__Use the right Java.__ Cassandra requires Java and we recommend that you use the same version of Java 
-for Cassandra as you use to run Tomcat and ElasticSearch.
+__Use the right Java.__ Cassandra requires Java and we recommend that you use the same version of Java for Cassandra as you use to run Tomcat and ElasticSearch.
 
-__Refer to the__ [Apache Cassandra documentation](http://wiki.apache.org/cassandra/GettingStarted) 
-__for instructions on how to install Cassandra__. The [Datastax documentation for Cassandra 1.2](http://docs.datastax.com/en/cassandra/1.2/cassandra/features/featuresTOC.html) is also helpful. 
-Once you are up and running make a note of these things:
+Usergrid uses Cassandra's Thrift protocol and on Cassandra 2.x releases you MUST enable Thrift by setting `start_rpc` in your `cassandra.yaml` file:
 
+    # Whether to start the thrift rpc server.
+    start_rpc: true
+
+__Refer to the__ [Apache Cassandra documentation](http://wiki.apache.org/cassandra/GettingStarted) __for instructions on how to install Cassandra__. The [Datastax documentation for Cassandra 1.2](http://docs.datastax.com/en/cassandra/1.2/cassandra/features/featuresTOC.html) is also helpful. Once you are up and running make a note of these things:
+ 
    * The name of the Cassandra cluster
    * Hostname or IP address of each Cassandra node
    * Port number used for Cassandra RPC (the default is 9160)
@@ -104,23 +93,18 @@ Once you are up and running make a note of these things:
 
 ### Stack STEP #2: Setup ElasticSearch
 
-Usergrid also needs access to at least one ElasticSearch node. As with Cassandra, 
-you can setup single ElasticSearch node on your computer, and you should run 
-a cluster in production.
+Usergrid also needs access to at least one ElasticSearch node. As with Cassandra, you can setup single ElasticSearch node on your computer, and you should run a cluster in production.
 
-__Use the right Java__. ElasticSearch requires Java and you *must* ensure that you use the 
-same version of Java for ElasticSearch as you do for running Tomcat.
+__Use the right Java__. ElasticSearch requires Java and you *must* ensure that you use the same version of Java for ElasticSearch as you do for running Tomcat.
 
 __Refer to the__ 
-[ElasticSearch 1.4 documentation](https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index.html) 
-__for instructions on how to install__. Once you are up and running make a note of these things:
+[ElasticSearch 1.4 documentation](https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index.html) __for instructions on how to install__. Once you are up and running make a note of these things:
 
    * The name of the ElasticSearch cluster
    * Hostname or IP address of each ElasticSearch node
    * Port number used for ElasticSearch protocol (the default is 9200)
 
-__Running a single-node?__ If you are running a single-node ElasticSearch cluster then 
-you should set the number of replicas to zero, otherwise the cluster will report status YELLOW. 
+__Running a single-node?__ If you are running a single-node ElasticSearch cluster then you should set the number of replicas to zero, otherwise the cluster will report status YELLOW. 
   
     curl -XPUT 'localhost:9200/_settings' -d '{"index" : { "number_of_replicas" : 0}}'
     
@@ -136,13 +120,9 @@ __Refer to the__ [Apache Tomcat 7](https://tomcat.apache.org/tomcat-7.0-doc/setu
 
 ### Stack STEP #4: Configure Usergrid Stack & Logging
 
-You must create a Usergrid properties file called `usergrid-deployment.properties`. 
-The properties in this file tell Usergrid how to communicate with Cassandra and
-ElasticSearch, and how to form URLs using the hostname you wish to use for Usegrid.
-There are many properties that you can set to configure Usergrid. 
+You must create a Usergrid properties file called `usergrid-deployment.properties`. The properties in this file tell Usergrid how to communicate with Cassandra and ElasticSearch, and how to form URLs using the hostname you wish to use for Usegrid. There are many properties that you can set to configure Usergrid. 
 
-Once you have created your Usergrid properties file, place it in the Tomcat lib directory.
-On a Linux system, that directory is probably located at `/usr/share/tomcat7/lib`.
+Once you have created your Usergrid properties file, place it in the Tomcat lib directory. On a Linux system, that directory is probably located at `/usr/share/tomcat7/lib`.
 
 __What goes in a properties file?__
 
@@ -155,8 +135,7 @@ You should review the defaults in the above file. To get you started, let's look
 
 #### Example Usergrid Stack Properties File
 
-Below is an minimal example Usergrid properties file with the parts you need to change indicated like 
-shell variables, e.g. `${USERGRID_CLUSTER_NAME}`.  
+Below is an minimal example Usergrid properties file with the parts you need to change indicated like shell variables, e.g. `${USERGRID_CLUSTER_NAME}`.  
    
 Example 1: usergrid-deployment.properties file
 
@@ -279,8 +258,7 @@ Make sure you set all of the above properties when you edit this example for you
 
 #### Configure Logging
 
-Usegrid includes the Apache Log4j logging system and you can control the levels of logs for each
-Usergrid package and even down to the class level by providing your own `log4j.properties` file.
+Usegrid includes the Apache Log4j logging system and you can control the levels of logs for each Usergrid package and even down to the class level by providing your own `log4j.properties` file.
 
 To configure logging you need to:
 
@@ -290,9 +268,7 @@ To configure logging you need to:
 
 ##### Example Logging Configuration
 
-The Log4j properties file below is a good starting point for Usergrid. It configures `ERROR` level
-logging for the 3rd party libraries that Usergrid depends on, and INFO level logging for Usergrid.
-Plus, it configures some noisy parts of Usergrid to be quiet.
+The Log4j properties file below is a good starting point for Usergrid. It configures `ERROR` level logging for the 3rd party libraries that Usergrid depends on, and INFO level logging for Usergrid. Plus, it configures some noisy parts of Usergrid to be quiet.
 
 Example 2: log4.properties file
 
@@ -313,26 +289,18 @@ Example 2: log4.properties file
     
 ##### Add Logging Configuration to Tomcat
 
-You can configure Tomcat to use your Log4j properties file but adding a system property to Tomcat
-named `log4j.configuration` which must be set to a `file:/` URL that points to your
-properties file. One way to add the above property to the Tomcat start-up is to add a line to a 
-Tomcat `setenv.sh` script in Tomcat's bin directory. If that file does not exist, then create it.
+You can configure Tomcat to use your Log4j properties file but adding a system property to Tomcat named `log4j.configuration` which must be set to a `file:/` URL that points to your properties file. One way to add the above property to the Tomcat start-up is to add a line to a Tomcat `setenv.sh` script in Tomcat's bin directory. If that file does not exist, then create it.
 
-For example, if your property file is in `/usr/share/tomcat7/lib/log4j.properties`, then you 
-would add the following line to `setenv.sh`:
+For example, if your property file is in `/usr/share/tomcat7/lib/log4j.properties`, then you would add the following line to `setenv.sh`:
 
     export JAVA_OPTS="-Dlog4j.configuration=file:///usr/share/tomcat7/lib/log4j.properties"
     
-If the file already exists and already sets the JAVA_OPTS variable, then you'll have to 
-add your `-D` option to ones already there. Also note, you might want set other `-D` and `-X` 
-options in that setenv file, e.g. Java heap size.
+If the file already exists and already sets the JAVA_OPTS variable, then you'll have to add your `-D` option to ones already there. Also note, you might want set other `-D` and `-X` options in that setenv file, e.g. Java heap size.
 
 
 ### Stack STEP #5: Deploy ROOT.war to Tomcat
 
-The next step is to deploy the Usergrid Stack software to Tomcat. There are a variey of ways 
-of doing this and the simplest is probably to place the Usergrid Stack `ROOT.war` file into
-the Tomcat `webapps` directory, then restart Tomcat.
+The next step is to deploy the Usergrid Stack software to Tomcat. There are a variey of ways of doing this and the simplest is probably to place the Usergrid Stack `ROOT.war` file into the Tomcat `webapps` directory, then restart Tomcat.
 
 
 __For example, on Linux...__
@@ -360,17 +328,13 @@ You can watch the Tomcat log in `/var/log/tomcat7/catalina.out` for errors:
     
 __Does it work?__
 
-Check to see if Usergrid is up and running by calling the status end-point. 
-If your web browser is running on the same computer as Tomcat (and Tomcat is on port 8080), 
-then you can browse to [http://localhost:8080/status](http://localhost:8080/status) 
-to view the Usergrid status page. 
+Check to see if Usergrid is up and running by calling the status end-point. If your web browser is running on the same computer as Tomcat (and Tomcat is on port 8080), then you can browse to [http://localhost:8080/status](http://localhost:8080/status) to view the Usergrid status page. 
 
 Or you can use curl:
 
     curl http://localhost:8080/status
     
-If you get a JSON file of status data, then you're ready to move to the next step.
-You should see a response that begins like this:
+If you get a JSON file of status data, then you're ready to move to the next step. You should see a response that begins like this:
 
     {
       "timestamp" : 1454090178953,
@@ -395,14 +359,9 @@ You should see a response that begins like this:
 
 Next, you must initialize the Usergrid database, index and query systems.
 
-To do this you must issue a series of HTTP operations using the superuser credentials.
-You can only do this if Usergrid is configured to allow superused login via
-this property `usergrid.sysadmin.login.allowed=true` and if you used the 
-above example properties file, it is allowed.
+To do this you must issue a series of HTTP operations using the superuser credentials. You can only do this if Usergrid is configured to allow superused login via this property `usergrid.sysadmin.login.allowed=true` and if you used the above example properties file, it is allowed.
 
-The three operation you must perform are expressed by the curl commands below and,
-of course, you will have ot change the password 'test' to match the superuser password 
-that you set in your Usergrid properties file.
+The three operation you must perform are expressed by the curl commands below and, of course, you will have ot change the password 'test' to match the superuser password that you set in your Usergrid properties file.
 
     curl -X PUT http://localhost:8080/system/database/setup     -u superuser:test
     curl -X PUT http://localhost:8080/system/database/bootstrap -u superuser:test
@@ -417,19 +376,16 @@ When you issue each of those curl commands, you should see a success message lik
         "duration" : 374
     }    
 
-If you don't see a success message, then refer to the Tomcat logs for error message and
-seek help from the [Usergrid community](http://usergrid.apache.org/community).
+If you don't see a success message, then refer to the Tomcat logs for error message and seek help from the [Usergrid community](http://usergrid.apache.org/community).
 
 Now that you've gotten Usergrid up and running, you're ready to deploy the Usergrid Portal.
 
 
 ## Deploying the Usergrid Portal
 
-The Usergrid Portal is an HTML5/JavaScript application, a bunch of static files that 
-can be deployed to any web server, e.g. Apache HTTPD or Tomcat.
+The Usergrid Portal is an HTML5/JavaScript application, a bunch of static files that can be deployed to any web server, e.g. Apache HTTPD or Tomcat.
 
-To deploy the Portal to a web server, you will un-tar the `usergrid-portal.tar` file into 
-directory that serves as the root directory of your web pages. 
+To deploy the Portal to a web server, you will un-tar the `usergrid-portal.tar` file into directory that serves as the root directory of your web pages. 
 
 For example, with Tomcat on Linux you might do something like this:
 
@@ -437,14 +393,11 @@ For example, with Tomcat on Linux you might do something like this:
     cd /usr/share/tomcat7/webapps
     tar xf usergrid-portal.tar
     
-Then you will probably want to rename the Portal directory to something that will work
-well in a URL. For example, if you want your Portal to exist at the path `/portal` then:
+Then you will probably want to rename the Portal directory to something that will work well in a URL. For example, if you want your Portal to exist at the path `/portal` then:
 
     mv usergrid-portal.2.0.18 portal
     
-Once you have done that there is one more step. You need to configure the portal so that 
-it can find the Usergrid stack. You do that by editing the `portal/config.js` and changing
-this line:
+Once you have done that there is one more step. You need to configure the portal so that it can find the Usergrid stack. You do that by editing the `portal/config.js` and changing this line:
 
     Usergrid.overrideUrl = 'http://localhost:8080/';
 


[19/37] usergrid git commit: Merge branch 'hotfix-20160819'

Posted by sn...@apache.org.
Merge branch 'hotfix-20160819'


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/c65f9037
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/c65f9037
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/c65f9037

Branch: refs/heads/usergrid-1318-queue
Commit: c65f9037a9da3fa901fef538f98a39b825e42ff2
Parents: 77d2026 a4cc63f
Author: Michael Russo <mr...@apigee.com>
Authored: Thu Oct 6 10:13:05 2016 -0700
Committer: Michael Russo <mr...@apigee.com>
Committed: Thu Oct 6 10:13:05 2016 -0700

----------------------------------------------------------------------
 .../asyncevents/AsyncEventService.java          |   3 +-
 .../asyncevents/AsyncEventServiceImpl.java      | 118 +++++++++++++++----
 .../index/IndexProcessorFig.java                |   9 ++
 .../corepersistence/index/ReIndexAction.java    |   5 +-
 .../index/ReIndexServiceImpl.java               |   4 +-
 .../read/traverse/AbstractReadGraphFilter.java  |   2 +-
 .../AbstractReadReverseGraphFilter.java         |   2 +-
 7 files changed, 112 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/c65f9037/stack/core/src/main/java/org/apache/usergrid/corepersistence/index/ReIndexServiceImpl.java
----------------------------------------------------------------------


[27/37] usergrid git commit: Merge branch 'asf-site'

Posted by sn...@apache.org.
Merge branch 'asf-site'


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/3dbc2e93
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/3dbc2e93
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/3dbc2e93

Branch: refs/heads/usergrid-1318-queue
Commit: 3dbc2e9382c55859d3a9834369b78fff515015f6
Parents: cb0dc69 2d4d8aa
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Oct 24 09:02:54 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Oct 24 09:02:54 2016 -0400

----------------------------------------------------------------------
 content/releases/index.html         |    4 +-
 website/content/releases/index.html |    4 +-
 website/tmp/checksums               |    2 +
 website/tmp/compiled_content        | 7076 ++++++++++++++++++++++++++++++
 website/tmp/dependencies            |    6 +
 website/tmp/rule_memory             |  Bin 0 -> 5214 bytes
 6 files changed, 7088 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[37/37] usergrid git commit: Merge branch 'master' into usergrid-1318-queue

Posted by sn...@apache.org.
Merge branch 'master' into usergrid-1318-queue

Conflicts:
	content/releases/index.html
	stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
	website/content/releases/index.html


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/7cc5c1c0
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/7cc5c1c0
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/7cc5c1c0

Branch: refs/heads/usergrid-1318-queue
Commit: 7cc5c1c0701649bfdf31d695c10856f87510f181
Parents: f8c3a2d fe3bf56
Author: Dave Johnson <sn...@apache.org>
Authored: Mon Oct 31 11:45:26 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Mon Oct 31 11:45:26 2016 -0400

----------------------------------------------------------------------
 .../docs/_sources/data-storage/collections.txt  |   144 +
 .../_sources/installation/deployment-guide.txt  |   125 +-
 .../docs/_sources/orgs-and-apps/application.txt |   104 +
 content/docs/data-storage/collections.html      |   209 +-
 content/docs/index.html                         |     3 +
 content/docs/installation/deployment-guide.html |    16 +-
 content/docs/orgs-and-apps/application.html     |   141 +
 content/docs/searchindex.js                     |     2 +-
 content/releases/index.html                     |     5 +-
 docs/installation/deployment-guide.md           |   125 +-
 .../asyncevents/AsyncEventService.java          |     3 +-
 .../asyncevents/AsyncEventServiceImpl.java      |   189 +-
 .../index/IndexProcessorFig.java                |     9 +
 .../corepersistence/index/ReIndexAction.java    |     5 +-
 .../index/ReIndexServiceImpl.java               |     4 +-
 .../read/traverse/AbstractReadGraphFilter.java  |     2 +-
 .../AbstractReadReverseGraphFilter.java         |     2 +-
 .../exceptions/AbstractExceptionMapper.java     |     2 +-
 .../PasswordPolicyViolationExceptionMapper.java |    48 +
 .../UserResource/bad_confirmation_token.jsp     |    33 +
 .../collection/users/PermissionsResourceIT.java |     4 +-
 .../collection/users/UserResourceIT.java        |    38 +-
 .../usergrid/rest/management/AdminUsersIT.java  |    51 +
 .../rest/management/ExternalSSOEnabledIT.java   |     2 +-
 .../rest/management/ManagementResourceIT.java   |     4 +-
 .../rest/management/RegistrationIT.java         |     6 +-
 .../cassandra/ManagementServiceImpl.java        |    77 +-
 .../usergrid/security/PasswordPolicy.java       |    53 +
 .../usergrid/security/PasswordPolicyFig.java    |    79 +
 .../usergrid/security/PasswordPolicyImpl.java   |   156 +
 .../security/sso/ApigeeSSO2Provider.java        |   111 +-
 .../PasswordPolicyViolationException.java       |    46 +
 .../services/guice/ServiceModuleImpl.java       |     8 +
 .../usergrid/security/ApigeeSSO2ProviderIT.java |   297 +
 .../usergrid/security/PasswordPolicyTest.java   |    47 +
 .../security/PasswordPolicyTestFig.java         |   161 +
 .../usergrid/tools/RemoveAdminUserFromOrg.java  |   230 +
 website/content/releases/index.html             |     6 +-
 website/tmp/checksums                           |     3 +
 website/tmp/compiled_content                    | 14130 +++++++++++++++++
 website/tmp/dependencies                        |    10 +
 website/tmp/rule_memory                         |   Bin 0 -> 13045 bytes
 42 files changed, 16355 insertions(+), 335 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/7cc5c1c0/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
index f941c11,dba4edf..9f931d3
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventServiceImpl.java
@@@ -65,18 -78,11 +65,20 @@@ import rx.Subscriber
  import rx.Subscription;
  import rx.schedulers.Schedulers;
  
 +import java.io.IOException;
 +import java.io.Serializable;
 +import java.util.*;
 +import java.util.concurrent.TimeUnit;
 +import java.util.concurrent.atomic.AtomicLong;
 +import java.util.stream.Collectors;
 +import java.util.stream.Stream;
 +
+ import static org.apache.commons.lang.StringUtils.isNotEmpty;
+ 
  
  /**
 - * TODO, this whole class is becoming a nightmare.  We need to remove all consume from this class and refactor it into the following manner.
 + * TODO, this whole class is becoming a nightmare.
 + * We need to remove all consume from this class and refactor it into the following manner.
   *
   * 1. Produce.  Keep the code in the handle as is
   * 2. Consume:  Move the code into a refactored system
@@@ -99,10 -105,13 +101,13 @@@ public class AsyncEventServiceImpl impl
      // SQS maximum receive messages is 10
      public int MAX_TAKE = 10;
      public static final String QUEUE_NAME = "index"; //keep this short as AWS limits queue name size to 80 chars
+     public static final String QUEUE_NAME_UTILITY = "utility"; //keep this short as AWS limits queue name size to 80 chars
+ 
  
 -    private final QueueManager queue;
 -    private final QueueManager utilityQueue;
 +    private final LegacyQueueManager queue;
++    private final LegacyQueueManager utilityQueue;
      private final IndexProcessorFig indexProcessorFig;
 -    private final QueueFig queueFig;
 +    private final LegacyQueueFig queueFig;
      private final IndexProducer indexProducer;
      private final EntityCollectionManagerFactory entityCollectionManagerFactory;
      private final IndexLocationStrategyFactory indexLocationStrategyFactory;
@@@ -155,8 -165,10 +161,14 @@@
  
          this.rxTaskScheduler = rxTaskScheduler;
  
-         LegacyQueueScope queueScope = new LegacyQueueScopeImpl(QUEUE_NAME, LegacyQueueScope.RegionImplementation.ALL);
 -        QueueScope queueScope = new QueueScopeImpl(QUEUE_NAME, QueueScope.RegionImplementation.ALL);
 -        QueueScope utilityQueueScope = new QueueScopeImpl(QUEUE_NAME_UTILITY, QueueScope.RegionImplementation.ALL);
++        LegacyQueueScope queueScope =
++            new LegacyQueueScopeImpl(QUEUE_NAME, LegacyQueueScope.RegionImplementation.ALL);
++
++        LegacyQueueScope utilityQueueScope =
++            new LegacyQueueScopeImpl(QUEUE_NAME_UTILITY, LegacyQueueScope.RegionImplementation.ALL);
++
          this.queue = queueManagerFactory.getQueueManager(queueScope);
+         this.utilityQueue = queueManagerFactory.getQueueManager(utilityQueueScope);
  
          this.indexProcessorFig = indexProcessorFig;
          this.queueFig = queueFig;
@@@ -225,11 -245,20 +245,20 @@@
          }
      }
  
+     private void offerBatchToUtilityQueue(final List operations){
+         try {
+             //signal to SQS
+             this.utilityQueue.sendMessages(operations);
+         } catch (IOException e) {
+             throw new RuntimeException("Unable to queue message", e);
+         }
+     }
+ 
  
      /**
 -     * Take message from SQS
 +     * Take message
       */
 -    private List<QueueMessage> take() {
 +    private List<LegacyQueueMessage> take() {
  
          final Timer.Context timer = this.readTimer.time();
  
@@@ -242,38 -271,59 +271,67 @@@
          }
      }
  
+     /**
+      * Take message from SQS utility queue
+      */
 -    private List<QueueMessage> takeFromUtilityQueue() {
++    private List<LegacyQueueMessage> takeFromUtilityQueue() {
+ 
+         final Timer.Context timer = this.readTimer.time();
+ 
+         try {
+             return utilityQueue.getMessages(MAX_TAKE, AsyncEvent.class);
+         }
+         finally {
+             //stop our timer
+             timer.stop();
+         }
+     }
+ 
  
 -
      /**
 -     * Ack message in SQS
 +     * Ack message
       */
 -    public void ack(final List<QueueMessage> messages) {
 +    public void ack(final List<LegacyQueueMessage> messages) {
  
          final Timer.Context timer = this.ackTimer.time();
  
 -        try{
 -            queue.commitMessages( messages );
 +        try {
  
 -            //decrement our in-flight counter
 -            inFlight.decrementAndGet();
 +            for ( LegacyQueueMessage legacyQueueMessage : messages ) {
 +                try {
 +                    queue.commitMessage( legacyQueueMessage );
 +                    inFlight.decrementAndGet();
  
 -        }catch(Exception e){
 -            throw new RuntimeException("Unable to ack messages", e);
 -        }finally {
 -            timer.stop();
 -        }
 +                } catch ( Throwable t ) {
 +                    logger.error("Continuing after error acking message: " + legacyQueueMessage.getMessageId() );
 +                }
 +            }
  
 +        } catch (Exception e) {
 +            throw new RuntimeException( "Unable to ack messages", e );
  
 +        } finally {
 +            timer.stop();
 +        }
      }
  
 +
      /**
 +     * calls the event handlers and returns a result with information on whether
 +     * it needs to be ack'd and whether it needs to be indexed
+      * Ack message in SQS
+      */
 -    public void ackUtilityQueue(final List<QueueMessage> messages) {
++    public void ackUtilityQueue(final List<LegacyQueueMessage> messages) {
+         try{
+             utilityQueue.commitMessages( messages );
+         }catch(Exception e){
+             throw new RuntimeException("Unable to ack messages", e);
+         }
+     }
+ 
+     /**
 -     * calls the event handlers and returns a result with information on whether it needs to be ack'd and whether it needs to be indexed
++     * calls the event handlers and returns a result with information on whether
++     * it needs to be ack'd and whether it needs to be indexed
       * @param messages
       * @return
       */
@@@ -553,11 -593,10 +610,11 @@@
  
          //send to the topic so all regions index the batch
  
-         offerTopic( elasticsearchIndexEvent );
+         offerTopic( elasticsearchIndexEvent, forUtilityQueue );
      }
  
 -    private void handleIndexOperation(final ElasticsearchIndexEvent elasticsearchIndexEvent) throws IndexDocNotFoundException {
 +    private void handleIndexOperation(final ElasticsearchIndexEvent elasticsearchIndexEvent)
 +        throws IndexDocNotFoundException {
  
          Preconditions.checkNotNull( elasticsearchIndexEvent, "elasticsearchIndexEvent cannot be null" );
  
@@@ -755,18 -794,22 +817,23 @@@
      }
  
  
-     private void startWorker() {
+     private void startWorker(final String type) {
+         Preconditions.checkNotNull(type, "Worker type required");
          synchronized (mutex) {
  
+             boolean isUtilityQueue = isNotEmpty(type) && type.toLowerCase().contains(QUEUE_NAME_UTILITY.toLowerCase());
+ 
 -            Observable<List<QueueMessage>> consumer =
 -                    Observable.create( new Observable.OnSubscribe<List<QueueMessage>>() {
 +            Observable<List<LegacyQueueMessage>> consumer =
 +                    Observable.create( new Observable.OnSubscribe<List<LegacyQueueMessage>>() {
                          @Override
 -                        public void call( final Subscriber<? super List<QueueMessage>> subscriber ) {
 +                        public void call( final Subscriber<? super List<LegacyQueueMessage>> subscriber ) {
  
                              //name our thread so it's easy to see
-                             Thread.currentThread().setName( "QueueConsumer_" + counter.incrementAndGet() );
 -                            long threadNum = isUtilityQueue ? counterUtility.incrementAndGet() : counter.incrementAndGet();
++                            long threadNum = isUtilityQueue ?
++                                counterUtility.incrementAndGet() : counter.incrementAndGet();
+                             Thread.currentThread().setName( "QueueConsumer_" + type+ "_" + threadNum );
  
 -                                List<QueueMessage> drainList = null;
 +                            List<LegacyQueueMessage> drainList = null;
  
                              do {
                                  try {
@@@ -802,42 -850,45 +874,48 @@@
                      } )        //this won't block our read loop, just reads and proceeds
                          .flatMap( sqsMessages -> {
  
 -                            //do this on a different schedule, and introduce concurrency with flatmap for faster processing
 +                            //do this on a different schedule, and introduce concurrency
 +                            // with flatmap for faster processing
                              return Observable.just( sqsMessages )
  
-                                  .map( messages -> {
-                                      if ( messages == null || messages.size() == 0 ) {
-                                          // no messages came from the queue, move on
-                                          return null;
-                                      }
- 
-                                      try {
-                                          // process the messages
-                                          List<IndexEventResult> indexEventResults = callEventHandlers( messages );
- 
-                                          // submit the processed messages to index producer
-                                          List<LegacyQueueMessage> messagesToAck = submitToIndex( indexEventResults );
- 
-                                          if ( messagesToAck.size() < messages.size() ) {
-                                              logger.warn( "Missing {} message(s) from index processing",
-                                                 messages.size() - messagesToAck.size() );
-                                          }
- 
-                                          // ack each message if making it to this point
-                                          if( messagesToAck.size() > 0 ){
-                                              ack( messagesToAck );
-                                          }
- 
-                                          return messagesToAck;
-                                      }
-                                      catch ( Exception e ) {
-                                          logger.error( "Failed to ack messages", e );
-                                          return null;
-                                          //do not rethrow so we can process all of them
-                                      }
-                                  } ).subscribeOn( rxTaskScheduler.getAsyncIOScheduler() );
- 
+                                              .map( messages -> {
+                                                  if ( messages == null || messages.size() == 0 ) {
+                                                      // no messages came from the queue, move on
+                                                      return null;
+                                                  }
+ 
+                                                  try {
+                                                      // process the messages
 -                                                     List<IndexEventResult> indexEventResults = callEventHandlers( messages );
++                                                     List<IndexEventResult> indexEventResults =
++                                                         callEventHandlers( messages );
+ 
+                                                      // submit the processed messages to index producer
 -                                                     List<QueueMessage> messagesToAck = submitToIndex( indexEventResults, isUtilityQueue );
++                                                     List<LegacyQueueMessage> messagesToAck =
++                                                         submitToIndex( indexEventResults, isUtilityQueue );
+ 
+                                                      if ( messagesToAck.size() < messages.size() ) {
+                                                          logger.warn( "Missing {} message(s) from index processing",
+                                                             messages.size() - messagesToAck.size() );
+                                                      }
+ 
+                                                      // ack each message if making it to this point
+                                                      if( messagesToAck.size() > 0 ){
+ 
+                                                          if ( isUtilityQueue ){
+                                                              ackUtilityQueue( messagesToAck );
+                                                          }else{
+                                                              ack( messagesToAck );
+                                                          }
+                                                      }
+ 
+                                                      return messagesToAck;
+                                                  }
+                                                  catch ( Exception e ) {
+                                                      logger.error( "Failed to ack messages", e );
+                                                      return null;
+                                                      //do not rethrow so we can process all of them
+                                                  }
+                                              } ).subscribeOn( rxTaskScheduler.getAsyncIOScheduler() );
                              //end flatMap
                          }, indexProcessorFig.getEventConcurrencyFactor() );
  
@@@ -853,7 -904,7 +931,7 @@@
       * Submit results to index and return the queue messages to be ack'd
       *
       */
-     private List<LegacyQueueMessage> submitToIndex(List<IndexEventResult> indexEventResults) {
 -    private List<QueueMessage> submitToIndex(List<IndexEventResult> indexEventResults, boolean forUtilityQueue) {
++    private List<LegacyQueueMessage> submitToIndex(List<IndexEventResult> indexEventResults, boolean forUtilityQueue) {
  
          // if nothing came back then return empty list
          if(indexEventResults==null){
@@@ -890,17 -941,16 +968,18 @@@
          EntityIndexOperation entityIndexOperation =
              new EntityIndexOperation( applicationScope, id, updatedSince);
  
 -        queueIndexOperationMessage(eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null), false);
 +        queueIndexOperationMessage(
-             eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null));
++            eventBuilder.buildEntityIndex( entityIndexOperation ).toBlocking().lastOrDefault(null), false);
      }
  
-     public void indexBatch(final List<EdgeScope> edges, final long updatedSince) {
+     public void indexBatch(final List<EdgeScope> edges, final long updatedSince, boolean forUtilityQueue) {
  
          final List<EntityIndexEvent> batch = new ArrayList<>();
          edges.forEach(e -> {
  
              //change to id scope to avoid serialization issues
--            batch.add(new EntityIndexEvent(queueFig.getPrimaryRegion(), new EntityIdScope(e.getApplicationScope(), e.getEdge().getTargetNode()), updatedSince));
++            batch.add(new EntityIndexEvent(queueFig.getPrimaryRegion(),
++                new EntityIdScope(e.getApplicationScope(), e.getEdge().getTargetNode()), updatedSince));
  
          });
  

http://git-wip-us.apache.org/repos/asf/usergrid/blob/7cc5c1c0/website/content/releases/index.html
----------------------------------------------------------------------
diff --cc website/content/releases/index.html
index 24fbe66,28fb6d7..7e54686
--- a/website/content/releases/index.html
+++ b/website/content/releases/index.html
@@@ -31,10 -31,7 +31,8 @@@
  					Project releases are approved by vote of the Apache Usergrid Project Management Committee (PMC). Support for a release is provided by project volunteers on the project <a href="http://usergrid.apache.org/community/#mailing-lists">mailing lists</a>. Bugs found in a release may be discussed on the list and reported through the <a href="https://issues.apache.org/jira/browse/USERGRID">issue tracker</a>. The user mailing list and issue tracker are the only support options hosted by the Apache Usergrid project.
  				</p>
  				<p>
- 					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://www.apache.org/dist/release/usergrid/usergrid-2/v2.1.0/">https://www.apache.org/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
- 				</p>
- 				<p>
- 					The PGP signatures can be verified using PGP or GPG. First download the <a href="https://www.apache.org/dist/usergrid/KEYS">KEYS</a> as well as the <a href="https://www.apache.org/dist/release/usergrid/usergrid-2/v2.1.0/">asc signature</a> file for the particular distribution. Then verify the signatures using:
++
+ 					Note: When downloading from a mirror, please be sure to verify that checksums and signatures are correct. To do so, use the checksum and signature files from the main Apache site at <a href="https://www.apache.org/dist/usergrid/usergrid-2/v2.1.0/">https://dist.apache.org/repos/dist/release/usergrid/usergrid-2/v2.1.0/</a>. Find here the KEYS file, which contains all OpenPGP keys we use to sign releases here: <a href="https://www.apache.org/dist/usergrid/KEYS">https://www.apache.org/dist/usergrid/KEYS</a>
  				</p>
  				<p>
         				% pgpk -a KEYS


[13/37] usergrid git commit: Merge branch 'master' into asf-site

Posted by sn...@apache.org.
Merge branch 'master' into asf-site

Conflicts:
	website/tmp/checksums
	website/tmp/compiled_content
	website/tmp/dependencies
	website/tmp/rule_memory


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f0a2f8c1
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f0a2f8c1
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f0a2f8c1

Branch: refs/heads/usergrid-1318-queue
Commit: f0a2f8c1b267550cb8e99a5d5672f26d951714c6
Parents: cbe501a 87fcf3c
Author: Dave Johnson <sn...@apache.org>
Authored: Fri Aug 19 16:02:55 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Fri Aug 19 16:02:55 2016 -0400

----------------------------------------------------------------------
 .gitignore                                      |     3 +-
 CHANGELOG                                       |    13 +
 README.md                                       |    12 +-
 UsergridSDK.podspec                             |    18 +
 content/community/index.html                    |     3 +-
 content/docs/README.html                        |    28 +-
 .../data-queries/operators-and-types.txt        |    25 +-
 content/docs/_sources/index.txt                 |    22 +-
 .../_sources/installation/deployment-guide.txt  |   468 +
 content/docs/_sources/introduction/overview.txt |    32 +-
 .../_sources/introduction/usergrid-features.txt |     4 +-
 .../docs/_sources/reference/contribute-code.txt |    41 +-
 .../creating-a-new-application.txt              |    16 +
 .../using-usergrid/creating-account.txt         |    21 +
 .../using-usergrid/using-a-sandbox-app.txt      |    39 +
 .../_sources/using-usergrid/using-the-api.txt   |   150 +
 .../file-storage-configuration.html             |    28 +-
 content/docs/assets-and-files/folders.html      |    28 +-
 .../assets-and-files/legacy-asset-support.html  |    28 +-
 .../assets-and-files/retrieving-assets.html     |    28 +-
 .../docs/assets-and-files/uploading-assets.html |    28 +-
 .../creating-and-incrementing-counters.html     |    28 +-
 .../events-and-counters.html                    |    28 +-
 .../retrieving-counters.html                    |    28 +-
 .../docs/data-queries/advanced-query-usage.html |    28 +-
 .../docs/data-queries/operators-and-types.html  |    67 +-
 content/docs/data-queries/query-parameters.html |    28 +-
 .../docs/data-queries/querying-your-data.html   |    28 +-
 content/docs/data-storage/collections.html      |    28 +-
 content/docs/data-storage/data-store-dbms.html  |    32 +-
 content/docs/data-storage/entities.html         |    28 +-
 .../docs/data-storage/optimizing-access.html    |    28 +-
 .../entity-connections/connecting-entities.html |    28 +-
 .../disconnecting-entities.html                 |    28 +-
 .../entity-connections/retrieving-entities.html |    28 +-
 content/docs/genindex.html                      |    28 +-
 content/docs/geolocation/geolocation.html       |    28 +-
 .../creating-a-new-application.html             |     2 +-
 .../docs/getting-started/creating-account.html  |     2 +-
 .../getting-started/using-a-sandbox-app.html    |     2 +-
 content/docs/getting-started/using-the-api.html |     2 +-
 content/docs/index.html                         |   127 +-
 content/docs/installation/deployment-guide.html |   834 +
 .../docs/installation/ug1-deploy-to-tomcat.html |    54 +-
 .../installation/ug1-launcher-quick-start.html  |    53 +-
 .../docs/installation/ug2-deploy-to-tomcat.html |    55 +-
 content/docs/introduction/async-vs-sync.html    |    32 +-
 content/docs/introduction/data-model.html       |    28 +-
 content/docs/introduction/overview.html         |    89 +-
 .../docs/introduction/usergrid-features.html    |    42 +-
 content/docs/jersey2skeleton/README.html        |    28 +-
 content/docs/objects.inv                        |   Bin 692 -> 686 bytes
 content/docs/orgs-and-apps/admin-user.html      |    28 +-
 content/docs/orgs-and-apps/application.html     |    28 +-
 content/docs/orgs-and-apps/managing.html        |    28 +-
 content/docs/orgs-and-apps/organization.html    |    28 +-
 .../push-notifications/adding-push-support.html |    28 +-
 .../creating-and-managing-notifications.html    |    28 +-
 .../push-notifications/creating-notifiers.html  |    28 +-
 .../push-notifications/getting-started.html     |    28 +-
 .../managing-users-and-devices.html             |    28 +-
 content/docs/push-notifications/overview.html   |    28 +-
 .../docs/push-notifications/registering.html    |    28 +-
 content/docs/push-notifications/tbd.html        |    28 +-
 .../push-notifications/troubleshooting.html     |    28 +-
 content/docs/push-notifications/tutorial.html   |    28 +-
 .../docs/push-notifications/users-devices.html  |    28 +-
 content/docs/reference/contribute-code.html     |    96 +-
 content/docs/reference/presos-and-videos.html   |    32 +-
 content/docs/rest-endpoints/api-docs.html       |    28 +-
 content/docs/sdks/ios-new.html                  |    28 +-
 content/docs/sdks/sdk-outline.html              |    28 +-
 content/docs/sdks/tbd.html                      |    32 +-
 content/docs/search.html                        |    28 +-
 content/docs/searchindex.js                     |     2 +-
 .../docs/security-and-auth/app-security.html    |    28 +-
 .../authenticating-api-requests.html            |    28 +-
 ...nticating-users-and-application-clients.html |    28 +-
 .../changing-token-time-live-ttl.html           |    28 +-
 .../docs/security-and-auth/facebook-sign.html   |    28 +-
 .../revoking-tokens-logout.html                 |    28 +-
 .../security-and-auth/securing-your-app.html    |    28 +-
 .../user-authentication-types.html              |    28 +-
 .../security-and-auth/using-permissions.html    |    28 +-
 content/docs/security-and-auth/using-roles.html |    28 +-
 content/docs/user-management/activity.html      |    28 +-
 content/docs/user-management/group.html         |    28 +-
 content/docs/user-management/groups.html        |    28 +-
 .../docs/user-management/messagee-example.html  |    28 +-
 .../docs/user-management/user-connections.html  |    28 +-
 .../docs/user-management/user-management.html   |    28 +-
 .../docs/user-management/working-user-data.html |    28 +-
 .../creating-a-new-application.html             |   336 +
 .../docs/using-usergrid/creating-account.html   |   347 +
 .../using-usergrid/using-a-sandbox-app.html     |   372 +
 content/docs/using-usergrid/using-the-api.html  |   506 +
 content/index.html                              |     3 +-
 content/releases/index.html                     |    14 +-
 deployment/aws/README.md                        |   172 +
 deployment/aws/assembly.xml                     |    74 +
 deployment/aws/aws-sample.properties            |    19 +
 deployment/aws/gatling-cluster-cf.json          |   386 +
 deployment/aws/pom.xml                          |   238 +
 deployment/aws/src/main/cql/update_locks.cql    |    23 +
 deployment/aws/src/main/cql/update_usergrid.cql |    27 +
 .../main/cql/update_usergrid_applications.cql   |    46 +
 .../src/main/dist/init_instance/create_raid0.sh |    54 +
 .../main/dist/init_instance/init_db_server.sh   |    76 +
 .../main/dist/init_instance/init_es_server.sh   |    71 +
 .../dist/init_instance/init_graphite_server.sh  |    69 +
 .../dist/init_instance/init_opscenter_server.sh |   287 +
 .../main/dist/init_instance/init_rest_server.sh |   257 +
 .../dist/init_instance/install_cassandra.sh     |    51 +
 .../main/dist/init_instance/install_collectd.sh |   350 +
 .../dist/init_instance/install_elasticsearch.sh |   123 +
 .../init_instance/install_opscenter_agent.sh    |    42 +
 .../dist/init_instance/install_oraclejdk.sh     |    55 +
 .../main/dist/init_instance/install_yourkit.sh  |    39 +
 .../main/dist/init_instance/update_keyspaces.sh |    75 +
 .../aws/src/main/dist/lib/log4j.properties      |    53 +
 deployment/aws/src/main/dist/update.sh          |    35 +
 .../aws/src/main/groovy/NodeRegistry.groovy     |   227 +
 .../src/main/groovy/configure_cassandra.groovy  |   125 +
 .../main/groovy/configure_elasticsearch.groovy  |   169 +
 .../groovy/configure_opscenter_agent.groovy     |    50 +
 .../groovy/configure_opscenter_cassandra.groovy |   120 +
 .../groovy/configure_opscenter_usergrid.groovy  |    58 +
 .../src/main/groovy/configure_portal_new.groovy |    28 +
 .../src/main/groovy/configure_usergrid.groovy   |   193 +
 .../aws/src/main/groovy/create_dashboard.groovy |    79 +
 .../src/main/groovy/get_first_instance.groovy   |    46 +
 .../src/main/groovy/registry_register.groovy    |    38 +
 .../aws/src/main/groovy/tag_instance.groovy     |    55 +
 .../src/main/groovy/wait_for_instances.groovy   |    47 +
 deployment/aws/ugcluster-cf.json                |  2062 +
 deployment/pcf/LICENSE                          |   201 +
 deployment/pcf/README.md                        |    45 +
 deployment/pcf/addBlobs.sh                      |    25 +
 deployment/pcf/apache-usergrid-tile-1.6.yml     |   510 +
 deployment/pcf/config/blobs.yml                 |    19 +
 deployment/pcf/config/final.yml                 |    24 +
 deployment/pcf/content_migrations.yml           |    53 +
 deployment/pcf/createRelease.sh                 |    24 +
 deployment/pcf/createTile.sh                    |    32 +
 deployment/pcf/jobs/delete-all/monit            |    17 +
 deployment/pcf/jobs/delete-all/spec             |    44 +
 .../jobs/delete-all/templates/delete-all.sh.erb |   131 +
 deployment/pcf/jobs/deploy-all/monit            |    18 +
 deployment/pcf/jobs/deploy-all/spec             |   145 +
 .../jobs/deploy-all/templates/deploy-all.sh.erb |   384 +
 .../pcf/jobs/docker-bosh-cassandra_docker/monit |    23 +
 .../pcf/jobs/docker-bosh-cassandra_docker/spec  |    26 +
 .../docker-bosh-cassandra_docker.sh.erb         |    69 +
 .../jobs/docker-bosh-elasticsearch_docker/monit |    23 +
 .../jobs/docker-bosh-elasticsearch_docker/spec  |    26 +
 .../docker-bosh-elasticsearch_docker.sh.erb     |    69 +
 .../pcf/packages/cassandra_docker/packaging     |    26 +
 deployment/pcf/packages/cassandra_docker/spec   |    26 +
 deployment/pcf/packages/cf_cli/packaging        |    26 +
 deployment/pcf/packages/cf_cli/spec             |    25 +
 deployment/pcf/packages/common/packaging        |    23 +
 deployment/pcf/packages/common/spec             |    25 +
 .../pcf/packages/elasticsearch_docker/packaging |    26 +
 .../pcf/packages/elasticsearch_docker/spec      |    26 +
 deployment/pcf/packages/usergrid_app/packaging  |    27 +
 deployment/pcf/packages/usergrid_app/spec       |    27 +
 deployment/pcf/run.sh                           |    25 +
 deployment/pcf/src/common/utils.sh              |   107 +
 deployment/pcf/src/templates/all_open.json      |     6 +
 deployment/pcf/src/usergrid_app/manifest.yml    |    22 +
 docs/conf.py                                    |     4 +-
 docs/data-queries/operators-and-types.md        |    25 +-
 docs/data-storage/collections.md                |   144 +
 .../creating-a-new-application.md               |    16 -
 docs/getting-started/creating-account.md        |    21 -
 docs/getting-started/using-a-sandbox-app.md     |    39 -
 docs/getting-started/using-the-api.md           |   150 -
 docs/index.rst                                  |    22 +-
 docs/installation/deployment-guide.md           |   468 +
 docs/introduction/overview.md                   |    32 +-
 docs/introduction/usergrid-features.md          |     4 +-
 docs/orgs-and-apps/application.md               |   104 +
 docs/push.tgz                                   |   Bin 1651449 -> 0 bytes
 docs/reference/contribute-code.md               |    41 +-
 .../creating-a-new-application.md               |    16 +
 docs/using-usergrid/creating-account.md         |    21 +
 docs/using-usergrid/using-a-sandbox-app.md      |    39 +
 docs/using-usergrid/using-the-api.md            |   150 +
 portal/Gruntfile.js                             |     5 +-
 portal/bower.json                               |     2 +-
 portal/getStatus.js                             |    37 +
 .../push/push-send-notification-controller.js   |     1 -
 portal/package.json                             |     2 +-
 portal/status.html                              |    35 +
 release/README.txt                              |     6 +-
 release/binary-release.sh                       |    45 +
 release/pom.xml                                 |    95 +
 release/release-candidate.sh                    |   102 +-
 release/release.sh                              |   112 +-
 release/src/main/assembly/binary.xml            |   102 +
 .../apache/usergrid/android/sdk/UGClient.java   |    12 +-
 .../Usergrid.Sdk.IntegrationTests/BaseTest.cs   |    23 +-
 .../EntityPagingTests.cs                        |     2 +-
 .../Usergrid.Sdk.IntegrationTests/GroupTests.cs |     4 +-
 .../Usergrid.Sdk.IntegrationTests/LoginTests.cs |    12 +-
 .../Usergrid.Sdk.IntegrationTests.dll.config    |     1 +
 sdks/html5-javascript/Release.md                |     6 -
 sdks/ios/README.md                              |    53 +-
 sdks/java/README.md                             |   598 +-
 sdks/java/pom.xml                               |    73 +-
 .../org/apache/usergrid/java/client/Client.java |  1292 -
 .../apache/usergrid/java/client/Usergrid.java   |   285 +
 .../usergrid/java/client/UsergridClient.java    |   429 +
 .../java/client/UsergridClientConfig.java       |    60 +
 .../usergrid/java/client/UsergridEnums.java     |   170 +
 .../usergrid/java/client/UsergridRequest.java   |   205 +
 .../java/client/UsergridRequestManager.java     |    97 +
 .../java/client/auth/UsergridAppAuth.java       |    55 +
 .../usergrid/java/client/auth/UsergridAuth.java |    76 +
 .../java/client/auth/UsergridUserAuth.java      |    68 +
 .../usergrid/java/client/entities/Activity.java |   625 -
 .../usergrid/java/client/entities/Device.java   |    68 -
 .../usergrid/java/client/entities/Entity.java   |   191 -
 .../usergrid/java/client/entities/Group.java    |    79 -
 .../usergrid/java/client/entities/Message.java  |   148 -
 .../usergrid/java/client/entities/User.java     |   158 -
 .../java/client/exception/ClientException.java  |    41 -
 .../client/exception/UsergridException.java     |    50 +
 .../java/client/model/UsergridDevice.java       |    60 +
 .../java/client/model/UsergridEntity.java       |   487 +
 .../java/client/model/UsergridUser.java         |   198 +
 .../java/client/query/UsergridQuery.java        |   431 +
 .../java/client/response/AggregateCounter.java  |    52 -
 .../client/response/AggregateCounterSet.java    |   111 -
 .../java/client/response/ApiResponse.java       |   421 -
 .../client/response/ClientCredentialsInfo.java  |    58 -
 .../java/client/response/QueueInfo.java         |    44 -
 .../java/client/response/UsergridResponse.java  |   230 +
 .../client/response/UsergridResponseError.java  |    98 +
 .../usergrid/java/client/utils/JsonUtils.java   |   262 +-
 .../usergrid/java/client/utils/MapUtils.java    |    27 +-
 .../usergrid/java/client/utils/ObjectUtils.java |    28 +-
 .../usergrid/java/client/utils/UrlUtils.java    |   124 -
 .../utils/UsergridEntityDeserializer.java       |    41 +
 .../client/ClientAuthFallBackTestCase.java      |    72 +
 .../usergrid/client/ClientAuthTestCase.java     |    85 +
 .../client/ClientConnectionsTestCase.java       |   171 +
 .../usergrid/client/ClientRestTestCase.java     |    90 +
 .../apache/usergrid/client/EntityTestCase.java  |   676 +
 .../apache/usergrid/client/QueryTestCase.java   |   194 +
 .../usergrid/client/SDKTestConfiguration.java   |    38 +
 .../apache/usergrid/client/SDKTestUtils.java    |   108 +
 .../client/UsergridClientAuthTestCase.java      |    73 +
 .../usergrid/client/UsergridInitTestCase.java   |    48 +
 .../client/UsergridResponseErrorTestCase.java   |    62 +
 .../client/UsergridResponseTestCase.java        |    85 +
 .../usergrid/client/UsergridTestCase.java       |    30 +
 sdks/java/usergrid-java-client-2.1.0.jar        |   Bin 0 -> 1992232 bytes
 sdks/nodejs/lib/usergrid.js                     |     4 +-
 sdks/python/.gitignore                          |    57 +
 sdks/python/GUIDE.md                            |     2 +
 sdks/python/LICENSE                             |   202 +
 sdks/python/README.md                           |    16 +
 sdks/python/README.rst                          |    20 +
 sdks/python/sample_app.py                       |    77 +
 sdks/python/setup.py                            |    51 +
 sdks/python/usergrid/UsergridApplication.py     |    65 +
 sdks/python/usergrid/UsergridAuth.py            |   105 +
 sdks/python/usergrid/UsergridClient.py          |   401 +
 sdks/python/usergrid/UsergridCollection.py      |    82 +
 sdks/python/usergrid/UsergridConnection.py      |    30 +
 sdks/python/usergrid/UsergridError.py           |    21 +
 sdks/python/usergrid/UsergridOrganization.py    |    35 +
 sdks/python/usergrid/UsergridQueryIterator.py   |   157 +
 sdks/python/usergrid/__init__.py                |    37 +
 sdks/python/usergrid/app_templates.py           |    38 +
 sdks/python/usergrid/management_templates.py    |    27 +
 sdks/swift/.gitignore                           |    25 +
 sdks/swift/LICENSE.txt                          |    19 +
 sdks/swift/Package.swift                        |    30 +
 sdks/swift/README.md                            |   802 +
 .../ActivityFeed.xcodeproj/project.pbxproj      |   827 +
 .../contents.xcworkspacedata                    |     7 +
 .../contents.xcworkspacedata                    |     7 +
 .../xcshareddata/ActivityFeed.xcscmblueprint    |    30 +
 sdks/swift/Samples/ActivityFeed/Podfile         |     8 +
 sdks/swift/Samples/ActivityFeed/Readme.md       |    29 +
 .../ActivityFeed/Source/ActivityEntity.swift    |    60 +
 .../ActivityFeed/Source/AppDelegate.swift       |    65 +
 .../AppIcon.appiconset/Contents.json            |    38 +
 .../Source/Assets.xcassets/Contents.json        |     6 +
 .../UsergridGuy.imageset/Contents.json          |    21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |   Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |    27 +
 .../Source/Base.lproj/Main.storyboard           |   371 +
 .../Source/FollowViewController.swift           |    50 +
 .../ActivityFeed/Source/FormTextField.swift     |    71 +
 .../Samples/ActivityFeed/Source/Info.plist      |    43 +
 .../Source/LoginViewController.swift            |    77 +
 .../Source/MessageTableViewCell.swift           |   101 +
 .../ActivityFeed/Source/MessageTextView.swift   |    39 +
 .../Source/MessageViewController.swift          |   224 +
 .../Source/RegisterViewController.swift         |    62 +
 .../ActivityFeed/Source/UsergridManager.swift   |    78 +
 .../Source/ViewControllerExtensions.swift       |    36 +
 .../Assets.xcassets/README__ignoredByTemplate__ |     1 +
 .../ExtensionDelegate.swift                     |    45 +
 .../WatchSample Extension/Info.plist            |    45 +
 .../InterfaceController.swift                   |    81 +
 .../AppIcon.appiconset/Contents.json            |    55 +
 .../WatchSample/Base.lproj/Interface.storyboard |    46 +
 .../Samples/ActivityFeed/WatchSample/Info.plist |    35 +
 .../Samples/Push/Push.xcodeproj/project.pbxproj |   473 +
 .../contents.xcworkspacedata                    |     7 +
 .../Push.xcworkspace/contents.xcworkspacedata   |     7 +
 sdks/swift/Samples/Push/Readme.md               |    21 +
 .../swift/Samples/Push/Source/AppDelegate.swift |    53 +
 .../AppIcon.appiconset/Contents.json            |    38 +
 .../Push/Source/Assets.xcassets/Contents.json   |     6 +
 .../UsergridGuy.imageset/Contents.json          |    21 +
 .../UsergridGuy.imageset/UsergridGuy.png        |   Bin 0 -> 6230 bytes
 .../Source/Base.lproj/LaunchScreen.storyboard   |    27 +
 .../Push/Source/Base.lproj/Main.storyboard      |    75 +
 sdks/swift/Samples/Push/Source/Info.plist       |    38 +
 .../Samples/Push/Source/UsergridManager.swift   |    72 +
 .../Samples/Push/Source/ViewController.swift    |    39 +
 sdks/swift/Samples/Readme.md                    |    27 +
 sdks/swift/Source/Info.plist                    |    26 +
 sdks/swift/Source/Usergrid.swift                |   637 +
 sdks/swift/Source/UsergridAsset.swift           |   198 +
 .../Source/UsergridAssetRequestWrapper.swift    |    48 +
 sdks/swift/Source/UsergridAuth.swift            |   276 +
 sdks/swift/Source/UsergridClient.swift          |   931 +
 sdks/swift/Source/UsergridClientConfig.swift    |   149 +
 sdks/swift/Source/UsergridDevice.swift          |   213 +
 sdks/swift/Source/UsergridEntity.swift          |   635 +
 sdks/swift/Source/UsergridEnums.swift           |   417 +
 sdks/swift/Source/UsergridExtensions.swift      |   112 +
 sdks/swift/Source/UsergridFileMetaData.swift    |   114 +
 sdks/swift/Source/UsergridKeychainHelpers.swift |   196 +
 sdks/swift/Source/UsergridQuery.swift           |   591 +
 sdks/swift/Source/UsergridRequest.swift         |   245 +
 sdks/swift/Source/UsergridRequestManager.swift  |   176 +
 sdks/swift/Source/UsergridResponse.swift        |   203 +
 sdks/swift/Source/UsergridResponseError.swift   |    90 +
 sdks/swift/Source/UsergridSDK.h                 |    37 +
 sdks/swift/Source/UsergridSessionDelegate.swift |    90 +
 sdks/swift/Source/UsergridUser.swift            |   523 +
 sdks/swift/Tests/ASSET_Tests.swift              |   280 +
 sdks/swift/Tests/AUTH_Tests.swift               |   132 +
 sdks/swift/Tests/CONNECTION_Tests.swift         |   105 +
 sdks/swift/Tests/ClientCreationTests.swift      |    74 +
 sdks/swift/Tests/Entity_Tests.swift             |   173 +
 sdks/swift/Tests/GET_Tests.swift                |   113 +
 sdks/swift/Tests/Info.plist                     |    24 +
 sdks/swift/Tests/PUT_Tests.swift                |   158 +
 sdks/swift/Tests/TestAssets/UsergridGuy.jpg     |   Bin 0 -> 12981 bytes
 sdks/swift/Tests/TestAssets/logo_apigee.png     |   Bin 0 -> 10696 bytes
 sdks/swift/Tests/TestAssets/test.png            |   Bin 0 -> 1417937 bytes
 sdks/swift/Tests/User_Tests.swift               |   399 +
 .../swift/UsergridSDK.xcodeproj/project.pbxproj |  1179 +
 .../contents.xcworkspacedata                    |     7 +
 .../xcshareddata/WorkspaceSettings.xcsettings   |     8 +
 .../xcschemes/UsergridSDK OSX.xcscheme          |   100 +
 .../xcschemes/UsergridSDK iOS.xcscheme          |   100 +
 .../xcschemes/UsergridSDK tvOS.xcscheme         |   114 +
 .../xcschemes/UsergridSDK watchOS.xcscheme      |    80 +
 .../xcschemes/UsergridSDK_OSX_Tests.xcscheme    |    56 +
 .../xcschemes/UsergridSDK_TVOS_Tests.xcscheme   |    56 +
 .../xcschemes/UsergridSDK_iOS_Tests.xcscheme    |    57 +
 sdks/swift/docs/Classes.html                    |   702 +
 sdks/swift/docs/Classes/Usergrid.html           |  3798 +
 sdks/swift/docs/Classes/UsergridAppAuth.html    |   410 +
 sdks/swift/docs/Classes/UsergridAsset.html      |   702 +
 .../Classes/UsergridAssetUploadRequest.html     |   356 +
 sdks/swift/docs/Classes/UsergridAuth.html       |   558 +
 sdks/swift/docs/Classes/UsergridClient.html     |  3873 +
 .../docs/Classes/UsergridClientConfig.html      |   744 +
 sdks/swift/docs/Classes/UsergridDevice.html     |   763 +
 sdks/swift/docs/Classes/UsergridEntity.html     |  2683 +
 .../docs/Classes/UsergridFileMetaData.html      |   532 +
 sdks/swift/docs/Classes/UsergridQuery.html      |  2278 +
 .../UsergridQuery/UsergridQueryOperator.html    |   272 +
 .../UsergridQuery/UsergridQuerySortOrder.html   |   203 +
 sdks/swift/docs/Classes/UsergridRequest.html    |   619 +
 sdks/swift/docs/Classes/UsergridResponse.html   |   969 +
 .../docs/Classes/UsergridResponseError.html     |   473 +
 sdks/swift/docs/Classes/UsergridUser.html       |  2434 +
 .../UsergridUser/UsergridUserProperties.html    |   346 +
 sdks/swift/docs/Classes/UsergridUserAuth.html   |   410 +
 sdks/swift/docs/Enums.html                      |   435 +
 sdks/swift/docs/Enums/UsergridAuthFallback.html |   248 +
 sdks/swift/docs/Enums/UsergridAuthMode.html     |   283 +
 .../docs/Enums/UsergridDeviceProperties.html    |   369 +
 sdks/swift/docs/Enums/UsergridDirection.html    |   286 +
 .../docs/Enums/UsergridEntityProperties.html    |   514 +
 sdks/swift/docs/Enums/UsergridHttpMethod.html   |   341 +
 .../docs/Enums/UsergridImageContentType.html    |   286 +
 .../swift/docs/Enums/UsergridQueryOperator.html |   431 +
 .../docs/Enums/UsergridQuerySortOrder.html      |   338 +
 .../docs/Enums/UsergridUserProperties.html      |   524 +
 sdks/swift/docs/Extensions.html                 |   203 +
 sdks/swift/docs/Extensions/NSDate.html          |   448 +
 sdks/swift/docs/Extensions/UsergridAsset.html   |   184 +
 sdks/swift/docs/Extensions/UsergridAuth.html    |   260 +
 sdks/swift/docs/Extensions/UsergridClient.html  |  1962 +
 sdks/swift/docs/Global Variables.html           |   210 +
 sdks/swift/docs/Protocols.html                  |   146 +
 sdks/swift/docs/Protocols/UsergridAuth.html     |   260 +
 sdks/swift/docs/Typealiases.html                |   411 +
 sdks/swift/docs/css/highlight.css               |   200 +
 sdks/swift/docs/css/jazzy.css                   |   331 +
 .../docs/docsets/.docset/Contents/Info.plist    |    20 +
 .../Contents/Resources/Documents/Classes.html   |   702 +
 .../Resources/Documents/Classes/Usergrid.html   |  3798 +
 .../Documents/Classes/UsergridAppAuth.html      |   410 +
 .../Documents/Classes/UsergridAsset.html        |   702 +
 .../Classes/UsergridAssetUploadRequest.html     |   356 +
 .../Documents/Classes/UsergridAuth.html         |   558 +
 .../Documents/Classes/UsergridClient.html       |  3873 +
 .../Documents/Classes/UsergridClientConfig.html |   744 +
 .../Documents/Classes/UsergridDevice.html       |   763 +
 .../Documents/Classes/UsergridEntity.html       |  2683 +
 .../Documents/Classes/UsergridFileMetaData.html |   532 +
 .../Documents/Classes/UsergridQuery.html        |  2278 +
 .../UsergridQuery/UsergridQueryOperator.html    |   272 +
 .../UsergridQuery/UsergridQuerySortOrder.html   |   203 +
 .../Documents/Classes/UsergridRequest.html      |   619 +
 .../Documents/Classes/UsergridResponse.html     |   969 +
 .../Classes/UsergridResponseError.html          |   473 +
 .../Documents/Classes/UsergridUser.html         |  2434 +
 .../UsergridUser/UsergridUserProperties.html    |   346 +
 .../Documents/Classes/UsergridUserAuth.html     |   410 +
 .../Contents/Resources/Documents/Enums.html     |   435 +
 .../Documents/Enums/UsergridAuthFallback.html   |   248 +
 .../Documents/Enums/UsergridAuthMode.html       |   283 +
 .../Enums/UsergridDeviceProperties.html         |   369 +
 .../Documents/Enums/UsergridDirection.html      |   286 +
 .../Enums/UsergridEntityProperties.html         |   514 +
 .../Documents/Enums/UsergridHttpMethod.html     |   341 +
 .../Enums/UsergridImageContentType.html         |   286 +
 .../Documents/Enums/UsergridQueryOperator.html  |   431 +
 .../Documents/Enums/UsergridQuerySortOrder.html |   338 +
 .../Documents/Enums/UsergridUserProperties.html |   524 +
 .../Resources/Documents/Extensions.html         |   203 +
 .../Resources/Documents/Extensions/NSDate.html  |   448 +
 .../Documents/Extensions/UsergridAsset.html     |   184 +
 .../Documents/Extensions/UsergridAuth.html      |   260 +
 .../Documents/Extensions/UsergridClient.html    |  1962 +
 .../Resources/Documents/Global Variables.html   |   210 +
 .../Contents/Resources/Documents/Protocols.html |   146 +
 .../Documents/Protocols/UsergridAuth.html       |   260 +
 .../Resources/Documents/Typealiases.html        |   411 +
 .../Resources/Documents/css/highlight.css       |   200 +
 .../Contents/Resources/Documents/css/jazzy.css  |   331 +
 .../Contents/Resources/Documents/img/carat.png  |   Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |   Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |   Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |   927 +
 .../Contents/Resources/Documents/js/jazzy.js    |    40 +
 .../Resources/Documents/js/jquery.min.js        |     4 +
 .../Resources/Documents/undocumented.txt        |     0
 .../.docset/Contents/Resources/docSet.dsidx     |   Bin 0 -> 147456 bytes
 sdks/swift/docs/docsets/.tgz                    |   Bin 0 -> 148251 bytes
 .../UsergridSDK.docset/Contents/Info.plist      |    20 +
 .../Contents/Resources/Documents/Classes.html   |   694 +
 .../Resources/Documents/Classes/Usergrid.html   |  3704 +
 .../Documents/Classes/UsergridAppAuth.html      |   402 +
 .../Documents/Classes/UsergridAsset.html        |   694 +
 .../Classes/UsergridAssetUploadRequest.html     |   348 +
 .../Documents/Classes/UsergridAuth.html         |   550 +
 .../Documents/Classes/UsergridClient.html       |  3800 +
 .../Documents/Classes/UsergridClientConfig.html |   736 +
 .../Documents/Classes/UsergridDevice.html       |   644 +
 .../Documents/Classes/UsergridEntity.html       |  2612 +
 .../Documents/Classes/UsergridFileMetaData.html |   524 +
 .../Documents/Classes/UsergridQuery.html        |  2270 +
 .../UsergridQuery/UsergridQueryOperator.html    |   272 +
 .../UsergridQuery/UsergridQuerySortOrder.html   |   203 +
 .../Documents/Classes/UsergridRequest.html      |   611 +
 .../Documents/Classes/UsergridResponse.html     |   961 +
 .../Classes/UsergridResponseError.html          |   465 +
 .../Documents/Classes/UsergridUser.html         |  2319 +
 .../UsergridUser/UsergridUserProperties.html    |   346 +
 .../Documents/Classes/UsergridUserAuth.html     |   402 +
 .../Contents/Resources/Documents/Enums.html     |   427 +
 .../Documents/Enums/UsergridAuthFallback.html   |   248 +
 .../Enums/UsergridDeviceProperties.html         |   361 +
 .../Documents/Enums/UsergridDirection.html      |   278 +
 .../Enums/UsergridEntityProperties.html         |   506 +
 .../Documents/Enums/UsergridHttpMethod.html     |   333 +
 .../Enums/UsergridImageContentType.html         |   278 +
 .../Documents/Enums/UsergridQueryOperator.html  |   423 +
 .../Documents/Enums/UsergridQuerySortOrder.html |   330 +
 .../Documents/Enums/UsergridUserProperties.html |   516 +
 .../Resources/Documents/Extensions.html         |   175 +
 .../Documents/Extensions/UsergridAsset.html     |   184 +
 .../Documents/Extensions/UsergridAuth.html      |   260 +
 .../Documents/Extensions/UsergridClient.html    |  1962 +
 .../Resources/Documents/Global Variables.html   |   202 +
 .../Contents/Resources/Documents/Protocols.html |   146 +
 .../Documents/Protocols/UsergridAuth.html       |   260 +
 .../Resources/Documents/Typealiases.html        |   403 +
 .../Resources/Documents/css/highlight.css       |   200 +
 .../Contents/Resources/Documents/css/jazzy.css  |   331 +
 .../Contents/Resources/Documents/img/carat.png  |   Bin 0 -> 274 bytes
 .../Contents/Resources/Documents/img/dash.png   |   Bin 0 -> 1338 bytes
 .../Contents/Resources/Documents/img/gh.png     |   Bin 0 -> 1571 bytes
 .../Contents/Resources/Documents/index.html     |   919 +
 .../Contents/Resources/Documents/js/jazzy.js    |    40 +
 .../Resources/Documents/js/jquery.min.js        |     4 +
 .../Resources/Documents/undocumented.txt        |     0
 .../Contents/Resources/docSet.dsidx             |   Bin 0 -> 151552 bytes
 sdks/swift/docs/docsets/UsergridSDK.tgz         |   Bin 0 -> 145485 bytes
 sdks/swift/docs/img/carat.png                   |   Bin 0 -> 274 bytes
 sdks/swift/docs/img/dash.png                    |   Bin 0 -> 1338 bytes
 sdks/swift/docs/img/gh.png                      |   Bin 0 -> 1571 bytes
 sdks/swift/docs/index.html                      |   927 +
 sdks/swift/docs/js/jazzy.js                     |    40 +
 sdks/swift/docs/js/jquery.min.js                |     4 +
 sdks/swift/docs/undocumented.txt                |     0
 stack/Coverage.md                               |     2 +-
 stack/README.md                                 |    35 +-
 stack/awscluster/README.md                      |   163 -
 stack/awscluster/assembly.xml                   |    74 -
 stack/awscluster/aws-sample.properties          |    19 -
 stack/awscluster/gatling-cluster-cf.json        |   386 -
 stack/awscluster/pom.xml                        |   237 -
 stack/awscluster/src/main/cql/update_locks.cql  |    23 -
 .../awscluster/src/main/cql/update_usergrid.cql |    27 -
 .../main/cql/update_usergrid_applications.cql   |    46 -
 .../src/main/dist/init_instance/create_raid0.sh |    54 -
 .../main/dist/init_instance/init_db_server.sh   |    76 -
 .../main/dist/init_instance/init_es_server.sh   |    71 -
 .../dist/init_instance/init_graphite_server.sh  |    69 -
 .../dist/init_instance/init_opscenter_server.sh |   287 -
 .../main/dist/init_instance/init_rest_server.sh |   257 -
 .../dist/init_instance/install_cassandra.sh     |    51 -
 .../main/dist/init_instance/install_collectd.sh |   350 -
 .../dist/init_instance/install_elasticsearch.sh |   123 -
 .../init_instance/install_opscenter_agent.sh    |    42 -
 .../dist/init_instance/install_oraclejdk.sh     |    55 -
 .../main/dist/init_instance/install_yourkit.sh  |    39 -
 .../main/dist/init_instance/update_keyspaces.sh |    75 -
 .../src/main/dist/lib/log4j.properties          |    54 -
 stack/awscluster/src/main/dist/update.sh        |    35 -
 .../awscluster/src/main/dist/webapps/dummy.txt  |     0
 .../src/main/groovy/NodeRegistry.groovy         |   227 -
 .../src/main/groovy/configure_cassandra.groovy  |   129 -
 .../main/groovy/configure_elasticsearch.groovy  |   169 -
 .../groovy/configure_opscenter_agent.groovy     |    50 -
 .../groovy/configure_opscenter_cassandra.groovy |   120 -
 .../groovy/configure_opscenter_usergrid.groovy  |    58 -
 .../src/main/groovy/configure_portal_new.groovy |    28 -
 .../src/main/groovy/configure_usergrid.groovy   |   207 -
 .../src/main/groovy/create_dashboard.groovy     |    79 -
 .../src/main/groovy/get_first_instance.groovy   |    46 -
 .../src/main/groovy/registry_register.groovy    |    38 -
 .../src/main/groovy/tag_instance.groovy         |    55 -
 .../src/main/groovy/wait_for_instances.groovy   |    47 -
 stack/awscluster/ugcluster-cf.json              |  2062 -
 stack/build-tools/pom.xml                       |    13 +-
 stack/config/pom.xml                            |    12 +-
 .../main/resources/usergrid-default.properties  |   155 +-
 .../src/test/resources/usergrid-test.properties |    40 +-
 stack/core/pom.xml                              |   827 +-
 .../usergrid/batch/UsergridJobFactory.java      |     2 +-
 .../apache/usergrid/batch/job/OnlyOnceJob.java  |    21 +-
 .../batch/service/JobSchedulerService.java      |    57 +-
 .../batch/service/SchedulerServiceImpl.java     |    34 +-
 .../hazelcast/HazelcastLifecycleMonitor.java    |     8 +-
 .../corepersistence/ApplicationIdCache.java     |     6 +-
 .../corepersistence/ApplicationIdCacheImpl.java |    73 +-
 .../usergrid/corepersistence/CoreModule.java    |   177 +-
 .../corepersistence/CpEntityManager.java        |   740 +-
 .../corepersistence/CpEntityManagerFactory.java |   368 +-
 .../corepersistence/CpManagerCache.java         |     2 +-
 .../corepersistence/CpRelationManager.java      |   396 +-
 .../usergrid/corepersistence/CpSetup.java       |   116 +-
 .../usergrid/corepersistence/CpWalker.java      |    19 +-
 .../corepersistence/EntityManagerFig.java       |    13 +
 .../usergrid/corepersistence/GuiceFactory.java  |    18 +-
 .../usergrid/corepersistence/ManagerCache.java  |     2 +-
 .../asyncevents/AmazonAsyncEventService.java    |   811 -
 .../asyncevents/AsyncEventService.java          |    21 +-
 .../asyncevents/AsyncEventServiceImpl.java      |   931 +
 .../asyncevents/AsyncEventsSchedulerFig.java    |    76 +
 .../asyncevents/AsyncIndexProvider.java         |     6 +-
 .../asyncevents/EventBuilder.java               |    26 +-
 .../asyncevents/EventBuilderImpl.java           |   140 +-
 .../asyncevents/EventExecutionScheduler.java    |    37 +
 .../asyncevents/IndexDocNotFoundException.java  |    37 +
 .../asyncevents/model/AsyncEvent.java           |     9 +-
 .../model/DeIndexOldVersionsEvent.java          |    60 +
 .../asyncevents/model/EdgeDeleteEvent.java      |     4 +-
 .../model/ElasticsearchIndexEvent.java          |     2 +-
 .../asyncevents/model/EntityDeleteEvent.java    |     3 +
 .../model/InitializeApplicationIndexEvent.java  |     2 +-
 .../index/ApplicationIndexLocationStrategy.java |     2 +-
 .../index/CollectionSettings.java               |    47 +
 .../index/CollectionSettingsCache.java          |    59 +
 .../index/CollectionSettingsCacheFig.java       |    39 +
 .../index/CollectionSettingsFactory.java        |    73 +
 .../index/CollectionSettingsImpl.java           |    92 +
 .../index/CollectionSettingsScope.java          |    27 +
 .../index/CollectionSettingsScopeImpl.java      |    73 +
 .../index/IndexLocationStrategyFactoryImpl.java |     2 +-
 .../index/IndexProcessorFig.java                |    23 +-
 .../corepersistence/index/IndexService.java     |    23 +-
 .../corepersistence/index/IndexServiceImpl.java |   189 +-
 .../index/ManagementIndexLocationStrategy.java  |     2 +-
 .../index/ReIndexRequestBuilder.java            |     7 +
 .../index/ReIndexRequestBuilderImpl.java        |    32 +
 .../index/ReIndexServiceImpl.java               |    76 +-
 .../migration/DeDupConnectionDataMigration.java |     2 +-
 .../migration/MigrationModuleVersionPlugin.java |   137 -
 .../pipeline/PipelineModule.java                |     2 +-
 .../pipeline/PipelineOperations.java            |    30 -
 .../pipeline/builder/IdBuilder.java             |    24 +-
 .../pipeline/cursor/CursorSerializerUtil.java   |     9 -
 .../pipeline/cursor/RequestCursor.java          |    29 +-
 .../pipeline/read/FilterFactory.java            |    16 +-
 .../search/AbstractElasticSearchFilter.java     |     4 +-
 .../read/search/CandidateEntityFilter.java      |   119 +-
 .../pipeline/read/search/CandidateIdFilter.java |     6 +-
 .../read/search/SearchCollectionFilter.java     |     2 -
 .../read/search/SearchConnectionFilter.java     |     8 +-
 .../read/traverse/AbstractReadGraphFilter.java  |    49 +-
 .../AbstractReadReverseGraphFilter.java         |   291 +
 .../read/traverse/EntityLoadVerifyFilter.java   |     4 +-
 .../pipeline/read/traverse/IdFilter.java        |    52 +
 .../traverse/ReadGraphCollectionFilter.java     |     3 +-
 .../traverse/ReadGraphConnectionFilter.java     |     3 +-
 .../ReadGraphReverseConnectionFilter.java       |    53 +
 .../results/IdQueryExecutor.java                |    66 +
 .../results/ObservableQueryExecutor.java        |     9 +-
 .../rx/impl/AllApplicationsObservable.java      |     2 -
 .../corepersistence/rx/impl/AsyncRepair.java    |    38 +
 .../rx/impl/ResponseImportTasks.java            |    38 +
 .../service/ApplicationServiceImpl.java         |    46 +-
 .../service/CollectionSearch.java               |     9 +
 .../service/CollectionService.java              |     5 +
 .../service/CollectionServiceImpl.java          |    23 +
 .../service/ConnectionSearch.java               |     8 +-
 .../service/ConnectionServiceImpl.java          |    25 +-
 .../service/ServiceSchedulerFig.java            |    66 +
 .../corepersistence/util/CpNamingUtils.java     |    23 +-
 .../usergrid/count/CassandraCounterStore.java   |    13 +-
 .../usergrid/count/CassandraSubmitter.java      |     4 +-
 .../apache/usergrid/count/SimpleBatcher.java    |     2 +-
 .../usergrid/count/Slf4JBatchSubmitter.java     |     6 +-
 .../apache/usergrid/locking/LockManager.java    |     5 +
 .../locking/cassandra/AstyanaxLockImpl.java     |    92 +
 .../cassandra/AstyanaxLockManagerImpl.java      |   237 +
 .../locking/cassandra/HectorLockImpl.java       |    86 -
 .../cassandra/HectorLockManagerImpl.java        |   142 -
 .../usergrid/locking/guice/LockModule.java      |    40 +
 .../locking/noop/NoOpLockManagerImpl.java       |     5 +
 .../locking/singlenode/SingleNodeLockImpl.java  |    71 -
 .../singlenode/SingleNodeLockManagerImpl.java   |    94 -
 .../zookeeper/ZooKeeperLockManagerImpl.java     |   115 -
 .../locking/zookeeper/ZookeeperLockImpl.java    |    88 -
 .../org/apache/usergrid/mq/CounterQuery.java    |     4 -
 .../java/org/apache/usergrid/mq/Message.java    |     4 +-
 .../main/java/org/apache/usergrid/mq/Query.java |    16 +-
 .../usergrid/mq/cassandra/CassandraMQUtils.java |    12 +-
 .../mq/cassandra/QueueManagerFactoryImpl.java   |     5 +-
 .../usergrid/mq/cassandra/QueueManagerImpl.java |    24 +-
 .../apache/usergrid/mq/cassandra/QueuesCF.java  |     2 +-
 .../mq/cassandra/io/AbstractSearch.java         |     9 +-
 .../mq/cassandra/io/ConsumerTransaction.java    |    32 +-
 .../mq/cassandra/io/NoTransactionSearch.java    |     2 +-
 .../usergrid/persistence/EntityManager.java     |    32 +-
 .../persistence/EntityManagerFactory.java       |    14 +-
 .../persistence/MultiQueryIterator.java         |     2 +-
 .../persistence/NotificationGraphIterator.java  |   163 +
 .../persistence/PagingResultsIterator.java      |    25 +-
 .../apache/usergrid/persistence/PathQuery.java  |    68 +-
 .../usergrid/persistence/PersistenceModule.java |    12 +-
 .../org/apache/usergrid/persistence/Query.java  |    41 +-
 .../usergrid/persistence/RelationManager.java   |     2 +
 .../apache/usergrid/persistence/Results.java    |    20 +
 .../org/apache/usergrid/persistence/Schema.java |    26 +-
 .../persistence/cassandra/ApplicationCF.java    |     2 +-
 .../cassandra/CassandraPersistenceUtils.java    |     8 +-
 .../persistence/cassandra/CassandraService.java |    68 +-
 .../cassandra/ConnectionRefImpl.java            |     4 +-
 .../persistence/cassandra/CounterUtils.java     |    28 +-
 .../usergrid/persistence/cassandra/Setup.java   |    32 +-
 .../cassandra/util/Slf4jTraceTagReporter.java   |     4 +-
 .../cassandra/util/TraceTagAspect.java          |    11 +-
 .../cassandra/util/TraceTagManager.java         |    10 +-
 .../persistence/entities/Notification.java      |   295 +-
 .../usergrid/persistence/entities/Notifier.java |    51 +-
 .../usergrid/system/ServerEnvironmentProps.java |    27 +
 .../usergrid/system/UsergridSystemMonitor.java  |     4 +-
 .../org/apache/usergrid/utils/AESUtils.java     |     8 +-
 .../apache/usergrid/utils/ConversionUtils.java  |     6 +-
 .../org/apache/usergrid/utils/IndexUtils.java   |     4 +-
 .../org/apache/usergrid/utils/JsonUtils.java    |    22 +-
 .../org/apache/usergrid/utils/ListUtils.java    |    10 +-
 .../org/apache/usergrid/utils/MailUtils.java    |     2 +-
 .../org/apache/usergrid/utils/MapUtils.java     |     8 +-
 .../org/apache/usergrid/utils/StringUtils.java  |    12 +-
 .../org/apache/usergrid/utils/UUIDUtils.java    |    16 +-
 .../main/resources/usergrid-core-context.xml    |    47 +-
 .../org/apache/usergrid/AbstractCoreIT.java     |     6 +-
 .../org/apache/usergrid/CoreApplication.java    |    11 +-
 .../org/apache/usergrid/CoreITSetupImpl.java    |    16 +-
 .../apache/usergrid/batch/BulkTestUtils.java    |     1 -
 .../usergrid/batch/job/CountdownLatchJob.java   |     1 -
 .../usergrid/batch/job/DelayExecution.java      |     1 -
 .../usergrid/batch/job/DelayHeartbeat.java      |     1 -
 .../usergrid/batch/job/FailureJobExecution.java |     1 -
 .../usergrid/batch/job/OnlyOnceExceution.java   |   123 -
 .../usergrid/batch/job/OnlyOnceExecution.java   |   122 +
 .../job/OnlyOnceUnlockOnFailExceution.java      |   133 -
 .../job/OnlyOnceUnlockOnFailExecution.java      |   132 +
 .../usergrid/batch/job/SchedulerRuntime1IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime2IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime3IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime4IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime5IT.java |     3 +-
 .../usergrid/batch/job/SchedulerRuntime6IT.java |     5 +-
 .../usergrid/batch/job/SchedulerRuntime7IT.java |     7 +-
 .../usergrid/batch/job/SchedulerRuntime8IT.java |     3 +-
 .../batch/job/SchedulerRuntimeIntervalIT.java   |     3 +-
 .../usergrid/batch/job/TestJobListener.java     |    12 +-
 .../usergrid/batch/job/TestJobListenerTest.java |     6 +-
 .../clustering/hazelcast/HazelcastTest.java     |     5 +-
 .../corepersistence/CpEntityMapUtilsTest.java   |    28 +-
 .../corepersistence/StaleIndexCleanupTest.java  |   181 +-
 .../index/AmazonAsyncEventServiceTest.java      |   103 -
 .../index/AsyncEventServiceImplTest.java        |    96 +
 .../index/AsyncIndexServiceTest.java            |     5 +-
 .../corepersistence/index/IndexNamingTest.java  |     2 +-
 .../corepersistence/index/IndexServiceTest.java |    88 +-
 .../usergrid/corepersistence/index/RxTest.java  |   145 +-
 .../MigrationModuleVersionPluginTest.java       |   259 -
 .../count/BatchCountParallelismTest.java        |    16 +-
 .../usergrid/locking/AstyanaxLockManagerIT.java |   164 +
 .../locking/cassandra/HectorLockManagerIT.java  |   185 -
 .../SingleNodeLockTestSingleNode.java           |   170 -
 .../zookeeper/AbstractZooKeeperTest.java        |   127 -
 .../usergrid/locking/zookeeper/ZooPut.java      |   114 -
 .../zookeeper/ZookeeperLockManagerTest.java     |   186 -
 .../java/org/apache/usergrid/mq/MessagesIT.java |    70 +-
 .../org/apache/usergrid/mq/QueuePathsTest.java  |    18 +-
 .../usergrid/persistence/CollectionIT.java      |   118 +-
 .../usergrid/persistence/CoreSchemaManager.java |    34 +-
 .../apache/usergrid/persistence/CounterIT.java  |    62 +-
 .../persistence/EntityConnectionsIT.java        |   121 +-
 .../persistence/EntityDictionaryIT.java         |    24 +-
 .../usergrid/persistence/EntityManagerIT.java   |   112 +-
 .../apache/usergrid/persistence/EntityTest.java |     2 -
 .../org/apache/usergrid/persistence/GeoIT.java  |   152 +-
 .../persistence/GeoQueryBooleanTest.java        |     8 +-
 .../apache/usergrid/persistence/IndexIT.java    |   141 +-
 .../persistence/PerformanceEntityReadTest.java  |     4 +-
 .../persistence/PerformanceEntityWriteTest.java |     4 +-
 .../usergrid/persistence/RebuildIndexTest.java  |    19 +-
 .../apache/usergrid/persistence/SchemaTest.java |    18 +-
 .../cassandra/EntityManagerFactoryImplIT.java   |     8 +-
 .../query/IntersectionTransitivePagingIT.java   |     4 +-
 .../query/IntersectionUnionPagingIT.java        |    12 +-
 .../persistence/query/IteratingQueryIT.java     |   104 +-
 .../persistence/query/NotSubPropertyIT.java     |     8 +-
 .../persistence/query/ParenthesisProblemIT.java |    81 +
 .../apache/usergrid/utils/IndexUtilsTest.java   |     6 +-
 .../apache/usergrid/utils/JsonUtilsTest.java    |     4 +-
 .../apache/usergrid/utils/ListUtilsTest.java    |     6 +-
 .../org/apache/usergrid/utils/MapUtilsTest.java |     6 +-
 .../apache/usergrid/utils/TestInflector.java    |     6 +-
 .../apache/usergrid/utils/UUIDUtilsTest.java    |     4 +-
 stack/core/src/test/resources/log4j.properties  |     1 -
 .../resources/usergrid-custom-test.properties   |    16 +-
 .../test/resources/usergrid-test-context.xml    |     1 +
 stack/corepersistence/actorsystem/pom.xml       |   106 +
 .../persistence/actorsystem/ActorSystemFig.java |    83 +
 .../actorsystem/ActorSystemManager.java         |    79 +
 .../actorsystem/ActorSystemManagerImpl.java     |   447 +
 .../actorsystem/ActorSystemModule.java          |    34 +
 .../persistence/actorsystem/ClientActor.java    |   205 +
 .../actorsystem/GuiceActorProducer.java         |    46 +
 .../persistence/actorsystem/RouterProducer.java |    53 +
 .../src/main/resources/application.conf         |    50 +
 .../actorsystem/ActorServiceServiceTest.java    |    68 +
 stack/corepersistence/cache/pom.xml             |     2 +-
 .../usergrid/persistence/cache/CacheScope.java  |    24 +
 .../impl/ScopedCacheSerializationImpl.java      |   323 +-
 .../persistence/cache/ScopedCacheTest.java      |    15 +-
 stack/corepersistence/collection/pom.xml        |   120 +-
 .../collection/EntityCollectionManager.java     |    21 +-
 .../EntityCollectionManagerFactory.java         |     4 +-
 .../persistence/collection/FieldSet.java        |    12 +
 .../exception/CollectionRuntimeException.java   |    11 +
 .../exception/WriteUniqueVerifyException.java   |     2 +-
 .../collection/guice/CollectionModule.java      |    41 +
 .../guice/CollectionTaskExecutor.java           |    35 -
 .../EntityCollectionManagerFactoryImpl.java     |   174 +-
 .../impl/EntityCollectionManagerImpl.java       |   291 +-
 .../mvcc/stage/CollectionIoEvent.java           |    14 +-
 .../mvcc/stage/delete/MarkCommit.java           |    42 +-
 .../collection/mvcc/stage/delete/MarkStart.java |     4 +-
 .../mvcc/stage/delete/UniqueCleanup.java        |    33 +-
 .../mvcc/stage/delete/VersionCompact.java       |     2 +-
 .../mvcc/stage/write/RollbackAction.java        |    46 +-
 .../mvcc/stage/write/WriteCommit.java           |   116 +-
 .../mvcc/stage/write/WriteOptimisticVerify.java |     4 +-
 .../collection/mvcc/stage/write/WriteStart.java |    15 +-
 .../mvcc/stage/write/WriteUniqueVerify.java     |   207 +-
 .../scheduler/CollectionExecutorScheduler.java  |    52 +
 .../scheduler/CollectionSchedulerFig.java       |    53 +
 .../serialization/SerializationFig.java         |     4 +
 .../UniqueValueSerializationStrategy.java       |    51 +-
 .../impl/AllUniqueFieldsIterator.java           |    29 +
 .../serialization/impl/EntityVersion.java       |    12 +-
 .../serialization/impl/LogEntryIterator.java    |   128 +
 .../serialization/impl/MutableFieldSet.java     |    12 +
 .../MvccEntitySerializationStrategyImpl.java    |    33 +-
 ...vccEntitySerializationStrategyProxyImpl.java |    10 +-
 .../MvccEntitySerializationStrategyV1Impl.java  |    10 +-
 .../MvccEntitySerializationStrategyV2Impl.java  |    15 +-
 .../MvccEntitySerializationStrategyV3Impl.java  |    25 +-
 .../MvccLogEntrySerializationProxyImpl.java     |    10 +-
 .../MvccLogEntrySerializationStrategyImpl.java  |    12 +-
 ...MvccLogEntrySerializationStrategyV1Impl.java |    25 +-
 ...MvccLogEntrySerializationStrategyV2Impl.java |    25 +-
 .../serialization/impl/SettingsValidation.java  |     2 +-
 .../impl/UniqueFieldRowKeySerializer.java       |     3 +-
 .../UniqueValueSerializationStrategyImpl.java   |   638 +-
 ...iqueValueSerializationStrategyProxyImpl.java |    75 +-
 .../UniqueValueSerializationStrategyV1Impl.java |   488 +-
 .../UniqueValueSerializationStrategyV2Impl.java |   477 +-
 .../serialization/impl/UniqueValueSetImpl.java  |     6 +-
 .../migration/MvccEntityDataMigrationImpl.java  |    32 +-
 .../uniquevalues/ReservationCache.java          |    87 +
 .../uniquevalues/ReservationCacheActor.java     |    87 +
 .../uniquevalues/UniqueValueActor.java          |   282 +
 .../uniquevalues/UniqueValueException.java      |    33 +
 .../uniquevalues/UniqueValuesFig.java           |    84 +
 .../uniquevalues/UniqueValuesRouter.java        |    70 +
 .../uniquevalues/UniqueValuesService.java       |    74 +
 .../uniquevalues/UniqueValuesServiceImpl.java   |   369 +
 .../uniquevalues/UniqueValuesTable.java         |    42 +
 .../uniquevalues/UniqueValuesTableImpl.java     |   101 +
 .../collection/AbstractUniqueValueTest.java     |    46 +
 .../collection/EntityCollectionManagerIT.java   |   202 +-
 .../EntityCollectionManagerStressTest.java      |    36 +-
 .../collection/guice/TestCollectionModule.java  |     9 +-
 .../changelog/ChangeLogGeneratorImplTest.java   |     8 +-
 .../mvcc/stage/AbstractEntityStageTest.java     |     1 -
 .../mvcc/stage/delete/MarkCommitTest.java       |    23 +-
 .../mvcc/stage/delete/UniqueCleanupTest.java    |     1 -
 .../mvcc/stage/write/WriteCommitTest.java       |    21 +-
 .../stage/write/WriteOptimisticVerifyTest.java  |    21 +-
 .../mvcc/stage/write/WriteUniqueVerifyIT.java   |   125 +-
 .../mvcc/stage/write/WriteUniqueVerifyTest.java |    64 +-
 ...MvccEntitySerializationStrategyImplTest.java |     2 +-
 .../MvccEntitySerializationStrategyV2Test.java  |     2 +-
 .../impl/SerializationComparison.java           |     5 +-
 .../impl/SettingsValidationTest.java            |     2 +-
 ...niqueValueSerializationStrategyImplTest.java |   277 +-
 ...ctMvccEntityDataMigrationV1ToV3ImplTest.java |     5 +-
 .../UniqueValuesServiceDeleteTest.java          |   149 +
 .../uniquevalues/UniqueValuesServiceTest.java   |   185 +
 .../src/test/resources/dynamic-test.properties  |     4 +-
 .../src/test/resources/usergrid-CHOP.properties |    22 +-
 .../src/test/resources/usergrid-UNIT.properties |    23 +-
 .../src/test/resources/usergrid.properties      |    32 +
 stack/corepersistence/common/pom.xml            |   398 +-
 .../persistence/core/CassandraConfig.java       |    77 +
 .../persistence/core/CassandraConfigImpl.java   |   136 +
 .../usergrid/persistence/core/CassandraFig.java |   239 +
 .../core/astyanax/AstyanaxKeyspaceProvider.java |    46 +-
 .../core/astyanax/CassandraCluster.java         |    34 +
 .../core/astyanax/CassandraClusterImpl.java     |   225 +
 .../core/astyanax/CassandraConfig.java          |    58 -
 .../core/astyanax/CassandraConfigImpl.java      |   109 -
 .../persistence/core/astyanax/CassandraFig.java |   115 -
 .../persistence/core/astyanax/ColumnSearch.java |     7 +-
 .../astyanax/MultiKeyColumnNameIterator.java    |     8 +-
 .../core/astyanax/MultiRowColumnIterator.java   |    53 +-
 .../astyanax/MultiRowShardColumnIterator.java   |   462 +
 .../core/astyanax/MultiTenantColumnFamily.java  |    47 +
 .../MultiTenantColumnFamilyDefinition.java      |   138 +
 .../core/astyanax/MultiTennantColumnFamily.java |    47 -
 .../MultiTennantColumnFamilyDefinition.java     |   138 -
 .../core/consistency/TimeServiceImpl.java       |     5 +-
 .../persistence/core/datastax/CQLUtils.java     |   269 +
 .../core/datastax/DataStaxCluster.java          |    37 +
 .../core/datastax/DataStaxSessionProvider.java  |    43 +
 .../core/datastax/TableDefinition.java          |   127 +
 .../core/datastax/impl/DataStaxClusterImpl.java |   228 +
 .../core/executor/TaskExecutorFactory.java      |   112 +-
 .../persistence/core/guice/CommonModule.java    |    49 +-
 .../core/guice/SettingsValidationCluster.java   |    18 +
 .../core/metrics/MetricsFactoryImpl.java        |     6 +-
 .../migration/data/AbstractMigrationPlugin.java |     6 +-
 .../data/DataMigrationManagerImpl.java          |    11 +-
 .../data/MigrationInfoSerializationImpl.java    |    35 +-
 .../core/migration/schema/Migration.java        |     7 +-
 .../migration/schema/MigrationManagerImpl.java  |   154 +-
 .../core/migration/util/AstayanxUtils.java      |    49 -
 .../core/migration/util/AstyanaxUtils.java      |    50 +
 .../persistence/core/rx/ObservableIterator.java |     4 +-
 .../persistence/core/rx/OrderedMerge.java       |     6 +-
 .../persistence/core/rx/RxSchedulerFig.java     |    71 -
 .../core/rx/RxTaskSchedulerImpl.java            |    81 +-
 .../persistence/core/shard/SmartShard.java      |    61 +
 .../core/astyanax/ColumnNameIteratorTest.java   |    24 +-
 .../MultiKeyColumnNameIteratorTest.java         |    26 +-
 .../astyanax/MultiRowColumnIteratorTest.java    |    37 +-
 .../persistence/core/astyanax/TestUtils.java    |    14 +-
 .../persistence/core/datastax/CQLUtilsTest.java |   187 +
 .../core/datastax/DataStaxClusterTest.java      |    84 +
 .../core/datastax/TableDefinitionTest.java      |    81 +
 .../core/guice/MigrationManagerRule.java        |    18 +
 .../guice/SettingsValidationClusterTest.java    |    19 +
 .../persistence/core/rx/OrderedMergeTest.java   |    43 +-
 .../src/test/resources/usergrid-UNIT.properties |    24 +-
 .../src/test/resources/usergrid.properties      |    19 +
 stack/corepersistence/graph/pom.xml             |     3 +-
 .../usergrid/persistence/graph/GraphFig.java    |    21 +-
 .../persistence/graph/guice/GraphModule.java    |     7 -
 .../graph/impl/GraphManagerImpl.java            |    20 +-
 .../graph/impl/stage/EdgeDeleteRepairImpl.java  |    18 +-
 .../graph/impl/stage/EdgeMetaRepairImpl.java    |    46 +-
 .../impl/stage/NodeDeleteListenerImpl.java      |    20 +-
 .../EdgeMetadataSerializationProxyImpl.java     |    10 +-
 .../impl/EdgeMetadataSerializationV1Impl.java   |    46 +-
 .../impl/EdgeMetadataSerializationV2Impl.java   |    56 +-
 .../impl/EdgeSerializationImpl.java             |    63 +-
 .../serialization/impl/EdgesObservableImpl.java |    16 +-
 .../impl/NodeSerializationImpl.java             |    23 +-
 .../impl/TargetIdObservableImpl.java            |     4 +-
 .../impl/migration/EdgeDataMigrationImpl.java   |     2 +-
 .../impl/shard/DirectedEdgeMeta.java            |    12 +-
 .../impl/shard/EdgeColumnFamilies.java          |    12 +-
 .../impl/shard/EdgeShardStrategy.java           |    10 +-
 .../impl/shard/NodeShardApproximation.java      |    66 -
 .../impl/shard/NodeShardCache.java              |     7 +-
 .../graph/serialization/impl/shard/Shard.java   |    33 +-
 .../impl/shard/ShardEntryGroup.java             |    21 +-
 .../impl/shard/ShardedEdgeSerialization.java    |     2 +-
 .../serialization/impl/shard/count/Counter.java |   131 -
 .../shard/count/NodeShardApproximationImpl.java |   272 -
 .../count/NodeShardCounterSerialization.java    |    48 -
 .../NodeShardCounterSerializationImpl.java      |   186 -
 .../impl/shard/count/ShardKey.java              |    75 -
 .../impl/shard/impl/EdgeSearcher.java           |   113 +-
 .../shard/impl/EdgeShardSerializationImpl.java  |    76 +-
 .../shard/impl/NodeShardAllocationImpl.java     |    72 +-
 .../impl/shard/impl/NodeShardCacheImpl.java     |    57 +-
 .../shard/impl/ShardEntryGroupIterator.java     |    12 +
 .../shard/impl/ShardGroupColumnIterator.java    |    14 +-
 .../shard/impl/ShardGroupCompactionImpl.java    |   210 +-
 .../impl/shard/impl/ShardGroupDeletionImpl.java |    44 +-
 .../impl/ShardedEdgeSerializationImpl.java      |   142 +-
 .../impl/shard/impl/ShardsColumnIterator.java   |    79 +-
 .../shard/impl/SizebasedEdgeColumnFamilies.java |    54 +-
 .../shard/impl/SizebasedEdgeShardStrategy.java  |    13 +-
 .../shard/impl/serialize/ShardSerializer.java   |    86 +
 .../persistence/graph/GraphManagerLoadTest.java |    18 +-
 .../graph/GraphManagerShardConsistencyIT.java   |   288 +-
 .../graph/GraphManagerShardingIT.java           |   208 -
 .../graph/GraphManagerStressTest.java           |    54 +-
 .../graph/impl/NodeDeleteListenerTest.java      |     9 +-
 .../serialization/EdgeSerializationTest.java    |    11 +-
 .../graph/serialization/TestCount.java          |     4 +-
 .../impl/shard/EdgeShardSerializationTest.java  |    48 +
 .../impl/shard/NodeShardAllocationTest.java     |    76 +-
 .../impl/shard/ShardEntryGroupTest.java         |    59 +
 .../impl/shard/ShardGroupCompactionTest.java    |     4 +-
 .../serialization/impl/shard/ShardTest.java     |    65 +
 .../shard/count/NodeShardApproximationTest.java |   627 -
 .../NodeShardCounterSerializationTest.java      |   124 -
 .../shard/impl/ShardGroupDeletionImplTest.java  |     5 +
 .../graph/src/test/resources/log4j.properties   |     6 +
 .../src/test/resources/usergrid-AWS.properties  |     4 +-
 .../src/test/resources/usergrid-CHOP.properties |     4 +-
 .../src/test/resources/usergrid-UNIT.properties |     4 +-
 ...-cassandra-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 619559 -> 0 bytes
 ...-cassandra-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 161970 -> 0 bytes
 ...astyanax-cassandra-1.56.49-SNAPSHOT-UG-1.jar |   Bin 224466 -> 0 bytes
 ...astyanax-cassandra-1.56.49-SNAPSHOT-UG-1.pom |   112 -
 .../astyanax-cassandra/maven-metadata-local.xml |    12 -
 ...ax-contrib-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 33178 -> 0 bytes
 ...ax-contrib-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 2314 -> 0 bytes
 .../astyanax-contrib-1.56.49-SNAPSHOT-UG-1.jar  |   Bin 4842 -> 0 bytes
 .../astyanax-contrib-1.56.49-SNAPSHOT-UG-1.pom  |   112 -
 .../astyanax-contrib/maven-metadata-local.xml   |    12 -
 ...yanax-core-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 522906 -> 0 bytes
 ...yanax-core-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 141910 -> 0 bytes
 .../astyanax-core-1.56.49-SNAPSHOT-UG-1.jar     |   Bin 212858 -> 0 bytes
 .../astyanax-core-1.56.49-SNAPSHOT-UG-1.pom     |    88 -
 .../astyanax-core/maven-metadata-local.xml      |    12 -
 ...ity-mapper-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 97513 -> 0 bytes
 ...ity-mapper-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 30591 -> 0 bytes
 ...anax-entity-mapper-1.56.49-SNAPSHOT-UG-1.jar |   Bin 68952 -> 0 bytes
 ...anax-entity-mapper-1.56.49-SNAPSHOT-UG-1.pom |   118 -
 .../maven-metadata-local.xml                    |    12 -
 ...x-examples-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 38284 -> 0 bytes
 ...x-examples-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 4457 -> 0 bytes
 .../astyanax-examples-1.56.49-SNAPSHOT-UG-1.jar |   Bin 8506 -> 0 bytes
 .../astyanax-examples-1.56.49-SNAPSHOT-UG-1.pom |   106 -
 .../astyanax-examples/maven-metadata-local.xml  |    12 -
 ...anax-queue-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 180462 -> 0 bytes
 ...anax-queue-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 44057 -> 0 bytes
 .../astyanax-queue-1.56.49-SNAPSHOT-UG-1.jar    |   Bin 86586 -> 0 bytes
 .../astyanax-queue-1.56.49-SNAPSHOT-UG-1.pom    |   112 -
 .../astyanax-queue/maven-metadata-local.xml     |    12 -
 ...ax-recipes-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 204424 -> 0 bytes
 ...ax-recipes-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 58161 -> 0 bytes
 .../astyanax-recipes-1.56.49-SNAPSHOT-UG-1.jar  |   Bin 100246 -> 0 bytes
 .../astyanax-recipes-1.56.49-SNAPSHOT-UG-1.pom  |   106 -
 .../astyanax-recipes/maven-metadata-local.xml   |    12 -
 ...nax-thrift-1.56.49-SNAPSHOT-UG-1-javadoc.jar |   Bin 197342 -> 0 bytes
 ...nax-thrift-1.56.49-SNAPSHOT-UG-1-sources.jar |   Bin 76509 -> 0 bytes
 .../astyanax-thrift-1.56.49-SNAPSHOT-UG-1.jar   |   Bin 239007 -> 0 bytes
 .../astyanax-thrift-1.56.49-SNAPSHOT-UG-1.pom   |   112 -
 .../astyanax-thrift/maven-metadata-local.xml    |    12 -
 .../astyanax-1.56.49-SNAPSHOT-UG-1-javadoc.jar  |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1-sources.jar  |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1.jar          |   Bin 261 -> 0 bytes
 .../astyanax-1.56.49-SNAPSHOT-UG-1.pom          |   136 -
 .../astyanax/astyanax/maven-metadata-local.xml  |    12 -
 stack/corepersistence/map/pom.xml               |     3 +-
 .../usergrid/persistence/map/MapKeyResults.java |    42 +
 .../usergrid/persistence/map/MapManager.java    |     7 +
 .../persistence/map/impl/MapManagerImpl.java    |    15 +-
 .../persistence/map/impl/MapSerialization.java  |    11 +
 .../map/impl/MapSerializationImpl.java          |   562 +-
 .../persistence/map/MapManagerTest.java         |   193 +-
 stack/corepersistence/model/pom.xml             |    18 +-
 .../org/apache/usergrid/ExperimentalTest.java   |    22 +
 .../java/org/apache/usergrid/StressTest.java    |    22 +
 .../persistence/model/entity/EntityMap.java     |    68 +-
 .../model/entity/EntityToMapConverter.java      |     9 +-
 .../model/entity/MapToEntityConverter.java      |   255 +-
 .../persistence/model/field/ArrayField.java     |    11 +-
 .../persistence/model/field/BooleanField.java   |     4 +-
 .../persistence/model/field/ByteArrayField.java |    17 +-
 .../persistence/model/field/DistanceField.java  |    51 +
 .../model/field/EntityObjectField.java          |     9 +
 .../persistence/model/field/FieldTypeName.java  |     7 +-
 .../persistence/model/field/FloatField.java     |     4 +-
 .../persistence/model/field/IntegerField.java   |     4 +-
 .../persistence/model/field/ListField.java      |    11 +-
 .../persistence/model/field/LocationField.java  |    11 +-
 .../persistence/model/field/LongField.java      |     4 +-
 .../persistence/model/field/NullField.java      |    51 +
 .../model/field/SerializedObjectField.java      |     8 +-
 .../persistence/model/field/SetField.java       |    13 +-
 .../persistence/model/field/StringField.java    |     6 +-
 .../persistence/model/field/UUIDField.java      |     4 +-
 .../model/field/value/EntityObject.java         |    15 +-
 .../persistence/model/util/EntityUtils.java     |    18 +
 .../persistence/model/util/UUIDGenerator.java   |    18 +
 .../model/entity/MapToEntityConverterTest.java  |   179 +
 .../persistence/model/field/EntityTest.java     |    27 +-
 .../model/util/UUIDGeneratorTest.java           |    18 +
 stack/corepersistence/pom.xml                   |   197 +-
 stack/corepersistence/queryindex/pom.xml        |    25 +-
 .../usergrid/persistence/index/EntityIndex.java |     5 +-
 .../persistence/index/EntityIndexBatch.java     |    13 +-
 .../persistence/index/GeoCandidateResult.java   |    40 +
 .../usergrid/persistence/index/IndexFig.java    |     7 +-
 .../index/impl/DeIndexOperation.java            |     4 +-
 .../persistence/index/impl/EntityField.java     |    11 +
 .../index/impl/EntityMappingParser.java         |    25 +-
 .../index/impl/EntityToMapConverter.java        |    94 +-
 .../index/impl/EsEntityIndexBatchImpl.java      |    41 +-
 .../index/impl/EsEntityIndexFactoryImpl.java    |     2 +
 .../index/impl/EsEntityIndexImpl.java           |   222 +-
 .../index/impl/EsIndexProducerImpl.java         |    23 +-
 .../persistence/index/impl/EsProvider.java      |    28 +-
 .../index/impl/FailureMonitorImpl.java          |     7 +-
 .../persistence/index/impl/FieldParser.java     |     5 +-
 .../persistence/index/impl/IndexOperation.java  |     9 +-
 .../index/impl/IndexOperationMessage.java       |     6 +-
 .../persistence/index/impl/IndexingUtils.java   |    63 +-
 .../EsIndexMappingMigrationPlugin.java          |     4 +-
 .../persistence/index/query/ParsedQuery.java    |     4 +
 .../index/query/ParsedQueryBuilder.java         |     4 +-
 .../index/utils/ConversionUtils.java            |     6 +-
 .../persistence/index/utils/ListUtils.java      |    10 +-
 .../persistence/index/utils/UUIDUtils.java      |     6 +-
 .../persistence/index/impl/EntityIndexTest.java |   134 +-
 .../index/impl/EntityToMapConverterTest.java    |   193 +-
 .../persistence/index/impl/GeoPagingTest.java   |     5 +-
 .../index/impl/IndexLoadTestsIT.java            |     6 +-
 .../index/impl/IndexingUtilsTest.java           |    36 +
 .../index/impl/TestIndexIdentifier.java         |     3 +-
 .../src/test/resources/dynamic-test.properties  |     4 +-
 .../src/test/resources/usergrid-CHOP.properties |     4 +-
 .../src/test/resources/usergrid-UNIT.properties |     4 +-
 stack/corepersistence/queue/pom.xml             |   179 +-
 .../persistence/queue/LocalQueueManager.java    |    11 +-
 .../usergrid/persistence/queue/QueueFig.java    |    23 +-
 .../persistence/queue/QueueManager.java         |     6 +-
 .../persistence/queue/QueueMessage.java         |    10 +
 .../queue/impl/QueueManagerFactoryImpl.java     |    78 +-
 .../persistence/queue/impl/QueueScopeImpl.java  |     3 -
 .../queue/impl/SNSQueueManagerImpl.java         |   128 +-
 .../queue/util/AmazonNotificationUtils.java     |    22 +-
 .../persistence/queue/QueueManagerTest.java     |    10 +-
 .../usergrid/launcher/EmbeddedServerHelper.java |    10 +-
 .../resources/usergrid-standalone.properties    |    12 +-
 stack/loadtests/.gitignore                      |     1 -
 stack/loadtests/README.md                       |   207 -
 stack/loadtests/pom.xml                         |   149 -
 stack/loadtests/runAuditDeleteEntities.sh       |    65 -
 .../runAuditGetAllAppCollectionEntities.sh      |    68 -
 .../loadtests/runAuditGetCollectionEntities.sh  |    68 -
 .../runAuditVerifyCollectionEntities.sh         |    69 -
 stack/loadtests/runCollectionQueryTest.sh       |    88 -
 .../runCustomInjectRandomEntityByUuidTest.sh    |   108 -
 stack/loadtests/runDeleteEntities.sh            |    92 -
 .../loadtests/runGetEntitiesByNameSequential.sh |   101 -
 stack/loadtests/runGetEntitiesByUuid.sh         |    92 -
 stack/loadtests/runLoadEntities.sh              |    97 -
 stack/loadtests/runLoadEntitiesUnlimited.sh     |   104 -
 .../loadtests/runLoadLargeMultiFieldEntities.sh |   107 -
 stack/loadtests/runLoadNoNameEntities.sh        |    98 -
 stack/loadtests/runLoadSortableEntities.sh      |    98 -
 stack/loadtests/runOrgAppSetup.sh               |    91 -
 .../loadtests/runRandomEntityByNameQueryTest.sh |    91 -
 stack/loadtests/runRandomEntityByNameTest.sh    |    91 -
 stack/loadtests/runUpdateEntities.sh            |    91 -
 stack/loadtests/runtests_deprecated.sh          |   120 -
 .../datagenerators/EntityDataGenerator.scala    |   183 -
 .../datagenerators/FeederGenerator.scala        |   304 -
 .../datagenerators/datafiles/dist.all.last.txt  | 88799 -----------------
 .../datafiles/dist.female.first.txt             |  4275 -
 .../datafiles/dist.male.first.txt               |  1219 -
 .../usergrid/datagenerators/firstNames.txt      |  5494 -
 .../usergrid/datagenerators/lastNames.txt       | 88799 -----------------
 .../org/apache/usergrid/enums/AuthType.scala    |    31 -
 .../usergrid/enums/ConfigProperties.scala       |   181 -
 .../usergrid/enums/CsvFeedPatternType.scala     |    30 -
 .../usergrid/enums/EndConditionType.scala       |    29 -
 .../org/apache/usergrid/enums/EntityType.scala  |    30 -
 .../apache/usergrid/enums/ScenarioType.scala    |    38 -
 .../org/apache/usergrid/enums/TokenType.scala   |    29 -
 .../apache/usergrid/helpers/Extractors.scala    |   154 -
 .../org/apache/usergrid/helpers/Headers.scala   |    70 -
 .../org/apache/usergrid/helpers/Setup.scala     |   312 -
 .../org/apache/usergrid/helpers/Utils.scala     |   102 -
 .../scenarios/ApplicationScenarios.scala        |    53 -
 .../usergrid/scenarios/AuditScenarios.scala     |   342 -
 .../scenarios/ConnectionScenarios.scala         |    66 -
 .../usergrid/scenarios/DeviceScenarios.scala    |    85 -
 .../scenarios/EntityCollectionScenarios.scala   |   407 -
 .../usergrid/scenarios/EntityScenarios.scala    |    80 -
 .../usergrid/scenarios/GeoScenarios.scala       |    49 -
 .../scenarios/NotificationScenarios.scala       |    80 -
 .../usergrid/scenarios/NotifierScenarios.scala  |    70 -
 .../scenarios/OrganizationScenarios.scala       |    60 -
 .../usergrid/scenarios/TokenScenarios.scala     |    56 -
 .../usergrid/scenarios/UserScenarios.scala      |   210 -
 .../org/apache/usergrid/settings/Settings.scala |   612 -
 .../usergrid/simulations/AuditSimulation.scala  |    86 -
 .../simulations/ConfigurableSimulation.scala    |   105 -
 .../simulations/CustomInjectionSimulation.scala |   107 -
 .../simulations/deprecated/AppSimulation.scala  |    41 -
 .../deprecated/ConnectionsSimulation.scala      |    51 -
 .../deprecated/DeleteUsersSimulation.scala      |    56 -
 .../deprecated/GetEntitySimulation.scala        |    44 -
 .../deprecated/GetUserPagesSimulation.scala     |    51 -
 .../deprecated/GetUsersSimulation.scala         |    51 -
 .../deprecated/PostCustomEntitySimulation.scala |    76 -
 .../deprecated/PostUsersSimulation.scala        |    51 -
 .../PushNotificationTargetUserSimulation.scala  |    45 -
 .../deprecated/PutCustomEntitySimulation.scala  |    75 -
 .../deprecated/PutUsersSimulation.scala         |    56 -
 .../deprecated/SetupSimulation.scala            |    43 -
 stack/loadtests/src/main/scripts/gatling-mvn.sh |    31 -
 stack/loadtests/src/main/scripts/gatling-ug.sh  |    51 -
 .../src/test/resources/dummyAuditUuid.csv       |     1 -
 .../loadtests/src/test/resources/dummyUuid.csv  |     1 -
 stack/loadtests/src/test/resources/gatling.conf |   150 -
 .../src/test/resources/logback-test.xml         |    39 -
 stack/loadtests/src/test/resources/logback.xml  |    38 -
 .../loadtests/src/test/resources/recorder.conf  |    37 -
 stack/loadtests/src/test/scala/Engine.scala     |    29 -
 .../src/test/scala/IDEPathHelper.scala          |    38 -
 stack/loadtests/src/test/scala/Recorder.scala   |    28 -
 stack/loadtests/testConfig.sh                   |    67 -
 .../usergrid/mongo/AbstractMongoTest.java       |     2 +-
 .../apache/usergrid/mongo/BasicMongoTest.java   |     8 +-
 .../apache/usergrid/mongo/MongoQueryTest.java   |    18 +-
 stack/pom.xml                                   |  3052 +-
 stack/query-validator/pom.xml                   |    32 +-
 .../query/validator/ApiServerRunner.java        |   103 +-
 .../query/validator/AbstractQueryIT.java        |    26 +-
 .../usergrid/query/validator/QueryITSuite.java  |    12 +-
 .../query/validator/users/UserQueryIT.java      |    56 +-
 .../test/resources/usergrid-test-context.xml    |     5 +-
 stack/rest/pom.xml                              |    52 +-
 .../usergrid/rest/AbstractContextResource.java  |    85 +-
 .../org/apache/usergrid/rest/ApiResponse.java   |    79 +-
 .../org/apache/usergrid/rest/RootResource.java  |    65 +-
 .../rest/ServerEnvironmentProperties.java       |    22 +-
 .../apache/usergrid/rest/ShutdownListener.java  |    11 +
 .../apache/usergrid/rest/SwaggerServlet.java    |    18 +-
 .../rest/applications/ApplicationResource.java  |    63 +-
 .../rest/applications/AuthResource.java         |    30 +-
 .../rest/applications/CollectionResource.java   |   230 +
 .../rest/applications/ServiceResource.java      |   235 +-
 .../applications/assets/AssetsResource.java     |    44 +-
 .../applications/events/EventsResource.java     |     6 +-
 .../notifiers/NotifierResource.java             |    54 +-
 .../notifiers/NotifiersResource.java            |    54 +-
 .../rest/applications/queues/QueueResource.java |    50 +-
 .../queues/QueueSubscriberResource.java         |    25 +-
 .../queues/QueueSubscriptionResource.java       |    25 +-
 .../queues/QueueTransactionsResource.java       |     4 +
 .../rest/applications/users/UserResource.java   |   128 +-
 .../rest/applications/users/UsersResource.java  |    45 +-
 .../exceptions/AbstractExceptionMapper.java     |    17 +-
 ...ApplicationAlreadyExistsExceptionMapper.java |    32 +
 .../usergrid/rest/exceptions/AuthErrorInfo.java |     1 +
 .../AwsPropertiesNotFoundExceptionMapper.java   |     3 +-
 .../ElasticsearchExecutionExceptionMapper.java  |    38 +
 .../GCMInvalidRequestExceptionMapper.java       |    62 +
 .../IllegalArgumentExceptionMapper.java         |     4 +-
 .../exceptions/NotAllowedExceptionMapper.java   |    34 +
 ...rganizationApplicationNotFoundException.java |     6 +-
 .../rest/exceptions/RuntimeExceptionMapper.java |    43 +
 .../ServiceResourceNotFoundExceptionMapper.java |     9 +-
 .../UnsupportedOperationExceptionMapper.java    |    35 +
 .../UnsupportedRestOperationException.java      |    25 +
 ...UnsupportedRestOperationExceptionMapper.java |    34 +
 ...upportedServiceOperationExceptionMapper.java |    34 +
 .../rest/filters/ContentTypeFilter.java         |    20 +-
 .../rest/filters/JSONPCallbackFilter.java       |     4 +-
 .../usergrid/rest/filters/MeteringFilter.java   |     8 +-
 .../usergrid/rest/filters/TracingFilter.java    |     7 +-
 .../rest/management/ManagementResource.java     |   509 +-
 .../organizations/OrganizationResource.java     |   153 +-
 .../organizations/OrganizationsResource.java    |    70 +-
 .../applications/ApplicationResource.java       |    41 +-
 .../applications/ApplicationsResource.java      |     4 +-
 .../applications/imports/ImportsResource.java   |     6 +-
 .../organizations/users/UsersResource.java      |    63 +-
 .../rest/management/users/UserResource.java     |   165 +-
 .../rest/management/users/UsersResource.java    |    72 +-
 .../organizations/OrganizationsResource.java    |    28 +-
 .../organizations/OrganizationResource.java     |    14 +-
 .../rest/security/CrossOriginRequestFilter.java |     4 +-
 .../security/SecuredResourceFilterFactory.java  |   259 +-
 .../annotations/CheckPermissionsForPath.java    |    32 +
 .../security/shiro/RestSecurityManager.java     |     2 +-
 .../shiro/filters/BasicAuthSecurityFilter.java  |    12 +-
 .../ClientCredentialsSecurityFilter.java        |     8 +-
 .../OAuth2AccessTokenSecurityFilter.java        |    18 +-
 .../security/shiro/filters/SecurityFilter.java  |    12 +
 .../rest/system/ApplicationsResource.java       |    10 +-
 .../usergrid/rest/system/DatabaseResource.java  |     8 +-
 .../usergrid/rest/system/IndexResource.java     |    12 +-
 .../usergrid/rest/system/MigrateResource.java   |    10 +-
 .../usergrid/rest/test/PropertiesResource.java  |     3 +-
 .../rest/test/RefreshIndexResource.java         |     5 +-
 .../usergrid/rest/utils/CertificateUtils.java   |   108 +
 .../resources/usergrid-rest-deploy-context.xml  |     7 +
 .../usergrid/rest/ExceptionResourceIT.java      |    91 +
 .../java/org/apache/usergrid/rest/ITSetup.java  |    56 +-
 .../apache/usergrid/rest/IndexResourceIT.java   |     6 +-
 .../apache/usergrid/rest/NotificationsIT.java   |    11 +
 .../apache/usergrid/rest/PartialUpdateTest.java |     8 +-
 .../org/apache/usergrid/rest/TomcatRuntime.java |    12 +-
 .../org/apache/usergrid/rest/UniqueCatsIT.java  |   233 +
 .../apache/usergrid/rest/UniqueValuesIT.java    |   224 +
 .../rest/UniqueValuesPerformanceIT.java         |   165 +
 .../rest/applications/ApplicationCreateIT.java  |     3 +-
 .../rest/applications/ApplicationDeleteIT.java  |   132 +-
 .../applications/ApplicationResourceIT.java     |   120 +-
 .../usergrid/rest/applications/SecurityIT.java  |   114 +
 .../applications/assets/AssetResourceIT.java    |    90 +-
 .../applications/assets/AwsAssetResourceIT.java |    41 +-
 .../applications/assets/aws/NoAWSCredsRule.java |     4 +-
 .../collection/CollectionsResourceIT.java       |   893 +-
 .../activities/ActivityResourceIT.java          |     2 +-
 .../collection/devices/DevicesResourceIT.java   |     3 +-
 .../collection/groups/GroupResourceIT.java      |   115 +-
 .../collection/paging/PagingResourceIT.java     |    81 +-
 .../users/ConnectionResourceTest.java           |     2 +-
 .../collection/users/PermissionsResourceIT.java |   135 +-
 .../collection/users/UserResourceIT.java        |    13 +-
 .../users/extensions/TestResource.java          |     6 +-
 .../events/ApplicationRequestCounterIT.java     |    48 +
 .../applications/events/EventsResourceIT.java   |    34 +-
 .../applications/notifiers/NotifiersIT.java     |   116 +
 .../applications/queries/AndOrQueryTest.java    |     6 +-
 .../applications/queries/GeoPagingTest.java     |     7 +-
 .../applications/queries/MatrixQueryTests.java  |     2 -
 .../rest/applications/queries/OrderByTest.java  |     9 +-
 .../applications/queries/QueryTestBase.java     |     4 +-
 .../queries/SelectMappingsQueryTest.java        |   168 +
 .../rest/applications/utils/TestUtils.java      |     1 -
 .../rest/filters/ContentTypeResourceIT.java     |     4 -
 .../usergrid/rest/management/AdminUsersIT.java  |   437 +-
 .../rest/management/ExportResourceIT.java       |    22 +-
 .../rest/management/ExternalSSOEnabledIT.java   |   175 +
 .../rest/management/ImportResourceIT.java       |    15 +-
 .../rest/management/ManagementResourceIT.java   |    94 +-
 .../rest/management/OrganizationsIT.java        |    72 +-
 .../rest/management/RegistrationIT.java         |    16 +-
 .../organizations/AdminEmailEncodingIT.java     |     5 +-
 .../rest/test/resource/AbstractRestIT.java      |    11 +-
 .../rest/test/resource/ClientSetup.java         |    85 +-
 .../usergrid/rest/test/resource/DumbClient.java |    58 -
 .../resource/endpoints/CollectionEndpoint.java  |    44 +-
 .../test/resource/endpoints/NamedResource.java  |    28 +
 .../endpoints/OrganizationResource.java         |     3 +-
 .../endpoints/mgmt/ApplicationResource.java     |     8 +-
 .../resource/endpoints/mgmt/OrgResource.java    |    14 +-
 .../rest/test/resource/model/ApiResponse.java   |     3 -
 .../rest/test/resource/model/Collection.java    |     7 +-
 .../resources/corepersistence-UNIT.properties   |     2 +
 stack/rest/src/test/resources/log4j.properties  |     1 -
 .../src/test/resources/pushtest_dev_recent.p12  |   Bin 0 -> 3227 bytes
 stack/rest/src/test/resources/test.txt          |    17 +
 .../resources/usergrid-custom-test.properties   |    26 +-
 .../resources/usergrid-rest-deploy-context.xml  |    33 +-
 .../test/resources/usergrid-test-context.xml    |     2 +-
 .../resources/valid_non_apple_2036_01_07.p12    |   Bin 0 -> 2661 bytes
 stack/scripts/multitenant_migrate.py            |    48 +-
 stack/services/pom.xml                          |   920 +-
 .../management/AccountCreationProps.java        |   131 +-
 .../management/AppInfoMigrationPlugin.java      |     9 +-
 .../usergrid/management/ManagementService.java  |   389 +-
 .../usergrid/management/OrganizationConfig.java |   213 +-
 .../management/OrganizationConfigProps.java     |    73 +
 .../usergrid/management/OrganizationInfo.java   |    27 +-
 .../cassandra/AccountCreationPropsImpl.java     |     4 +-
 .../cassandra/ManagementServiceImpl.java        |   918 +-
 .../cassandra/OrganizationConfigPropsImpl.java  |   224 +
 ...alSSOProviderAdminUserNotFoundException.java |    28 +
 .../usergrid/management/export/ExportJob.java   |     7 +-
 .../management/export/ExportServiceImpl.java    |     7 +-
 .../management/export/S3ExportImpl.java         |     3 +-
 .../management/importer/FileImportJob.java      |     6 +-
 .../usergrid/management/importer/ImportJob.java |     8 +-
 .../management/importer/ImportServiceImpl.java  |   586 +-
 .../management/importer/S3ImportImpl.java       |     7 +-
 .../usergrid/security/AuthPrincipalType.java    |     4 +-
 .../security/crypto/EncryptionServiceImpl.java  |     8 +-
 .../usergrid/security/oauth/AccessInfo.java     |     2 +-
 .../security/providers/AbstractProvider.java    |    42 +-
 .../security/providers/FacebookProvider.java    |     9 +-
 .../security/providers/FoursquareProvider.java  |     6 +-
 .../providers/PingIdentityProvider.java         |    97 +-
 .../apache/usergrid/security/shiro/Realm.java   |    18 +-
 .../usergrid/security/shiro/ShiroCache.java     |   126 +-
 .../security/shiro/ShiroCacheManager.java       |    17 +-
 .../shiro/credentials/AdminUserAccessToken.java |     3 +
 .../credentials/ApplicationAccessToken.java     |     3 +
 .../ApplicationClientCredentials.java           |     5 +
 .../credentials/OrganizationAccessToken.java    |     3 +
 .../shiro/principals/AdminUserPrincipal.java    |     3 +
 .../principals/ApplicationGuestPrincipal.java   |     4 +-
 .../shiro/principals/ApplicationPrincipal.java  |     4 +-
 .../principals/ApplicationUserPrincipal.java    |    20 +-
 .../shiro/principals/OrganizationPrincipal.java |    42 +-
 .../shiro/principals/PrincipalIdentifier.java   |     8 +-
 .../security/shiro/utils/LocalShiroCache.java   |    80 +
 .../security/shiro/utils/SubjectUtils.java      |    36 +-
 .../security/sso/ApigeeSSO2Provider.java        |   220 +
 .../security/sso/ExternalSSOProvider.java       |    42 +
 .../security/sso/SSOProviderFactory.java        |    85 +
 .../security/sso/UsergridExternalProvider.java  |   291 +
 .../usergrid/security/tokens/TokenCategory.java |     4 +-
 .../usergrid/security/tokens/TokenInfo.java     |    19 +
 .../usergrid/security/tokens/TokenService.java  |    22 +-
 .../tokens/cassandra/TokenServiceImpl.java      |   277 +-
 .../services/AbstractCollectionService.java     |   219 +-
 .../services/AbstractConnectionsService.java    |    73 +-
 .../AbstractPathBasedCollectionService.java     |   153 +
 .../AbstractPathBasedColllectionService.java    |   149 -
 .../usergrid/services/AbstractService.java      |    75 +-
 .../org/apache/usergrid/services/Service.java   |     3 +
 .../apache/usergrid/services/ServiceInfo.java   |     7 +-
 .../usergrid/services/ServiceManager.java       |    28 +-
 .../services/ServiceManagerFactory.java         |    18 +-
 .../usergrid/services/ServiceParameter.java     |    44 +-
 .../usergrid/services/ServiceRequest.java       |     9 +-
 .../usergrid/services/ServiceResults.java       |     8 +-
 .../services/activities/ActivitiesService.java  |     4 +-
 .../applications/ApplicationsService.java       |    22 +-
 .../usergrid/services/assets/AssetsService.java |    16 +-
 .../services/assets/data/AssetMimeHandler.java  |     4 +-
 .../services/assets/data/AssetUtils.java        |     4 +-
 .../assets/data/AwsSdkS3BinaryStore.java        |    23 +-
 .../assets/data/LocalFileBinaryStore.java       |     4 +-
 .../services/assets/data/S3BinaryStore.java     |    36 +-
 .../services/devices/DevicesService.java        |    14 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/devices/users/UsersService.java    |     4 +-
 .../AwsPropertiesNotFoundException.java         |     3 -
 .../usergrid/services/groups/GroupsService.java |    16 +-
 .../groups/activities/ActivitiesService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/groups/roles/RolesService.java     |     4 +-
 .../services/groups/users/UsersService.java     |     4 +-
 .../users/activities/ActivitiesService.java     |     4 +-
 .../groups/users/devices/DevicesService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/guice/ServiceModuleImpl.java       |     3 +
 .../services/messages/MessagesService.java      |     4 +-
 .../notifications/ApplicationQueueManager.java  |     9 +-
 .../ApplicationQueueManagerCache.java           |   143 +
 .../notifications/ApplicationQueueMessage.java  |     5 +-
 .../notifications/InactiveDeviceManager.java    |     8 +-
 .../services/notifications/JobScheduler.java    |    15 +-
 .../notifications/NotificationDeviceFilter.java |    45 +
 .../notifications/NotificationServiceProxy.java |     3 -
 .../notifications/NotificationsService.java     |    87 +-
 .../services/notifications/ProviderAdapter.java |     5 +-
 .../services/notifications/QueueJob.java        |    16 +-
 .../services/notifications/QueueListener.java   |   181 +-
 .../services/notifications/TaskManager.java     |   167 +-
 .../services/notifications/TestAdapter.java     |    16 +-
 .../notifications/apns/APNsAdapter.java         |    11 +-
 .../apns/RejectedAPNsListener.java              |     4 +-
 .../services/notifications/gcm/GCMAdapter.java  |   126 +-
 .../impl/ApplicationQueueManagerImpl.java       |   714 +-
 .../services/notifications/wns/WNSAdapter.java  |    15 +-
 .../services/notifiers/NotifiersService.java    |    10 +-
 .../services/queues/ImportQueueListener.java    |     4 +-
 .../services/queues/ImportQueueManager.java     |     4 +-
 .../usergrid/services/queues/QueueListener.java |    66 +-
 .../usergrid/services/roles/RolesService.java   |     6 +-
 .../services/roles/groups/GroupsService.java    |     4 +-
 .../services/roles/users/UsersService.java      |     4 +-
 .../usergrid/services/users/UsersService.java   |     8 +-
 .../users/activities/ActivitiesService.java     |     4 +-
 .../services/users/devices/DevicesService.java  |    20 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../users/following/FollowingService.java       |     4 +-
 .../services/users/groups/GroupsService.java    |     4 +-
 .../notifications/NotificationsService.java     |     4 +-
 .../services/users/roles/RolesService.java      |     8 +-
 .../org/apache/usergrid/utils/PythonUtils.java  |   103 -
 .../src/main/python/pyusergrid/__init__.py      |    15 -
 .../main/python/pyusergrid/services/__init__.py |    15 -
 .../pyusergrid/services/pytest/PytestService.py |    31 -
 .../pyusergrid/services/pytest/__init__.py      |    15 -
 .../python/pyusergrid/services/pytest/test.py   |    29 -
 stack/services/src/main/python/test/__init__.py |    15 -
 stack/services/src/main/python/test/test.py     |    29 -
 .../resources/usergrid-services-context.xml     |   150 +-
 .../org/apache/usergrid/NewOrgAppAdminRule.java |     4 +-
 .../org/apache/usergrid/ServiceApplication.java |    14 +-
 .../migration/AppInfoMigrationPluginTest.java   |    18 +-
 .../apache/usergrid/management/EmailFlowIT.java |    43 +-
 .../management/OrganizationConfigIT.java        |   213 +
 .../usergrid/management/OrganizationIT.java     |     4 +-
 .../org/apache/usergrid/management/RoleIT.java  |    10 +-
 .../cassandra/ManagementServiceIT.java          |    55 +-
 .../management/export/ExportServiceIT.java      |    88 +-
 .../management/export/MockS3ExportImpl.java     |     2 +-
 .../importer/ImportConnectionsTest.java         |     2 +-
 .../management/importer/ImportServiceIT.java    |    32 +-
 .../usergrid/management/importer/S3Upload.java  |     1 -
 .../org/apache/usergrid/python/JythonTest.java  |    39 -
 .../security/providers/FacebookProviderIT.java  |     6 +-
 .../providers/PingIdentityProviderIT.java       |     6 +-
 .../security/tokens/TokenServiceIT.java         |    10 +-
 .../usergrid/services/CollectionServiceIT.java  |    16 +
 .../usergrid/services/ConnectionsServiceIT.java |    74 +-
 .../usergrid/services/ServiceInvocationIT.java  |    32 +-
 .../AbstractServiceNotificationIT.java          |    27 +-
 .../notifications/NotifiersServiceIT.java       |    11 +-
 .../apns/MockSuccessfulProviderAdapter.java     |   103 -
 .../apns/NotificationsServiceIT.java            |   320 +-
 .../gcm/MockSuccessfulProviderAdapter.java      |    89 -
 .../gcm/NotificationsServiceIT.java             |   440 +-
 .../notifications/wns/WNSAdapterTest.java       |    44 +
 .../src/test/resources/log4j.properties         |     1 -
 .../src/test/resources/pushtest_dev.p12         |   Bin 3203 -> 0 bytes
 .../src/test/resources/pushtest_prod.p12        |   Bin 3205 -> 0 bytes
 .../resources/usergrid-custom-test.properties   |     4 +-
 .../test/resources/usergrid-test-context.xml    |     1 +
 stack/test-utils/pom.xml                        |     6 +-
 .../java/org/apache/usergrid/TomcatMain.java    |    10 +-
 .../usergrid/cassandra/AvailablePortFinder.java |    18 +-
 .../usergrid/cassandra/CassandraResource.java   |     6 +-
 .../usergrid/cassandra/ClearShiroSubject.java   |     8 +-
 .../usergrid/cassandra/SchemaManager.java       |     3 -
 .../usergrid/cassandra/SpringResource.java      |    10 +-
 .../usergrid/cassandra/FakeSchemaManager.java   |    12 +-
 .../usergrid/cassandra/SpringResourceTest.java  |    10 +-
 stack/tools/pom.xml                             |    21 +-
 .../org/apache/usergrid/tools/AppAudit.java     |     2 +-
 .../java/org/apache/usergrid/tools/Cli.java     |    37 +-
 .../apache/usergrid/tools/DupAdminRepair.java   |   297 -
 .../org/apache/usergrid/tools/DupOrgRepair.java |   263 -
 .../usergrid/tools/EntityInsertBenchMark.java   |   272 -
 .../usergrid/tools/EntityReadBenchMark.java     |   353 -
 .../org/apache/usergrid/tools/EntityUpdate.java |     3 +-
 .../java/org/apache/usergrid/tools/Export.java  |    26 +-
 .../org/apache/usergrid/tools/ExportAdmins.java |    26 +-
 .../org/apache/usergrid/tools/ExportApp.java    |   136 +-
 .../usergrid/tools/ExportDataCreator.java       |    41 +-
 .../java/org/apache/usergrid/tools/Import.java  |     7 +-
 .../org/apache/usergrid/tools/ImportAdmins.java |   161 +-
 .../org/apache/usergrid/tools/IndexRebuild.java |   184 -
 .../java/org/apache/usergrid/tools/Metrics.java |     2 +-
 .../usergrid/tools/OrganizationExport.java      |     2 +-
 .../apache/usergrid/tools/PopulateSample.java   |     4 +-
 .../RepairingMismatchedApplicationMetadata.java |   119 -
 .../org/apache/usergrid/tools/ToolBase.java     |    92 +-
 .../usergrid/tools/UniqueIndexCleanup.java      |   386 -
 .../usergrid/tools/UniqueValueScanner.java      |   298 +
 .../org/apache/usergrid/tools/UserManager.java  |     3 +-
 .../apache/usergrid/tools/WarehouseExport.java  |   133 +-
 .../apache/usergrid/tools/WarehouseUpsert.java  |    30 +-
 .../apache/usergrid/tools/bean/MetricQuery.java |    11 +-
 stack/tools/src/main/resources/log4j.properties |    34 +-
 .../main/resources/toolsApplicationContext.xml  |   131 +-
 .../apache/usergrid/tools/ExportAppTest.java    |    62 +-
 .../usergrid/tools/ExportImportAdminsTest.java  |    43 +-
 .../test/resources/usergrid-test-context.xml    |    63 +
 .../websocket/WebSocketChannelHandler.java      |    16 +-
 .../test/resources/testApplicationContext.xml   |   273 +-
 tests/integration/.gitignore                    |     3 +
 tests/integration/LICENSE                       |   327 +
 tests/integration/README.md                     |     8 +
 tests/integration/config/default.js             |    28 +
 tests/integration/config/index.js               |    28 +
 tests/integration/index.js                      |    23 +
 tests/integration/lib/connections.js            |    63 +
 tests/integration/lib/devices.js                |    43 +
 tests/integration/lib/entities.js               |   126 +
 tests/integration/lib/groups.js                 |    43 +
 tests/integration/lib/notifications.js          |    35 +
 tests/integration/lib/notifiers.js              |    43 +
 tests/integration/lib/random.js                 |    39 +
 tests/integration/lib/response.js               |    23 +
 tests/integration/lib/token.js                  |    64 +
 tests/integration/lib/urls.js                   |    40 +
 tests/integration/lib/users.js                  |    48 +
 tests/integration/package.json                  |    17 +
 .../test/authentication/management.js           |    40 +
 tests/integration/test/authentication/org.js    |    39 +
 tests/integration/test/authentication/shawn     |     1 +
 tests/integration/test/authentication/user.js   |    40 +
 tests/integration/test/authorization/shawn      |     1 +
 tests/integration/test/collections/brandon      |     1 +
 tests/integration/test/connections/brandon      |     1 +
 tests/integration/test/entities/brandon         |     1 +
 tests/integration/test/entities/create.js       |    47 +
 tests/integration/test/entities/deleteAll.js    |    39 +
 tests/integration/test/entities/get.js          |    60 +
 tests/integration/test/entities/update.js       |    44 +
 tests/integration/test/groups/groups.js         |   149 +
 tests/integration/test/main.js                  |    78 +
 tests/integration/test/management/shawn         |     1 +
 tests/integration/test/mocha.opts               |     3 +
 .../test/notifications/notifications.js         |   352 +
 .../test/queries/integerComparison.js           |    82 +
 tests/integration/test/setup.js                 |   111 +
 tests/integration/test/teardown.js              |    96 +
 tests/integration/test/users/create.js          |    47 +
 tests/performance/.gitignore                    |     1 +
 tests/performance/LICENSE                       |   327 +
 tests/performance/README.md                     |   207 +
 tests/performance/pom.xml                       |   149 +
 tests/performance/runAuditDeleteEntities.sh     |    65 +
 .../runAuditGetAllAppCollectionEntities.sh      |    68 +
 .../runAuditGetCollectionEntities.sh            |    68 +
 .../runAuditVerifyCollectionEntities.sh         |    69 +
 tests/performance/runCollectionQueryTest.sh     |    88 +
 .../runCustomInjectRandomEntityByUuidTest.sh    |   108 +
 tests/performance/runDeleteEntities.sh          |    92 +
 .../runGetEntitiesByNameSequential.sh           |   101 +
 tests/performance/runGetEntitiesByUuid.sh       |    92 +
 tests/performance/runLoadEntities.sh            |    98 +
 tests/performance/runLoadEntitiesUnlimited.sh   |   103 +
 .../runLoadLargeMultiFieldEntities.sh           |   107 +
 tests/performance/runLoadNestedEntities.sh      |    98 +
 tests/performance/runLoadNoNameEntities.sh      |    98 +
 tests/performance/runLoadSortableEntities.sh    |    98 +
 tests/performance/runOrgAppSetup.sh             |    91 +
 .../runRandomEntityByNameQueryTest.sh           |    91 +
 tests/performance/runRandomEntityByNameTest.sh  |    91 +
 tests/performance/runUpdateEntities.sh          |    91 +
 tests/performance/runtests_deprecated.sh        |   120 +
 .../datagenerators/EntityDataGenerator.scala    |   223 +
 .../datagenerators/FeederGenerator.scala        |   304 +
 .../datagenerators/datafiles/dist.all.last.txt  | 88799 +++++++++++++++++
 .../datafiles/dist.female.first.txt             |  4275 +
 .../datafiles/dist.male.first.txt               |  1219 +
 .../usergrid/datagenerators/firstNames.txt      |  5494 +
 .../usergrid/datagenerators/lastNames.txt       | 88799 +++++++++++++++++
 .../org/apache/usergrid/enums/AuthType.scala    |    31 +
 .../usergrid/enums/ConfigProperties.scala       |   181 +
 .../usergrid/enums/CsvFeedPatternType.scala     |    30 +
 .../usergrid/enums/EndConditionType.scala       |    29 +
 .../org/apache/usergrid/enums/EntityType.scala  |    31 +
 .../apache/usergrid/enums/ScenarioType.scala    |    38 +
 .../org/apache/usergrid/enums/TokenType.scala   |    29 +
 .../apache/usergrid/helpers/Extractors.scala    |   154 +
 .../org/apache/usergrid/helpers/Headers.scala   |    70 +
 .../org/apache/usergrid/helpers/Setup.scala     |   312 +
 .../org/apache/usergrid/helpers/Utils.scala     |   102 +
 .../scenarios/ApplicationScenarios.scala        |    53 +
 .../usergrid/scenarios/AuditScenarios.scala     |   342 +
 .../scenarios/ConnectionScenarios.scala         |    66 +
 .../usergrid/scenarios/DeviceScenarios.scala    |    85 +
 .../scenarios/EntityCollectionScenarios.scala   |   407 +
 .../usergrid/scenarios/EntityScenarios.scala    |    80 +
 .../usergrid/scenarios/GeoScenarios.scala       |    49 +
 .../scenarios/NotificationScenarios.scala       |    80 +
 .../usergrid/scenarios/NotifierScenarios.scala  |    70 +
 .../scenarios/OrganizationScenarios.scala       |    60 +
 .../usergrid/scenarios/TokenScenarios.scala     |    56 +
 .../usergrid/scenarios/UserScenarios.scala      |   210 +
 .../org/apache/usergrid/settings/Settings.scala |   612 +
 .../usergrid/simulations/AuditSimulation.scala  |    86 +
 .../simulations/ConfigurableSimulation.scala    |   105 +
 .../simulations/CustomInjectionSimulation.scala |   107 +
 .../simulations/deprecated/AppSimulation.scala  |    41 +
 .../deprecated/ConnectionsSimulation.scala      |    51 +
 .../deprecated/DeleteUsersSimulation.scala      |    56 +
 .../deprecated/GetEntitySimulation.scala        |    44 +
 .../deprecated/GetUserPagesSimulation.scala     |    51 +
 .../deprecated/GetUsersSimulation.scala         |    51 +
 .../deprecated/PostCustomEntitySimulation.scala |    76 +
 .../deprecated/PostUsersSimulation.scala        |    51 +
 .../PushNotificationTargetUserSimulation.scala  |    45 +
 .../deprecated/PutCustomEntitySimulation.scala  |    75 +
 .../deprecated/PutUsersSimulation.scala         |    56 +
 .../deprecated/SetupSimulation.scala            |    43 +
 .../performance/src/main/scripts/gatling-mvn.sh |    31 +
 .../performance/src/main/scripts/gatling-ug.sh  |    51 +
 .../src/test/resources/dummyAuditUuid.csv       |     1 +
 .../src/test/resources/dummyUuid.csv            |     1 +
 .../performance/src/test/resources/gatling.conf |   150 +
 .../src/test/resources/logback-test.xml         |    39 +
 .../performance/src/test/resources/logback.xml  |    38 +
 .../src/test/resources/recorder.conf            |    37 +
 tests/performance/src/test/scala/Engine.scala   |    29 +
 .../src/test/scala/IDEPathHelper.scala          |    38 +
 tests/performance/src/test/scala/Recorder.scala |    28 +
 tests/performance/testConfig.sh                 |    68 +
 utils/usergrid-util-python/.gitignore           |    61 +
 utils/usergrid-util-python/LICENSE              |   202 +
 utils/usergrid-util-python/README.md            |    15 +
 .../es_tools/alias_mover.py                     |    72 +
 .../es_tools/cluster_shard_allocation.py        |   111 +
 .../es_tools/command_sender.py                  |    52 +
 .../es_tools/es_index_iterator_reindexer.py     |   128 +
 .../es_tools/es_searcher.py                     |    45 +
 .../es_tools/index_deleter.py                   |    98 +
 .../es_tools/index_prefix_checker.py            |   100 +
 .../es_tools/index_replica_setter.py            |   124 +
 .../es_tools/index_shard_allocator.py           |   149 +
 .../es_tools/mapping_deleter.py                 |    53 +
 .../es_tools/mapping_retriever.py               |    64 +
 .../es_tools/monitor_tasks.py                   |    61 +
 utils/usergrid-util-python/index_test/README.md |     1 +
 .../index_test/document_creator.py              |   276 +
 .../index_test/index_test_mixed_batch.py        |   552 +
 .../index_test/index_test_single_type_batch.py  |   555 +
 utils/usergrid-util-python/requirements.txt     |     4 +
 .../activity_streams/activity_streams.py        |   154 +
 .../samples/beacon-event-example.py             |   238 +
 .../samples/counter_test.py                     |    52 +
 utils/usergrid-util-python/setup.py             |    59 +
 .../usergrid_tools/__init__.py                  |     4 +
 .../usergrid_tools/general/__init__.py          |    21 +
 .../usergrid_tools/general/deleter.py           |   170 +
 .../general/duplicate_name_checker.py           |    47 +
 .../usergrid_tools/general/queue_monitor.py     |   138 +
 .../usergrid_tools/general/url_tester.py        |   108 +
 .../general/user_confirm_activate.py            |    51 +
 .../usergrid_tools/groups/__init__.py           |     2 +
 .../usergrid_tools/groups/big_group_creater.py  |   100 +
 .../usergrid_tools/indexing/README.md           |    22 +
 .../usergrid_tools/indexing/__init__.py         |    21 +
 .../usergrid_tools/indexing/batch_index_test.py |   362 +
 .../indexing/entity_index_test.py               |   339 +
 .../usergrid_tools/iterators/README.md          |     8 +
 .../usergrid_tools/iterators/__init__.py        |    18 +
 .../usergrid_tools/iterators/simple_iterator.py |   101 +
 .../iterators/usergrid_cross_region_iterator.py |   425 +
 .../iterators/usergrid_iterator.py              |   504 +
 .../usergrid_tools/library_check.py             |    45 +
 .../usergrid_tools/migration/README.md          |   234 +
 .../usergrid_tools/migration/__init__.py        |    24 +
 .../migration/usergrid_data_exporter.py         |   943 +
 .../migration/usergrid_data_migrator.py         |  2186 +
 .../usergrid_tools/parse_importer/README.md     |    90 +
 .../usergrid_tools/parse_importer/__init__.py   |    21 +
 .../parse_importer/parse_importer.py            |   404 +
 .../usergrid_tools/permissions/README.md        |     3 +
 .../usergrid_tools/permissions/permissions.py   |   168 +
 .../usergrid_tools/queue/README.md              |     1 +
 .../queue/dlq-iterator-checker.py               |   162 +
 .../usergrid_tools/queue/dlq_requeue.py         |   192 +
 .../queue/queue-config-sample.json              |    22 +
 .../usergrid_tools/queue/queue_cleaner.py       |   174 +
 .../usergrid_tools/redis/redis_iterator.py      |    52 +
 .../usergrid_tools/redis/redisscan.py           |    37 +
 website/README.md                               |     6 +-
 website/content/releases/index.html             |    11 +-
 website/crash.log                               |   143 -
 website/layouts/footer.html                     |     3 +-
 website/lib/default.rb                          |     4 +-
 website/nanoc.yaml                              |     2 +
 website/run.sh                                  |     3 +-
 1714 files changed, 376248 insertions(+), 229035 deletions(-)
----------------------------------------------------------------------



[20/37] usergrid git commit: Minor refactoring, renaming and debug logging changes.

Posted by sn...@apache.org.
Minor refactoring, renaming and debug logging changes.


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/f8c3a2dd
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/f8c3a2dd
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/f8c3a2dd

Branch: refs/heads/usergrid-1318-queue
Commit: f8c3a2dd87495cd4f65a455f46a187d9c7badd27
Parents: f56e1b0
Author: Dave Johnson <sn...@apache.org>
Authored: Thu Oct 13 10:12:33 2016 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Thu Oct 13 10:12:33 2016 -0400

----------------------------------------------------------------------
 .../asyncevents/AsyncEventsSchedulerFig.java    |  9 +--
 .../usergrid/persistence/qakka/QakkaFig.java    | 12 ++--
 .../distributed/actors/ShardAllocator.java      |  5 ++
 .../impl/DistributedQueueServiceImpl.java       |  6 +-
 .../impl/MessageCounterSerializationImpl.java   | 72 +++++++++++++-------
 .../impl/QueueMessageSerializationImpl.java     |  2 +-
 .../impl/ShardCounterSerializationImpl.java     |  2 +-
 .../queue/src/test/resources/log4j.properties   |  5 +-
 .../queue/src/test/resources/qakka.properties   |  5 +-
 9 files changed, 70 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventsSchedulerFig.java
----------------------------------------------------------------------
diff --git a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventsSchedulerFig.java b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventsSchedulerFig.java
index f696568..e556870 100644
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventsSchedulerFig.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/asyncevents/AsyncEventsSchedulerFig.java
@@ -24,13 +24,9 @@ import org.safehaus.guicyfig.GuicyFig;
 import org.safehaus.guicyfig.Key;
 
 
-/**
- *
- */
 @FigSingleton
 public interface AsyncEventsSchedulerFig extends GuicyFig {
 
-
     /**
      * Amount of threads to use in async processing
      */
@@ -42,25 +38,22 @@ public interface AsyncEventsSchedulerFig extends GuicyFig {
      */
     String IO_SCHEDULER_NAME = "scheduler.io.poolName";
 
-
     /**
      * Amount of threads to use in async processing
      */
     String REPAIR_SCHEDULER_THREADS = "repair.io.threads";
 
-
     /**
      * Name of pool to use when performing scheduling
      */
     String REPAIR_SCHEDULER_NAME = "repair.io.poolName";
 
 
-
     @Default( "40" )
     @Key( IO_SCHEDULER_THREADS )
     int getMaxIoThreads();
 
-    @Default( "Usergrid-SQS-Pool" )
+    @Default( "Usergrid-Queue-Worker-Pool" )
     @Key( IO_SCHEDULER_NAME )
     String getIoSchedulerName();
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/QakkaFig.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/QakkaFig.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/QakkaFig.java
index 3093c39..e6a8667 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/QakkaFig.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/QakkaFig.java
@@ -52,9 +52,9 @@ public interface QakkaFig extends GuicyFig, Serializable {
 
     String QUEUE_GET_TIMEOUT                      = "queue.get.timeout.seconds";
 
-    String QUEUE_MAX_SHARD_COUNTER                = "queue.max.inmemory.max.shard.counter";
+    String QUEUE_SHARD_COUNTER_MAX_IN_MEMORY      = "queue.shard.counter.max-in-memory";
 
-    String QUEUE_MAX_MESSAGE_CHANGES              = "queue.max.inmemory.max.message.changes";
+    String QUEUE_MESSAGE_COUNTER_MAX_IN_MEMORY    = "queue.message.counter.max-in-memory";
 
     String QUEUE_SHARD_ALLOCATION_CHECK_FREQUENCY = "queue.shard.allocation.check.frequency.millis";
 
@@ -123,14 +123,14 @@ public interface QakkaFig extends GuicyFig, Serializable {
     int getSendTimeoutSeconds();
 
     /** Once counter reaches this value, write it to permanent storage */
-    @Key(QUEUE_MAX_SHARD_COUNTER)
+    @Key(QUEUE_SHARD_COUNTER_MAX_IN_MEMORY)
     @Default("100")
-    long getMaxInMemoryShardCounter();
+    long getShardCounterMaxInMemory();
 
     /** Once counter reaches this value, write it to permanent storage */
-    @Key(QUEUE_MAX_MESSAGE_CHANGES)
+    @Key(QUEUE_MESSAGE_COUNTER_MAX_IN_MEMORY)
     @Default("100")
-    long getMaxInMemoryMessageCounter();
+    long getMessageCounterMaxInMemory();
 
     /** How often to check whether new shard is needed for each queue */
     @Key(QUEUE_SHARD_ALLOCATION_CHECK_FREQUENCY)

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/actors/ShardAllocator.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/actors/ShardAllocator.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/actors/ShardAllocator.java
index 1863472..19059e6 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/actors/ShardAllocator.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/actors/ShardAllocator.java
@@ -125,6 +125,7 @@ public class ShardAllocator extends UntypedActor {
             long counterValue = 0;
             try {
                 counterValue = shardCounterSerialization.getCounterValue( queueName, type, shard.getShardId() );
+
             } catch ( NotFoundException ignored ) {}
 
             if (counterValue > (0.9 * qakkaFig.getMaxShardSize())) {
@@ -140,6 +141,10 @@ public class ShardAllocator extends UntypedActor {
 
                 logger.info("{} Created new shard for queue {} shardId {} timestamp {} counterValue {}",
                         this.hashCode(), queueName, shard.getShardId(), futureUUID.timestamp(), counterValue );
+
+            } else {
+//                logger.debug("No new shard for queue {} counterValue {} of max {}",
+//                    queueName, counterValue, qakkaFig.getMaxShardSize() );
             }
 
         } catch ( Throwable t ) {

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/impl/DistributedQueueServiceImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/impl/DistributedQueueServiceImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/impl/DistributedQueueServiceImpl.java
index 20bf608..e2c5c2c 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/impl/DistributedQueueServiceImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/distributed/impl/DistributedQueueServiceImpl.java
@@ -241,9 +241,9 @@ public class DistributedQueueServiceImpl implements DistributedQueueService {
                 }
             }
 
-            if ( ret.isEmpty() ) {
-                logger.info( "Requested {} but queue '{}' is empty", count, queueName);
-            }
+//            if ( ret.isEmpty() ) {
+//                logger.info( "Requested {} but queue '{}' is empty", count, queueName);
+//            }
             return ret;
 
         } finally {

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/MessageCounterSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/MessageCounterSerializationImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/MessageCounterSerializationImpl.java
index ee4bab2..36175c5 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/MessageCounterSerializationImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/MessageCounterSerializationImpl.java
@@ -78,19 +78,35 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
 
     class InMemoryCount {
         long baseCount;
+        final AtomicLong totalInMemoryCount = new AtomicLong( 0L ); // for testing using only in-memory counter
         final AtomicLong increment = new AtomicLong( 0L );
         final AtomicLong decrement = new AtomicLong( 0L );
 
         InMemoryCount( long baseCount ) {
             this.baseCount = baseCount;
         }
-        public AtomicLong getIncrement() {
-            return increment;
+        public void increment( long inc ) {
+            increment.addAndGet( inc );
+            totalInMemoryCount.addAndGet( inc );
         }
-        public AtomicLong getDecrement() {
-            return decrement;
+        public void decrement( long dec ) {
+            decrement.addAndGet( dec );
+            totalInMemoryCount.addAndGet( -dec );
+        }
+        public long getIncrement() {
+            return increment.get();
+        }
+        public long getDecrement() {
+            return decrement.get();
+        }
+        public void clearDeltas() {
+            increment.set( 0L );
+            decrement.set( 0L );
         }
         public long value() {
+
+            // return totalInMemoryCount.get(); // for testing using just in-memory counter:
+
             return baseCount + increment.get() - decrement.get();
         }
         void setBaseCount( long baseCount ) {
@@ -106,7 +122,7 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
         CassandraConfig cassandraConfig, QakkaFig qakkaFig, CassandraClient cassandraClient ) {
 
         this.cassandraConfig = cassandraConfig;
-        this.maxChangesBeforeSave = qakkaFig.getMaxInMemoryMessageCounter();
+        this.maxChangesBeforeSave = qakkaFig.getMessageCounterMaxInMemory();
         this.cassandraClient = cassandraClient;
     }
 
@@ -139,13 +155,16 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
         InMemoryCount inMemoryCount = inMemoryCounters.get( key );
 
         synchronized ( inMemoryCount ) {
-            inMemoryCount.getIncrement().addAndGet( increment );
-
-            //logger.info("Incremented Count for queue {} type {} = {}",
-            //queueName, type, getCounterValue( queueName, type ));
-
+            inMemoryCount.increment( increment );
             saveIfNeeded( queueName, type );
         }
+
+        if ( logger.isDebugEnabled() ) {
+            long value = inMemoryCounters.get( key ).value();
+            if (value <= 0) {
+                logger.debug( "Queue {} type {} decremented count = {}", queueName, type, value );
+            }
+        }
     }
 
 
@@ -172,14 +191,16 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
         InMemoryCount inMemoryCount = inMemoryCounters.get( key );
 
         synchronized ( inMemoryCount ) {
-
-            inMemoryCount.getDecrement().addAndGet( decrement );
-
-            //logger.info("Decremented Count for queue {} type {} = {}",
-                //queueName, type, getCounterValue( queueName, type ));
-
+            inMemoryCount.decrement( decrement );
             saveIfNeeded( queueName, type );
         }
+
+        if ( logger.isDebugEnabled() ) {
+            long value = inMemoryCounters.get( key ).value();
+            if (value <= 0) {
+                logger.debug( "Queue {} type {} incremented count = {}", queueName, type, value );
+            }
+        }
     }
 
 
@@ -194,14 +215,14 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
 
             if ( value == null ) {
                 throw new NotFoundException(
-                        MessageFormat.format( "No counter found for queue {0} type {1}",
-                                queueName, type ));
+                        MessageFormat.format( "No counter found for queue {0} type {1}", queueName, type ));
             } else {
                 inMemoryCounters.put( key, new InMemoryCount( value ));
             }
         }
 
-        return inMemoryCounters.get( key ).value();
+        long value = inMemoryCounters.get( key ).value();
+        return value;
     }
 
 
@@ -253,15 +274,18 @@ public class MessageCounterSerializationImpl implements MessageCounterSerializat
 
         if ( numChanges.incrementAndGet() > maxChangesBeforeSave ) {
 
-            long totalIncrement = inMemoryCount.getIncrement().get();
+            long totalIncrement = inMemoryCount.getIncrement();
             incrementCounterInStorage( queueName, type, totalIncrement );
 
-            long totalDecrement = inMemoryCount.getDecrement().get();
+            long totalDecrement = inMemoryCount.getDecrement();
             decrementCounterInStorage( queueName, type, totalDecrement );
 
-            inMemoryCount.setBaseCount( retrieveCounterFromStorage( queueName, type ) );
-            inMemoryCount.getIncrement().set( 0L );
-            inMemoryCount.getDecrement().set( 0L );
+            long baseCount = retrieveCounterFromStorage( queueName, type );
+
+            logger.debug("Writing queue counter {} type {} to storage count = {}", queueName, type, baseCount );
+
+            inMemoryCount.setBaseCount( baseCount );
+            inMemoryCount.clearDeltas();
 
             numChanges.set( 0 );
         }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/QueueMessageSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/QueueMessageSerializationImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/QueueMessageSerializationImpl.java
index 708132c..a174dd0 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/QueueMessageSerializationImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/queuemessages/impl/QueueMessageSerializationImpl.java
@@ -179,7 +179,7 @@ public class QueueMessageSerializationImpl implements QueueMessageSerialization
             Shard.Type shardType = DatabaseQueueMessage.Type.DEFAULT.equals( type ) ?
                     Shard.Type.DEFAULT : Shard.Type.INFLIGHT;
             Shard shard = shardStrategy.selectShard(
-                    queueName, actorSystemFig.getRegionLocal(), shardType, queueMessageId );
+                    queueName, region, shardType, queueMessageId );
             shardId = shard.getShardId();
         } else {
             shardId = shardIdOrNull;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/sharding/impl/ShardCounterSerializationImpl.java
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/sharding/impl/ShardCounterSerializationImpl.java b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/sharding/impl/ShardCounterSerializationImpl.java
index f303f43..276498d 100644
--- a/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/sharding/impl/ShardCounterSerializationImpl.java
+++ b/stack/corepersistence/queue/src/main/java/org/apache/usergrid/persistence/qakka/serialization/sharding/impl/ShardCounterSerializationImpl.java
@@ -94,7 +94,7 @@ public class ShardCounterSerializationImpl implements ShardCounterSerialization
     public ShardCounterSerializationImpl(
         CassandraConfig cassandraConfig, QakkaFig qakkaFig, CassandraClient cassandraClient ) {
         this.cassandraConfig = cassandraConfig;
-        this.maxInMemoryIncrement = qakkaFig.getMaxInMemoryShardCounter();
+        this.maxInMemoryIncrement = qakkaFig.getShardCounterMaxInMemory();
         this.cassandraClient = cassandraClient;
     }
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/test/resources/log4j.properties b/stack/corepersistence/queue/src/test/resources/log4j.properties
index c7d53a3..d542096 100644
--- a/stack/corepersistence/queue/src/test/resources/log4j.properties
+++ b/stack/corepersistence/queue/src/test/resources/log4j.properties
@@ -24,7 +24,6 @@ log4j.appender.stdout.layout.ConversionPattern=%d %p (%t) %c{1} - %m%n
 log4j.logger.org.apache.cassandra=WARN
 log4j.logger.org.glassfish=WARN
 
-log4j.logger.org.apache.usergrid=INFO
-#log4j.logger.org.apache.usergrid.persistence.qakka=DEBUG
-#log4j.logger.org.apache.usergrid.persistence.queue=DEBUG
+log4j.logger.org.apache.usergrid.persistence.qakka=INFO
+log4j.logger.org.apache.usergrid.persistence.queue=INFO
 log4j.logger.org.apache.usergrid.corepersistence.asyncevents=INFO

http://git-wip-us.apache.org/repos/asf/usergrid/blob/f8c3a2dd/stack/corepersistence/queue/src/test/resources/qakka.properties
----------------------------------------------------------------------
diff --git a/stack/corepersistence/queue/src/test/resources/qakka.properties b/stack/corepersistence/queue/src/test/resources/qakka.properties
index 95b2509..464b48d 100644
--- a/stack/corepersistence/queue/src/test/resources/qakka.properties
+++ b/stack/corepersistence/queue/src/test/resources/qakka.properties
@@ -48,8 +48,9 @@ queue.shard.max.size=10
 queue.shard.allocation.check.frequency.millis=100
 queue.shard.allocation.advance.time.millis=200
 
-queue.max.inmemory.shard.counter = 100
-queue.max.inmemory.max.message.changes=3
+# set low for testing purposes
+queue.shard.counter.max-in-memory=10
+queue.message.counter.max-in-memory=10
 
 queue.long.polling.time.millis=2000
 


[03/37] usergrid git commit: fix miked link

Posted by sn...@apache.org.
fix miked link


Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/2298062e
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/2298062e
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/2298062e

Branch: refs/heads/usergrid-1318-queue
Commit: 2298062ea3748df105ab6b54f6de94acf7f87c00
Parents: e7c805f
Author: Dave Johnson <sn...@apache.org>
Authored: Wed Oct 21 09:47:42 2015 -0400
Committer: Dave Johnson <sn...@apache.org>
Committed: Wed Oct 21 09:47:42 2015 -0400

----------------------------------------------------------------------
 content/community/index.html |   2 +-
 website/tmp/checksums        |   4 ++--
 website/tmp/compiled_content |  16 ++++++++--------
 website/tmp/dependencies     |   2 +-
 website/tmp/rule_memory      | Bin 5163 -> 5214 bytes
 5 files changed, 12 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/2298062e/content/community/index.html
----------------------------------------------------------------------
diff --git a/content/community/index.html b/content/community/index.html
index 20da571..2ff02f8 100644
--- a/content/community/index.html
+++ b/content/community/index.html
@@ -403,7 +403,7 @@
 				<p>George Reyes</p>
 			</div>
 			<div class="col-md-2 text-center">
-				<img src="/img/mike_d.jpg" />
+				<img src="/img/miked.jpg" />
 				<p>Mike Dunker</p>
 			</div>
 			<div class="col-md-2 text-center">

http://git-wip-us.apache.org/repos/asf/usergrid/blob/2298062e/website/tmp/checksums
----------------------------------------------------------------------
diff --git a/website/tmp/checksums b/website/tmp/checksums
index 4d256c0..c0cb9ea 100644
--- a/website/tmp/checksums
+++ b/website/tmp/checksums
@@ -1,2 +1,2 @@
-{:	data{X[:	itemI"/bootstrap/bootstrap/:ETI"!YUoAHXSU496Zr8/S3Yd4cLZhRak=;F[;I"/community/;TI"!VZS4Q6jkydy+EZIEH6veYjJdp1U=;F[;I"/css/bootflat-extensions/;TI"!80jNRRDXOQd3Hqq9uFWHOSYjt9k=;F[;I"/css/bootflat-square/;TI"!fmcFRTmmu2E+nlYToVNFUW0hl04=;F[;I"/css/bootflat/;TI"!s3pj2lk1R+G2jYcp8xSmmnJt50A=;F[;I"/css/font-awesome/;TI"!L6HntW7X62auSV5nn6e7TRo8wfw=;F[;I"/css/usergrid-site/;TI"!lbp3e3xKxdPs88+XmfptUlMRDIU=;F[;I"/favicon/;TI"!4smyALZJYBMIjWuCmX1/Vehr0UI=;F[;I"#/font/fontawesome-webfont-eot/;TI"!LRParNNq2Rtr4KLCZp9VGb6tY9g=;F[;I"#/font/fontawesome-webfont-svg/;TI"!Gmc7jPZDpJCaXKhTSFMJBy3e5cA=;F[;I"#/font/fontawesome-webfont-ttf/;TI"!322E1FFOsC3m5lj1+2sOwHw+dCw=;F[;I"$/font/fontawesome-webfont-woff/;TI"!3U314P6TXZ/0x8emFo+a8C3pgn4=;F[;I"/font/FontAwesome/;TI"!YnXnkoHG4sUQGhyM0z710OdnwI4=;F[;I"/img/alberto/;TI"!WoW4bmapTfP3oN7oINZqaUeJs4I=;F[;I"/img/alex/;TI"!jDROtfgu0tIADH4Z95zsw5
 GwhGc=;F[;I""/img/apache_usergrid_favicon/;TI"!J2Ojtxa8TRBuZuEA/FUTZJ0ozwo=;F[;I"%/img/apache_usergrid_logo_white/;TI"!4pdQF1Wd0joMXt/iXYWUtZ6OlTA=;F[;I"+/img/apache_usergrid_logo_white_small/;TI"!L7tcCtaBPz4wZdfc4O06AD9UkdQ=;F[;I"/img/check_flat/default/;TI"!qvFScfk4lldM7QMp2IbTDfCHw7U=;F[;I"/img/dave/;TI"!WVfvg0oAX9OTAcA9Dl8o8AzxwnY=;F[;I"
/img/ed/;TI"!dG6vqkqNYU313WlkeeX70v8uCrI=;F[;I"/img/egg-logo/;TI"!iwunI0vDIE+SDFQv91tI6E/b92c=;F[;I"/img/github/;TI"!+86quf3enEWPUNu7076SgT9kj1g=;F[;I"/img/grey/;TI"!ibXxwHIz35wmSa3oZnTBJzAKsP0=;F[;I"/img/intellij/;TI"!qBB3+rDQ087MfPpWDwGsovdDRUo=;F[;I"/img/jeff/;TI"!RbEYH0iQgQTeREyWmb+7Mq9b02s=;F[;I"/img/michael_r/;TI"!UXLGJNL50qHr77X2s+Ds5crN/JU=;F[;I"/img/mike_d/;TI"!VzkdDF9Raqf/2U4yAAVpRpBLZV0=;F[;I"/img/nate/;TI"!1t1y5YPHyRxyv8iyheJY9JGoLtM=;F[;I"/img/rod/;TI"!/gpAs4yLw63OGpUNgT2s/QpMr4o=;F[;I"/img/scott/;TI"!KGStcjMwSUJ4s4I+8DpbvtR1n
 Dg=;F[;I"/img/shawn/;TI"!RTTqvuh0gBGB5Rz+Ob1BBz68Hl0=;F[;I"/img/stliu/;TI"!0JmFFiQZodPbuEgSCSf1DComGdY=;F[;I"/img/strong/;TI"!0qXHaf494HstngPwMzjsF4z2afk=;F[;I"/img/structure101/;TI"!84sJ4M0JYrZnZchlAl1Ko4Jt6nc=;F[;I"/img/sungju/;TI"!WiOoe/70g/gbPZIkrtr7ZHesTso=;F[;I"/img/tim/;TI"!5XtnJMfzZ7U9pTcq3gkSrsOiZF4=;F[;I"/img/todd/;TI"!mT2XUzdl+Mbo2P67jiS+5tsnCdY=;F[;I"/img/usergrid-logo/;TI"!10Y/fj+M83dqejKO4huPGJBPhVw=;F[;I"/img/usergrid/;TI"!1eQaVjeVq5DMX/duAdIp/MoDFIg=;F[;I"/img/usergrid_160/;TI"!QpEa0XK5auDvfbDNdybsWC1KRUI=;F[;I"/img/usergrid_200/;TI"!EaM2rLslqqUzlEtyOAVfdjADAB0=;F[;I"/img/usergrid_300/;TI"!2ZP0iuH4WwTCqWJa9ViVffqeirI=;F[;I"#/img/usergrid_300_transparent/;TI"!jkfHw6VBZI3BKVNt6fEUZ7eMIeQ=;F[;I"/img/usergrid_400/;TI"!1ac6bNRh8Xr5KFtHaVTFMdHZ1nk=;F[;I"/img/usergrid_800/;TI"!w/tknopar5i/1ee41zQRXB6YejY=;F[;I"/img/usergrid_card/;TI"!khOw34EC1ImbC5ta79uV09Xy8Yc=;
 F[;I"/img/usergrid_logo/;TI"!1vIHlfp7TYm6ESHj9BjOiJZYVc8=;F[;I"/img/usergrid_logo_205_50/;TI"!Cc6CKcz/ZoKhl2XqKCfFaQSPZPU=;F[;I"/img/usergrid_logo_260_50/;TI"!Kr6oc40kf6W/ILfeVPHKR1ROK4w=;F[;I"/img/usergrid_logo_720/;TI"!Ui+Llu18WKpsEA3kyTbQpmbC2W0=;F[;I"/img/usergrid_logo_720p/;TI"!0r8k3EqvGX10rfS553hf2tRYk8k=;F[;I" /img/usergrid_logo_900_200/;TI"!vunhiKHxx9glB+baiwjeEEiJ0KI=;F[;I"/img/usergrid_logo_white/;TI"!RQl3eEzZE2ENkD78JrWFEjtIHCE=;F[;I"/img/usergrid_profile_128/;TI"!tWP/qK2jnI3a01/wfbz9jCW/4Mc=;F[;I"/img/usergrid_profile_256/;TI"!QEfoU4T3e3MexN7pRr3CM0ATlYA=;F[;I"%/img/usergrid_profile_256_white/;TI"!goWISnj/V0r02DQKs3uwnNnMEZ0=;F[;I"'/img/usergrid_profile_512_margins/;TI"!r6mlNE+Krjp7rnW5lIBzv9CqmoQ=;F[;I"$/img/usergrid_profile_64_white/;TI"!9HF0Lw7AGZnDrckK8fkfYoN526k=;F[;I"&/img/usergrid_profile_background/;TI"!29t7fD/KA6refcTIvbOeBmELVVI=;F[;I"!/img/usergrid_screencast_bg/;TI"!tjYC
 DxBt+WvTWCOSmwx6xbx11gc=;F[;I"/img/usergrid_small_100/;TI"!LqF8d8xueb3y7O5O/v7iJ/ND5aE=;F[;I"/img/usergrid_wiki/;TI"!sjc6u4I7Lk8QpK8NXo/YBZKi/2c=;F[;I"/img/yourkit/;TI"!Bwcb+MwxtGuUMqnANgNtzq5X/tw=;F[;I"/;TI"!eqRaBXu3YUN52v2fgsENaugcmk8=;F[;I"/js/bootstrap/;TI"!xTcEiCgdxrEdE1kho/jKCMcWqqc=;F[;I"/js/head/;TI"!KNtvUxuNH9eUiy9JhQLEcuT+q+4=;F[;I"/js/html5shiv/;TI"!bvbw91ergR0oPLK+pMmuATJpYuI=;F[;I"/js/jquery-1/;TI"!s1JOCn7uKtHuvJuscghxN9hq8wQ=;F[;I"/js/jquery/;TI"!ebkz2Hv86oQU1R35xLYNRnl3vvk=;F[;I"/js/respond/;TI"!2f7+RS9dfVUu1S0NNrAdW8ysYDU=;F[;I"/js/usergrid-site/;TI"!6d1mVODYvaFl6qDYA+rtmG46IOI=;F[;I"/releases/;TI"!4T1+U8tBYWuIoFfhL4+UqALf6mk=;F[;I"/static/github-btn/;TI"!Uk0HFXlxNXgV+9V8s9/9i2nr27s=;F[:layoutI"/community/;TI"!Vz6WtgEl8BB6t96FGbzN5hhVc4c=;F[;I"/default/;TI"!k9I6lOQ4z4+nHoc8WQw7P2MoKbY=;F[;I"/docs/;TI"!tmBld5ZHivR/56iHwp6I0LUoPlc=;F[;I"
/footer/;TI"!iL
 zZaL9jsE9qH/1mj/yosIoCfH0=;F[;I"
/header/;TI"!Diks9ApifD4Ze6SOwHw1aW++SOA=;F[:code_snippetI"lib/default.rb;TI"!obtwYGHKsZcksb03nMTPrlOqd5U=;F[;	I"lib/helpers_.rb;TI"!huKhcwQYeoQiIuYmRpgzAwKwrbc=;F:configI"!Sxvusj+Tnw1yNJuSGRkZ7fv3R2Q=;F:
-rulesI"!nclWn6tIAjzNd8AV/It9HpNy9y0=;F:versioni
\ No newline at end of file
+{:	data{Y[:	itemI"/bootstrap/bootstrap/:ETI"!hf/YgyBw2aS/hmm6j1wsR+VyT4U=;F[;I"/community/;TI"!pwtIBwAueAvgp+ybpr/dtGlXi+w=;F[;I"/css/bootflat-extensions/;TI"!El9uPBBBRscq9cLBImCnWGBLPw8=;F[;I"/css/bootflat-square/;TI"!FIjPDScslBmLYlEH1FXSCSmZxEc=;F[;I"/css/bootflat/;TI"!nbCxOCBpqNVm4MEuKdsgB3oMp7c=;F[;I"/css/font-awesome/;TI"!Q0zEdwWKU+fabxlUHI2h/z2JHc8=;F[;I"/css/usergrid-site/;TI"!7fozZEJoGq0PVWSpld8FEJelH2c=;F[;I"/favicon/;TI"!YYb/EVyTF9vMvnaIVyF3smIhIXc=;F[;I"#/font/fontawesome-webfont-eot/;TI"!rwQmrDFEGSEngjHws5F6qwKdifM=;F[;I"#/font/fontawesome-webfont-svg/;TI"!ELwafuoqIedOF0774W0FJ9F8qew=;F[;I"#/font/fontawesome-webfont-ttf/;TI"!9ewmZH7ECLxmKKEqQZdriePxEUU=;F[;I"$/font/fontawesome-webfont-woff/;TI"!DlWhx0n49wPabrQ6XPFQ/OyuI9U=;F[;I"/font/FontAwesome/;TI"!reIHnLVbBy12FugKxw/H1qpPg50=;F[;I"/img/alberto/;TI"!TnCNVw6+obWrw3gfYksMToac4lA=;F[;I"/img/alex/;TI"!W4YEQ4PVPTtfFOleXNMAv5
 +/3EM=;F[;I""/img/apache_usergrid_favicon/;TI"!Sp71K78dKnXoDQtwz679moyQkg4=;F[;I"%/img/apache_usergrid_logo_white/;TI"!RZIHSuv2iLmcdfHve7+pfY0BPlE=;F[;I"+/img/apache_usergrid_logo_white_small/;TI"!Vw8FHysYg1IafFOIx/4R8T0Z1IM=;F[;I"/img/check_flat/default/;TI"!a+sCaKZzMiI1EX7aJvz/vgkdmu8=;F[;I"/img/dave/;TI"!32nef8XAQROAK/A9/xunlYr+B7E=;F[;I"
/img/ed/;TI"!qWvLa4sDbcvg7f+XglIFasknFe0=;F[;I"/img/egg-logo/;TI"!Spu569g5GTQNd3Tv0b2e9efqHIQ=;F[;I"/img/github/;TI"!AF3rVcD2izVZb/HZYsiqTQ5/GJs=;F[;I"/img/grey/;TI"!Tf4JrWeo5wYuoDaUK2SePI4UUVg=;F[;I"/img/intellij/;TI"!f4Yl0vEdOjIrNQ26imxPk8axpfM=;F[;I"/img/jeff/;TI"!fhKnLNFaHzbEaWUzDnPpN4GA9Kg=;F[;I"/img/michael_r/;TI"!lJRIM6pzTiRHDVsIjdfAKGqXsP8=;F[;I"/img/mike_d/;TI"!VzkdDF9Raqf/2U4yAAVpRpBLZV0=;F[;I"/img/nate/;TI"!Nrxe8GMmbasJx0NJnNSrzQFT+zc=;F[;I"/img/rod/;TI"!uwPmqQkcBUeg8dCnXe5YzmFBAh4=;F[;I"/img/scott/;TI"!N57YtkcM/W6sa4opxUPFWp+SE
 Sk=;F[;I"/img/shawn/;TI"!/rWJyqerGDsq9zg6KYT0JGFW3Hs=;F[;I"/img/stliu/;TI"!Clc3kTGRrWk3lr9ALrliMqrdziM=;F[;I"/img/strong/;TI"!twgQxndqHDbpNQrEEy4hQfRMkuU=;F[;I"/img/structure101/;TI"!RtUPu5haD8sQbtSR0JFh9NbHE20=;F[;I"/img/sungju/;TI"!IHJmc4BdEKtDL2kyr9hc0uVHDMs=;F[;I"/img/tim/;TI"!IalmCGc5Uj9gMzoAHmEdnaFHj84=;F[;I"/img/todd/;TI"!U0AH/iwc+f00PfQzO0gxzceCft4=;F[;I"/img/usergrid-logo/;TI"!O06aJsGIzRvVdCDyDbPHg4iy1xg=;F[;I"/img/usergrid/;TI"!+U55EsvAWhkeQ5RXvmclZVtMfOc=;F[;I"/img/usergrid_160/;TI"!eDjNVa5dz5Oz9AT0+12S+K4rxsw=;F[;I"/img/usergrid_200/;TI"!+Fp+4fhOuTEJaK3ccAxyOE5vzvE=;F[;I"/img/usergrid_300/;TI"!35vgPh4CQIrBEYVfA7oXoMQcDY0=;F[;I"#/img/usergrid_300_transparent/;TI"!AhTlthzJ6i74BJiIyh5J+TCQZF0=;F[;I"/img/usergrid_400/;TI"!vvPNbc3L3rvMpgbjF5GsMHAQeAM=;F[;I"/img/usergrid_800/;TI"!VdqSNUFSWAsG9QfFrjBZ2plJVMU=;F[;I"/img/usergrid_card/;TI"!E/rBsCDhlLKirQQlhMXe10fG6cU=;
 F[;I"/img/usergrid_logo/;TI"!9YwPY53bXRCafHsxKVVox04TQQY=;F[;I"/img/usergrid_logo_205_50/;TI"!2bSy1Cy1qZkktkzXgI2MvffsODs=;F[;I"/img/usergrid_logo_260_50/;TI"!6BS+jO0FiIITPYRkGBOshKSdWkw=;F[;I"/img/usergrid_logo_720/;TI"!c0mNtdlORdkxUs1X9koZhELRqTY=;F[;I"/img/usergrid_logo_720p/;TI"!O9RgZbjmG85reUPIFXLWhA0o1S4=;F[;I" /img/usergrid_logo_900_200/;TI"!wH8a4COZz1AUCgjKGKg2U3ipO70=;F[;I"/img/usergrid_logo_white/;TI"!EDMI+g8raJmM/dyPqciNGpxioHo=;F[;I"/img/usergrid_profile_128/;TI"!zzJ0VFSNbH1wvvovqjs1Xloptyo=;F[;I"/img/usergrid_profile_256/;TI"!T/8bSAN1lQ9/C+KIXJtu8TXMEnQ=;F[;I"%/img/usergrid_profile_256_white/;TI"!We+xA3nTlGKI81diF7748gj5/Cc=;F[;I"'/img/usergrid_profile_512_margins/;TI"!LgkCerHcdx/XCVs0Q7kI5WSn/Tk=;F[;I"$/img/usergrid_profile_64_white/;TI"!I/hYFotRDmwrGWQLEPKdGuioz90=;F[;I"&/img/usergrid_profile_background/;TI"!D66EaLemrW31c6O94GGe54JFhgQ=;F[;I"!/img/usergrid_screencast_bg/;TI"!e+HF
 DaRudTDPD2/yIKbUSH8KUpc=;F[;I"/img/usergrid_small_100/;TI"!oV130VnfxyXQ03LDRN2gqxWqcIM=;F[;I"/img/usergrid_wiki/;TI"!gWgcQPtQfaWTccJaaC0eAICz39E=;F[;I"/img/yourkit/;TI"!RG8GZ8bvX2BH8CZZwxS7S0xO8+U=;F[;I"/;TI"!nWgrmh1l8TOQf6K4P4O+3E8OLys=;F[;I"/js/bootstrap/;TI"!oK9sfjf8QQoLsae42mfdc2+3nA4=;F[;I"/js/head/;TI"!h+whrBuR0oxNl9lygBr3lE3g9DM=;F[;I"/js/html5shiv/;TI"!5vvy+hplkMV1o6pd96rnceetUWE=;F[;I"/js/jquery-1/;TI"!hXdICqLLXAh4tvm2i3DGEd27F+M=;F[;I"/js/jquery/;TI"!D9p02/YhgH3GCU3vz1FrBeQrdZM=;F[;I"/js/respond/;TI"!Lu6CdOuBNSlbYj4Asn9qRmxdGxk=;F[;I"/js/usergrid-site/;TI"!8Pw2vvKcCVTM6XFwAUzapKLc+Vk=;F[;I"/releases/;TI"!hZJ7ecgrD3mm9cR/6Sr28sFRGvw=;F[;I"/static/github-btn/;TI"!t1ga1ZWggUzYrqyvU1PDqfjhd6w=;F[:layoutI"/community/;TI"!Vz6WtgEl8BB6t96FGbzN5hhVc4c=;F[;I"/default/;TI"!k9I6lOQ4z4+nHoc8WQw7P2MoKbY=;F[;I"/docs/;TI"!tmBld5ZHivR/56iHwp6I0LUoPlc=;F[;I"
/footer/;TI"!iL
 zZaL9jsE9qH/1mj/yosIoCfH0=;F[;I"
/header/;TI"!Diks9ApifD4Ze6SOwHw1aW++SOA=;F[:code_snippetI"lib/default.rb;TI"!obtwYGHKsZcksb03nMTPrlOqd5U=;F[;	I"lib/helpers_.rb;TI"!huKhcwQYeoQiIuYmRpgzAwKwrbc=;F:configI"!Sxvusj+Tnw1yNJuSGRkZ7fv3R2Q=;F:
+rulesI"!nclWn6tIAjzNd8AV/It9HpNy9y0=;F[;I"/img/miked/;TI"!77uUleHKLebnSrPvTm7rlv5I/NE=;F:versioni
\ No newline at end of file