...`\n // only `tag.type === 'DOUBLE'` allowed (by earlier validation)\n return BlazeTools.EmitCode('function () { return ' +\n self.codeGenMustache(tag.path, tag.args, 'attrMustache')\n + '; }');\n } else {\n if (tag.type === 'DOUBLE' || tag.type === 'TRIPLE') {\n var code = self.codeGenMustache(tag.path, tag.args);\n if (tag.type === 'TRIPLE') {\n code = 'Spacebars.makeRaw(' + code + ')';\n }\n if (tag.position !== HTMLTools.TEMPLATE_TAG_POSITION.IN_ATTRIBUTE) {\n // Reactive attributes are already wrapped in a function,\n // and there's no fine-grained reactivity.\n // Anywhere else, we need to create a View.\n code = 'Blaze.View(\"lookup:' + tag.path.join('.') + '\", ' +\n 'function () { return ' + code + '; })';\n }\n return BlazeTools.EmitCode(code);\n } else if (tag.type === 'INCLUSION' || tag.type === 'BLOCKOPEN') {\n var path = tag.path;\n\n if (tag.type === 'BLOCKOPEN' &&\n builtInBlockHelpers.hasOwnProperty(path[0])) {\n // if, unless, with, each.\n //\n // If someone tries to do `{{> if}}`, we don't\n // get here, but an error is thrown when we try to codegen the path.\n\n // Note: If we caught these errors earlier, while scanning, we'd be able to\n // provide nice line numbers.\n if (path.length > 1)\n throw new Error(\"Unexpected dotted path beginning with \" + path[0]);\n if (! tag.args.length)\n throw new Error(\"#\" + path[0] + \" requires an argument\");\n\n // `args` must exist (tag.args.length > 0)\n var dataCode = self.codeGenInclusionDataFunc(tag.args) || 'null';\n // `content` must exist\n var contentBlock = (('content' in tag) ?\n self.codeGenBlock(tag.content) : null);\n // `elseContent` may not exist\n var elseContentBlock = (('elseContent' in tag) ?\n self.codeGenBlock(tag.elseContent) : null);\n\n var callArgs = [dataCode, contentBlock];\n if (elseContentBlock)\n callArgs.push(elseContentBlock);\n\n return BlazeTools.EmitCode(\n builtInBlockHelpers[path[0]] + '(' + callArgs.join(', ') + ')');\n\n } else {\n var compCode = self.codeGenPath(path, {lookupTemplate: true});\n if (path.length > 1) {\n // capture reactivity\n compCode = 'function () { return Spacebars.call(' + compCode +\n '); }';\n }\n\n var dataCode = self.codeGenInclusionDataFunc(tag.args);\n var content = (('content' in tag) ?\n self.codeGenBlock(tag.content) : null);\n var elseContent = (('elseContent' in tag) ?\n self.codeGenBlock(tag.elseContent) : null);\n\n var includeArgs = [compCode];\n if (content) {\n includeArgs.push(content);\n if (elseContent)\n includeArgs.push(elseContent);\n }\n\n var includeCode =\n 'Spacebars.include(' + includeArgs.join(', ') + ')';\n\n // calling convention compat -- set the data context around the\n // entire inclusion, so that if the name of the inclusion is\n // a helper function, it gets the data context in `this`.\n // This makes for a pretty confusing calling convention --\n // In `{{#foo bar}}`, `foo` is evaluated in the context of `bar`\n // -- but it's what we shipped for 0.8.0. The rationale is that\n // `{{#foo bar}}` is sugar for `{{#with bar}}{{#foo}}...`.\n if (dataCode) {\n includeCode =\n 'Blaze._TemplateWith(' + dataCode + ', function () { return ' +\n includeCode + '; })';\n }\n\n // XXX BACK COMPAT - UI is the old name, Template is the new\n if ((path[0] === 'UI' || path[0] === 'Template') &&\n (path[1] === 'contentBlock' || path[1] === 'elseBlock')) {\n // Call contentBlock and elseBlock in the appropriate scope\n includeCode = 'Blaze._InOuterTemplateScope(view, function () { return '\n + includeCode + '; })';\n }\n\n return BlazeTools.EmitCode(includeCode);\n }\n } else if (tag.type === 'ESCAPE') {\n return tag.value;\n } else {\n // Can't get here; TemplateTag validation should catch any\n // inappropriate tag types that might come out of the parser.\n throw new Error(\"Unexpected template tag type: \" + tag.type);\n }\n }\n },\n\n // `path` is an array of at least one string.\n //\n // If `path.length > 1`, the generated code may be reactive\n // (i.e. it may invalidate the current computation).\n //\n // No code is generated to call the result if it's a function.\n //\n // Options:\n //\n // - lookupTemplate {Boolean} If true, generated code also looks in\n // the list of templates. (After helpers, before data context).\n // Used when generating code for `{{> foo}}` or `{{#foo}}`. Only\n // used for non-dotted paths.\n codeGenPath: function (path, opts) {\n if (builtInBlockHelpers.hasOwnProperty(path[0]))\n throw new Error(\"Can't use the built-in '\" + path[0] + \"' here\");\n // Let `{{#if Template.contentBlock}}` check whether this template was\n // invoked via inclusion or as a block helper, in addition to supporting\n // `{{> Template.contentBlock}}`.\n // XXX BACK COMPAT - UI is the old name, Template is the new\n if (path.length >= 2 &&\n (path[0] === 'UI' || path[0] === 'Template')\n && builtInTemplateMacros.hasOwnProperty(path[1])) {\n if (path.length > 2)\n throw new Error(\"Unexpected dotted path beginning with \" +\n path[0] + '.' + path[1]);\n return builtInTemplateMacros[path[1]];\n }\n\n var firstPathItem = BlazeTools.toJSLiteral(path[0]);\n var lookupMethod = 'lookup';\n if (opts && opts.lookupTemplate && path.length === 1)\n lookupMethod = 'lookupTemplate';\n var code = 'view.' + lookupMethod + '(' + firstPathItem + ')';\n\n if (path.length > 1) {\n code = 'Spacebars.dot(' + code + ', ' +\n _.map(path.slice(1), BlazeTools.toJSLiteral).join(', ') + ')';\n }\n\n return code;\n },\n\n // Generates code for an `[argType, argValue]` argument spec,\n // ignoring the third element (keyword argument name) if present.\n //\n // The resulting code may be reactive (in the case of a PATH of\n // more than one element) and is not wrapped in a closure.\n codeGenArgValue: function (arg) {\n var self = this;\n\n var argType = arg[0];\n var argValue = arg[1];\n\n var argCode;\n switch (argType) {\n case 'STRING':\n case 'NUMBER':\n case 'BOOLEAN':\n case 'NULL':\n argCode = BlazeTools.toJSLiteral(argValue);\n break;\n case 'PATH':\n argCode = self.codeGenPath(argValue);\n break;\n default:\n // can't get here\n throw new Error(\"Unexpected arg type: \" + argType);\n }\n\n return argCode;\n },\n\n // Generates a call to `Spacebars.fooMustache` on evaluated arguments.\n // The resulting code has no function literals and must be wrapped in\n // one for fine-grained reactivity.\n codeGenMustache: function (path, args, mustacheType) {\n var self = this;\n\n var nameCode = self.codeGenPath(path);\n var argCode = self.codeGenMustacheArgs(args);\n var mustache = (mustacheType || 'mustache');\n\n return 'Spacebars.' + mustache + '(' + nameCode +\n (argCode ? ', ' + argCode.join(', ') : '') + ')';\n },\n\n // returns: array of source strings, or null if no\n // args at all.\n codeGenMustacheArgs: function (tagArgs) {\n var self = this;\n\n var kwArgs = null; // source -> source\n var args = null; // [source]\n\n // tagArgs may be null\n _.each(tagArgs, function (arg) {\n var argCode = self.codeGenArgValue(arg);\n\n if (arg.length > 2) {\n // keyword argument (represented as [type, value, name])\n kwArgs = (kwArgs || {});\n kwArgs[arg[2]] = argCode;\n } else {\n // positional argument\n args = (args || []);\n args.push(argCode);\n }\n });\n\n // put kwArgs in options dictionary at end of args\n if (kwArgs) {\n args = (args || []);\n args.push('Spacebars.kw(' + makeObjectLiteral(kwArgs) + ')');\n }\n\n return args;\n },\n\n codeGenBlock: function (content) {\n return SpacebarsCompiler.codeGen(content);\n },\n\n codeGenInclusionDataFunc: function (args) {\n var self = this;\n\n var dataFuncCode = null;\n\n if (! args.length) {\n // e.g. `{{#foo}}`\n return null;\n } else if (args[0].length === 3) {\n // keyword arguments only, e.g. `{{> point x=1 y=2}}`\n var dataProps = {};\n _.each(args, function (arg) {\n var argKey = arg[2];\n dataProps[argKey] = 'Spacebars.call(' + self.codeGenArgValue(arg) + ')';\n });\n dataFuncCode = makeObjectLiteral(dataProps);\n } else if (args[0][0] !== 'PATH') {\n // literal first argument, e.g. `{{> foo \"blah\"}}`\n //\n // tag validation has confirmed, in this case, that there is only\n // one argument (`args.length === 1`)\n dataFuncCode = self.codeGenArgValue(args[0]);\n } else if (args.length === 1) {\n // one argument, must be a PATH\n dataFuncCode = 'Spacebars.call(' + self.codeGenPath(args[0][1]) + ')';\n } else {\n // Multiple positional arguments; treat them as a nested\n // \"data mustache\"\n dataFuncCode = self.codeGenMustache(args[0][1], args.slice(1),\n 'dataMustache');\n }\n\n return 'function () { return ' + dataFuncCode + '; }';\n }\n\n});\n","\nSpacebarsCompiler.parse = function (input) {\n\n var tree = HTMLTools.parseFragment(\n input,\n { getTemplateTag: TemplateTag.parseCompleteTag });\n\n return tree;\n};\n\nSpacebarsCompiler.compile = function (input, options) {\n var tree = SpacebarsCompiler.parse(input);\n return SpacebarsCompiler.codeGen(tree, options);\n};\n\nSpacebarsCompiler._TemplateTagReplacer = HTML.TransformingVisitor.extend();\nSpacebarsCompiler._TemplateTagReplacer.def({\n visitObject: function (x) {\n if (x instanceof HTMLTools.TemplateTag) {\n\n // Make sure all TemplateTags in attributes have the right\n // `.position` set on them. This is a bit of a hack\n // (we shouldn't be mutating that here), but it allows\n // cleaner codegen of \"synthetic\" attributes like TEXTAREA's\n // \"value\", where the template tags were originally not\n // in an attribute.\n if (this.inAttributeValue)\n x.position = HTMLTools.TEMPLATE_TAG_POSITION.IN_ATTRIBUTE;\n\n return this.codegen.codeGenTemplateTag(x);\n }\n\n return HTML.TransformingVisitor.prototype.visitObject.call(this, x);\n },\n visitAttributes: function (attrs) {\n if (attrs instanceof HTMLTools.TemplateTag)\n return this.codegen.codeGenTemplateTag(attrs);\n\n // call super (e.g. for case where `attrs` is an array)\n return HTML.TransformingVisitor.prototype.visitAttributes.call(this, attrs);\n },\n visitAttribute: function (name, value, tag) {\n this.inAttributeValue = true;\n var result = this.visit(value);\n this.inAttributeValue = false;\n\n if (result !== value) {\n // some template tags must have been replaced, because otherwise\n // we try to keep things `===` when transforming. Wrap the code\n // in a function as per the rules. You can't have\n // `{id: Blaze.View(...)}` as an attributes dict because the View\n // would be rendered more than once; you need to wrap it in a function\n // so that it's a different View each time.\n return BlazeTools.EmitCode(this.codegen.codeGenBlock(result));\n }\n return result;\n }\n});\n\nSpacebarsCompiler.codeGen = function (parseTree, options) {\n // is this a template, rather than a block passed to\n // a block helper, say\n var isTemplate = (options && options.isTemplate);\n var isBody = (options && options.isBody);\n\n var tree = parseTree;\n\n // The flags `isTemplate` and `isBody` are kind of a hack.\n if (isTemplate || isBody) {\n // optimizing fragments would require being smarter about whether we are\n // in a TEXTAREA, say.\n tree = SpacebarsCompiler.optimize(tree);\n }\n\n var codegen = new SpacebarsCompiler.CodeGen;\n tree = (new SpacebarsCompiler._TemplateTagReplacer(\n {codegen: codegen})).visit(tree);\n\n var code = '(function () { ';\n if (isTemplate || isBody) {\n code += 'var view = this; ';\n }\n code += 'return ';\n code += BlazeTools.toJS(tree);\n code += '; })';\n\n code = SpacebarsCompiler._beautify(code);\n\n return code;\n};\n\nSpacebarsCompiler._beautify = function (code) {\n if (Package.minifiers && Package.minifiers.UglifyJSMinify) {\n var result = Package.minifiers.UglifyJSMinify(\n code,\n { fromString: true,\n mangle: false,\n compress: false,\n output: { beautify: true,\n indent_level: 2,\n width: 80 } });\n var output = result.code;\n // Uglify interprets our expression as a statement and may add a semicolon.\n // Strip trailing semicolon.\n output = output.replace(/;$/, '');\n return output;\n } else {\n // don't actually beautify; no UglifyJS\n return code;\n }\n};\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/spacebars.js b/web-app/.meteor/local/build/programs/server/packages/spacebars.js
deleted file mode 100644
index d022b6f..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/spacebars.js
+++ /dev/null
@@ -1,316 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var HTML = Package.htmljs.HTML;
-var Tracker = Package.tracker.Tracker;
-var Deps = Package.tracker.Deps;
-var Blaze = Package.blaze.Blaze;
-var UI = Package.blaze.UI;
-var Handlebars = Package.blaze.Handlebars;
-var ObserveSequence = Package['observe-sequence'].ObserveSequence;
-var _ = Package.underscore._;
-
-/* Package-scope variables */
-var Spacebars;
-
-(function () {
-
-///////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/spacebars/spacebars-runtime.js //
-// //
-///////////////////////////////////////////////////////////////////////////////////
- //
-Spacebars = {}; // 1
- // 2
-var tripleEquals = function (a, b) { return a === b; }; // 3
- // 4
-Spacebars.include = function (templateOrFunction, contentFunc, elseFunc) { // 5
- if (! templateOrFunction) // 6
- return null; // 7
- // 8
- if (typeof templateOrFunction !== 'function') { // 9
- var template = templateOrFunction; // 10
- if (! Blaze.isTemplate(template)) // 11
- throw new Error("Expected template or null, found: " + template); // 12
- return templateOrFunction.constructView(contentFunc, elseFunc); // 13
- } // 14
- // 15
- var templateVar = Blaze.ReactiveVar(null, tripleEquals); // 16
- var view = Blaze.View('Spacebars.include', function () { // 17
- var template = templateVar.get(); // 18
- if (template === null) // 19
- return null; // 20
- // 21
- if (! Blaze.isTemplate(template)) // 22
- throw new Error("Expected template or null, found: " + template); // 23
- // 24
- return template.constructView(contentFunc, elseFunc); // 25
- }); // 26
- view.__templateVar = templateVar; // 27
- view.onViewCreated(function () { // 28
- this.autorun(function () { // 29
- templateVar.set(templateOrFunction()); // 30
- }); // 31
- }); // 32
- // 33
- return view; // 34
-}; // 35
- // 36
-// Executes `{{foo bar baz}}` when called on `(foo, bar, baz)`. // 37
-// If `bar` and `baz` are functions, they are called before // 38
-// `foo` is called on them. // 39
-// // 40
-// This is the shared part of Spacebars.mustache and // 41
-// Spacebars.attrMustache, which differ in how they post-process the // 42
-// result. // 43
-Spacebars.mustacheImpl = function (value/*, args*/) { // 44
- var args = arguments; // 45
- // if we have any arguments (pos or kw), add an options argument // 46
- // if there isn't one. // 47
- if (args.length > 1) { // 48
- var kw = args[args.length - 1]; // 49
- if (! (kw instanceof Spacebars.kw)) { // 50
- kw = Spacebars.kw(); // 51
- // clone arguments into an actual array, then push // 52
- // the empty kw object. // 53
- args = Array.prototype.slice.call(arguments); // 54
- args.push(kw); // 55
- } else { // 56
- // For each keyword arg, call it if it's a function // 57
- var newHash = {}; // 58
- for (var k in kw.hash) { // 59
- var v = kw.hash[k]; // 60
- newHash[k] = (typeof v === 'function' ? v() : v); // 61
- } // 62
- args[args.length - 1] = Spacebars.kw(newHash); // 63
- } // 64
- } // 65
- // 66
- return Spacebars.call.apply(null, args); // 67
-}; // 68
- // 69
-Spacebars.mustache = function (value/*, args*/) { // 70
- var result = Spacebars.mustacheImpl.apply(null, arguments); // 71
- // 72
- if (result instanceof Spacebars.SafeString) // 73
- return HTML.Raw(result.toString()); // 74
- else // 75
- // map `null`, `undefined`, and `false` to null, which is important // 76
- // so that attributes with nully values are considered absent. // 77
- // stringify anything else (e.g. strings, booleans, numbers including 0). // 78
- return (result == null || result === false) ? null : String(result); // 79
-}; // 80
- // 81
-Spacebars.attrMustache = function (value/*, args*/) { // 82
- var result = Spacebars.mustacheImpl.apply(null, arguments); // 83
- // 84
- if (result == null || result === '') { // 85
- return null; // 86
- } else if (typeof result === 'object') { // 87
- return result; // 88
- } else if (typeof result === 'string' && HTML.isValidAttributeName(result)) { // 89
- var obj = {}; // 90
- obj[result] = ''; // 91
- return obj; // 92
- } else { // 93
- throw new Error("Expected valid attribute name, '', null, or object"); // 94
- } // 95
-}; // 96
- // 97
-Spacebars.dataMustache = function (value/*, args*/) { // 98
- var result = Spacebars.mustacheImpl.apply(null, arguments); // 99
- // 100
- return result; // 101
-}; // 102
- // 103
-// Idempotently wrap in `HTML.Raw`. // 104
-// // 105
-// Called on the return value from `Spacebars.mustache` in case the // 106
-// template uses triple-stache (`{{{foo bar baz}}}`). // 107
-Spacebars.makeRaw = function (value) { // 108
- if (value == null) // null or undefined // 109
- return null; // 110
- else if (value instanceof HTML.Raw) // 111
- return value; // 112
- else // 113
- return HTML.Raw(value); // 114
-}; // 115
- // 116
-// If `value` is a function, called it on the `args`, after // 117
-// evaluating the args themselves (by calling them if they are // 118
-// functions). Otherwise, simply return `value` (and assert that // 119
-// there are no args). // 120
-Spacebars.call = function (value/*, args*/) { // 121
- if (typeof value === 'function') { // 122
- // evaluate arguments if they are functions (by calling them) // 123
- var newArgs = []; // 124
- for (var i = 1; i < arguments.length; i++) { // 125
- var arg = arguments[i]; // 126
- newArgs[i-1] = (typeof arg === 'function' ? arg() : arg); // 127
- } // 128
- // 129
- return value.apply(null, newArgs); // 130
- } else { // 131
- if (arguments.length > 1) // 132
- throw new Error("Can't call non-function: " + value); // 133
- // 134
- return value; // 135
- } // 136
-}; // 137
- // 138
-// Call this as `Spacebars.kw({ ... })`. The return value // 139
-// is `instanceof Spacebars.kw`. // 140
-Spacebars.kw = function (hash) { // 141
- if (! (this instanceof Spacebars.kw)) // 142
- // called without new; call with new // 143
- return new Spacebars.kw(hash); // 144
- // 145
- this.hash = hash || {}; // 146
-}; // 147
- // 148
-// Call this as `Spacebars.SafeString("some HTML")`. The return value // 149
-// is `instanceof Spacebars.SafeString` (and `instanceof Handlebars.SafeString). // 150
-Spacebars.SafeString = function (html) { // 151
- if (! (this instanceof Spacebars.SafeString)) // 152
- // called without new; call with new // 153
- return new Spacebars.SafeString(html); // 154
- // 155
- return new Handlebars.SafeString(html); // 156
-}; // 157
-Spacebars.SafeString.prototype = Handlebars.SafeString.prototype; // 158
- // 159
-// `Spacebars.dot(foo, "bar", "baz")` performs a special kind // 160
-// of `foo.bar.baz` that allows safe indexing of `null` and // 161
-// indexing of functions (which calls the function). If the // 162
-// result is a function, it is always a bound function (e.g. // 163
-// a wrapped version of `baz` that always uses `foo.bar` as // 164
-// `this`). // 165
-// // 166
-// In `Spacebars.dot(foo, "bar")`, `foo` is assumed to be either // 167
-// a non-function value or a "fully-bound" function wrapping a value, // 168
-// where fully-bound means it takes no arguments and ignores `this`. // 169
-// // 170
-// `Spacebars.dot(foo, "bar")` performs the following steps: // 171
-// // 172
-// * If `foo` is falsy, return `foo`. // 173
-// // 174
-// * If `foo` is a function, call it (set `foo` to `foo()`). // 175
-// // 176
-// * If `foo` is falsy now, return `foo`. // 177
-// // 178
-// * Return `foo.bar`, binding it to `foo` if it's a function. // 179
-Spacebars.dot = function (value, id1/*, id2, ...*/) { // 180
- if (arguments.length > 2) { // 181
- // Note: doing this recursively is probably less efficient than // 182
- // doing it in an iterative loop. // 183
- var argsForRecurse = []; // 184
- argsForRecurse.push(Spacebars.dot(value, id1)); // 185
- argsForRecurse.push.apply(argsForRecurse, // 186
- Array.prototype.slice.call(arguments, 2)); // 187
- return Spacebars.dot.apply(null, argsForRecurse); // 188
- } // 189
- // 190
- if (typeof value === 'function') // 191
- value = value(); // 192
- // 193
- if (! value) // 194
- return value; // falsy, don't index, pass through // 195
- // 196
- var result = value[id1]; // 197
- if (typeof result !== 'function') // 198
- return result; // 199
- // `value[id1]` (or `value()[id1]`) is a function. // 200
- // Bind it so that when called, `value` will be placed in `this`. // 201
- return function (/*arguments*/) { // 202
- return result.apply(value, arguments); // 203
- }; // 204
-}; // 205
- // 206
-// Spacebars.With implements the conditional logic of rendering // 207
-// the `{{else}}` block if the argument is falsy. It combines // 208
-// a Blaze.If with a Blaze.With (the latter only in the truthy // 209
-// case, since the else block is evaluated without entering // 210
-// a new data context). // 211
-Spacebars.With = function (argFunc, contentFunc, elseFunc) { // 212
- var argVar = new Blaze.ReactiveVar; // 213
- var view = Blaze.View('Spacebars_with', function () { // 214
- return Blaze.If(function () { return argVar.get(); }, // 215
- function () { return Blaze.With(function () { // 216
- return argVar.get(); }, contentFunc); }, // 217
- elseFunc); // 218
- }); // 219
- view.onViewCreated(function () { // 220
- this.autorun(function () { // 221
- argVar.set(argFunc()); // 222
- // 223
- // This is a hack so that autoruns inside the body // 224
- // of the #with get stopped sooner. It reaches inside // 225
- // our ReactiveVar to access its dep. // 226
- // 227
- Tracker.onInvalidate(function () { // 228
- argVar.dep.changed(); // 229
- }); // 230
- // 231
- // Take the case of `{{#with A}}{{B}}{{/with}}`. The goal // 232
- // is to not re-render `B` if `A` changes to become falsy // 233
- // and `B` is simultaneously invalidated. // 234
- // // 235
- // A series of autoruns are involved: // 236
- // // 237
- // 1. This autorun (argument to Spacebars.With) // 238
- // 2. Argument to Blaze.If // 239
- // 3. Blaze.If view re-render // 240
- // 4. Argument to Blaze.With // 241
- // 5. The template tag `{{B}}` // 242
- // // 243
- // When (3) is invalidated, it immediately stops (4) and (5) // 244
- // because of a Tracker.onInvalidate built into materializeView. // 245
- // (When a View's render method is invalidated, it immediately // 246
- // tears down all the subviews, via a Tracker.onInvalidate much // 247
- // like this one. // 248
- // // 249
- // Suppose `A` changes to become falsy, and `B` changes at the // 250
- // same time (i.e. without an intervening flush). // 251
- // Without the code above, this happens: // 252
- // // 253
- // - (1) and (5) are invalidated. // 254
- // - (1) runs, invalidating (2) and (4). // 255
- // - (5) runs. // 256
- // - (2) runs, invalidating (3), stopping (4) and (5). // 257
- // // 258
- // With the code above: // 259
- // // 260
- // - (1) and (5) are invalidated, invalidating (2) and (4). // 261
- // - (1) runs. // 262
- // - (2) runs, invalidating (3), stopping (4) and (5). // 263
- // // 264
- // If the re-run of (5) is originally enqueued before (1), all // 265
- // bets are off, but typically that doesn't seem to be the // 266
- // case. Anyway, doing this is always better than not doing it, // 267
- // because it might save a bunch of DOM from being updated // 268
- // needlessly. // 269
- }); // 270
- }); // 271
- // 272
- return view; // 273
-}; // 274
- // 275
-// XXX COMPAT WITH 0.9.0 // 276
-Spacebars.TemplateWith = Blaze._TemplateWith; // 277
- // 278
-///////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.spacebars = {
- Spacebars: Spacebars
-};
-
-})();
-
-//# sourceMappingURL=spacebars.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/spacebars.js.map b/web-app/.meteor/local/build/programs/server/packages/spacebars.js.map
deleted file mode 100644
index a26f9f7..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/spacebars.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["spacebars/spacebars-runtime.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,e;;AAEA,uD;;AAEA,0E;AACA,2B;AACA,gB;;AAEA,iD;AACA,sC;AACA,qC;AACA,uE;AACA,mE;AACA,G;;AAEA,0D;AACA,0D;AACA,qC;AACA,0B;AACA,kB;;AAEA,qC;AACA,uE;;AAEA,yD;AACA,K;AACA,mC;AACA,kC;AACA,8B;AACA,4C;AACA,O;AACA,K;;AAEA,c;AACA,E;;AAEA,+D;AACA,2D;AACA,2B;AACA,E;AACA,oD;AACA,oE;AACA,U;AACA,qD;AACA,uB;AACA,kE;AACA,wB;AACA,wB;AACA,mC;AACA,yC;AACA,0B;AACA,wD;AACA,6B;AACA,mD;AACA,oB;AACA,Y;AACA,yD;AACA,uB;AACA,8B;AACA,2B;AACA,yD;AACA,O;AACA,oD;AACA,K;AACA,G;;AAEA,0C;AACA,E;;AAEA,iD;AACA,6D;;AAEA,6C;AACA,uC;AACA,M;AACA,uE;AACA,kE;AACA,6E;AACA,wE;AACA,E;;AAEA,qD;AACA,6D;;AAEA,wC;AACA,gB;AACA,0C;AACA,kB;AACA,+E;AACA,iB;AACA,qB;AACA,e;AACA,U;AACA,0E;AACA,G;AACA,E;;AAEA,qD;AACA,6D;;AAEA,gB;AACA,E;;AAEA,mC;AACA,E;AACA,mE;AACA,qD;AACA,sC;AACA,yC;AACA,gB;AACA,qC;AACA,iB;AACA,M;AACA,2B;AACA,E;;AAEA,2D;AACA,8D;AACA,iE;AACA,sB;AACA,6C;AACA,oC;AACA,iE;AACA,qB;AACA,gD;AACA,6B;AACA,+D;AACA,K;;AAEA,sC;AACA,U;AACA,6B;AACA,2D;;AAEA,iB;AACA,G;AACA,E;;AAEA,0D;AACA,gC;AACA,gC;AACA,uC;AACA,wC;AACA,kC;;AAEA,yB;AACA,E;;AAEA,sE;AACA,gF;AACA,wC;AACA,+C;AACA,wC;AACA,0C;;AAEA,yC;AACA,E;AACA,iE;;AAEA,6D;AACA,2D;AACA,4D;AACA,4D;AACA,2D;AACA,W;AACA,E;AACA,gE;AACA,qE;AACA,oE;AACA,E;AACA,4D;AACA,E;AACA,qC;AACA,E;AACA,4D;AACA,E;AACA,yC;AACA,E;AACA,8D;AACA,qD;AACA,6B;AACA,mE;AACA,qC;AACA,4B;AACA,mD;AACA,6C;AACA,wE;AACA,qD;AACA,G;;AAEA,kC;AACA,oB;;AAEA,c;AACA,qD;;AAEA,0B;AACA,mC;AACA,kB;AACA,oD;AACA,mE;AACA,mC;AACA,0C;AACA,I;AACA,E;;AAEA,+D;AACA,8D;AACA,8D;AACA,2D;AACA,uB;AACA,4D;AACA,qC;AACA,uD;AACA,yD;AACA,iE;AACA,8D;AACA,8B;AACA,K;AACA,kC;AACA,8B;AACA,4B;;AAEA,wD;AACA,4D;AACA,2C;;AAEA,wC;AACA,6B;AACA,S;;AAEA,gE;AACA,+D;AACA,+C;AACA,Q;AACA,2C;AACA,Q;AACA,qD;AACA,gC;AACA,mC;AACA,kC;AACA,oC;AACA,Q;AACA,kE;AACA,sE;AACA,oE;AACA,qE;AACA,uB;AACA,Q;AACA,oE;AACA,uD;AACA,8C;AACA,Q;AACA,uC;AACA,8C;AACA,oB;AACA,4D;AACA,Q;AACA,6B;AACA,Q;AACA,iE;AACA,oB;AACA,4D;AACA,Q;AACA,oE;AACA,gE;AACA,sE;AACA,gE;AACA,oB;AACA,O;AACA,K;;AAEA,c;AACA,E;;AAEA,wB;AACA,6C","file":"/packages/spacebars.js","sourcesContent":["Spacebars = {};\n\nvar tripleEquals = function (a, b) { return a === b; };\n\nSpacebars.include = function (templateOrFunction, contentFunc, elseFunc) {\n if (! templateOrFunction)\n return null;\n\n if (typeof templateOrFunction !== 'function') {\n var template = templateOrFunction;\n if (! Blaze.isTemplate(template))\n throw new Error(\"Expected template or null, found: \" + template);\n return templateOrFunction.constructView(contentFunc, elseFunc);\n }\n\n var templateVar = Blaze.ReactiveVar(null, tripleEquals);\n var view = Blaze.View('Spacebars.include', function () {\n var template = templateVar.get();\n if (template === null)\n return null;\n\n if (! Blaze.isTemplate(template))\n throw new Error(\"Expected template or null, found: \" + template);\n\n return template.constructView(contentFunc, elseFunc);\n });\n view.__templateVar = templateVar;\n view.onViewCreated(function () {\n this.autorun(function () {\n templateVar.set(templateOrFunction());\n });\n });\n\n return view;\n};\n\n// Executes `{{foo bar baz}}` when called on `(foo, bar, baz)`.\n// If `bar` and `baz` are functions, they are called before\n// `foo` is called on them.\n//\n// This is the shared part of Spacebars.mustache and\n// Spacebars.attrMustache, which differ in how they post-process the\n// result.\nSpacebars.mustacheImpl = function (value/*, args*/) {\n var args = arguments;\n // if we have any arguments (pos or kw), add an options argument\n // if there isn't one.\n if (args.length > 1) {\n var kw = args[args.length - 1];\n if (! (kw instanceof Spacebars.kw)) {\n kw = Spacebars.kw();\n // clone arguments into an actual array, then push\n // the empty kw object.\n args = Array.prototype.slice.call(arguments);\n args.push(kw);\n } else {\n // For each keyword arg, call it if it's a function\n var newHash = {};\n for (var k in kw.hash) {\n var v = kw.hash[k];\n newHash[k] = (typeof v === 'function' ? v() : v);\n }\n args[args.length - 1] = Spacebars.kw(newHash);\n }\n }\n\n return Spacebars.call.apply(null, args);\n};\n\nSpacebars.mustache = function (value/*, args*/) {\n var result = Spacebars.mustacheImpl.apply(null, arguments);\n\n if (result instanceof Spacebars.SafeString)\n return HTML.Raw(result.toString());\n else\n // map `null`, `undefined`, and `false` to null, which is important\n // so that attributes with nully values are considered absent.\n // stringify anything else (e.g. strings, booleans, numbers including 0).\n return (result == null || result === false) ? null : String(result);\n};\n\nSpacebars.attrMustache = function (value/*, args*/) {\n var result = Spacebars.mustacheImpl.apply(null, arguments);\n\n if (result == null || result === '') {\n return null;\n } else if (typeof result === 'object') {\n return result;\n } else if (typeof result === 'string' && HTML.isValidAttributeName(result)) {\n var obj = {};\n obj[result] = '';\n return obj;\n } else {\n throw new Error(\"Expected valid attribute name, '', null, or object\");\n }\n};\n\nSpacebars.dataMustache = function (value/*, args*/) {\n var result = Spacebars.mustacheImpl.apply(null, arguments);\n\n return result;\n};\n\n// Idempotently wrap in `HTML.Raw`.\n//\n// Called on the return value from `Spacebars.mustache` in case the\n// template uses triple-stache (`{{{foo bar baz}}}`).\nSpacebars.makeRaw = function (value) {\n if (value == null) // null or undefined\n return null;\n else if (value instanceof HTML.Raw)\n return value;\n else\n return HTML.Raw(value);\n};\n\n// If `value` is a function, called it on the `args`, after\n// evaluating the args themselves (by calling them if they are\n// functions). Otherwise, simply return `value` (and assert that\n// there are no args).\nSpacebars.call = function (value/*, args*/) {\n if (typeof value === 'function') {\n // evaluate arguments if they are functions (by calling them)\n var newArgs = [];\n for (var i = 1; i < arguments.length; i++) {\n var arg = arguments[i];\n newArgs[i-1] = (typeof arg === 'function' ? arg() : arg);\n }\n\n return value.apply(null, newArgs);\n } else {\n if (arguments.length > 1)\n throw new Error(\"Can't call non-function: \" + value);\n\n return value;\n }\n};\n\n// Call this as `Spacebars.kw({ ... })`. The return value\n// is `instanceof Spacebars.kw`.\nSpacebars.kw = function (hash) {\n if (! (this instanceof Spacebars.kw))\n // called without new; call with new\n return new Spacebars.kw(hash);\n\n this.hash = hash || {};\n};\n\n// Call this as `Spacebars.SafeString(\"some HTML\")`. The return value\n// is `instanceof Spacebars.SafeString` (and `instanceof Handlebars.SafeString).\nSpacebars.SafeString = function (html) {\n if (! (this instanceof Spacebars.SafeString))\n // called without new; call with new\n return new Spacebars.SafeString(html);\n\n return new Handlebars.SafeString(html);\n};\nSpacebars.SafeString.prototype = Handlebars.SafeString.prototype;\n\n// `Spacebars.dot(foo, \"bar\", \"baz\")` performs a special kind\n// of `foo.bar.baz` that allows safe indexing of `null` and\n// indexing of functions (which calls the function). If the\n// result is a function, it is always a bound function (e.g.\n// a wrapped version of `baz` that always uses `foo.bar` as\n// `this`).\n//\n// In `Spacebars.dot(foo, \"bar\")`, `foo` is assumed to be either\n// a non-function value or a \"fully-bound\" function wrapping a value,\n// where fully-bound means it takes no arguments and ignores `this`.\n//\n// `Spacebars.dot(foo, \"bar\")` performs the following steps:\n//\n// * If `foo` is falsy, return `foo`.\n//\n// * If `foo` is a function, call it (set `foo` to `foo()`).\n//\n// * If `foo` is falsy now, return `foo`.\n//\n// * Return `foo.bar`, binding it to `foo` if it's a function.\nSpacebars.dot = function (value, id1/*, id2, ...*/) {\n if (arguments.length > 2) {\n // Note: doing this recursively is probably less efficient than\n // doing it in an iterative loop.\n var argsForRecurse = [];\n argsForRecurse.push(Spacebars.dot(value, id1));\n argsForRecurse.push.apply(argsForRecurse,\n Array.prototype.slice.call(arguments, 2));\n return Spacebars.dot.apply(null, argsForRecurse);\n }\n\n if (typeof value === 'function')\n value = value();\n\n if (! value)\n return value; // falsy, don't index, pass through\n\n var result = value[id1];\n if (typeof result !== 'function')\n return result;\n // `value[id1]` (or `value()[id1]`) is a function.\n // Bind it so that when called, `value` will be placed in `this`.\n return function (/*arguments*/) {\n return result.apply(value, arguments);\n };\n};\n\n// Spacebars.With implements the conditional logic of rendering\n// the `{{else}}` block if the argument is falsy. It combines\n// a Blaze.If with a Blaze.With (the latter only in the truthy\n// case, since the else block is evaluated without entering\n// a new data context).\nSpacebars.With = function (argFunc, contentFunc, elseFunc) {\n var argVar = new Blaze.ReactiveVar;\n var view = Blaze.View('Spacebars_with', function () {\n return Blaze.If(function () { return argVar.get(); },\n function () { return Blaze.With(function () {\n return argVar.get(); }, contentFunc); },\n elseFunc);\n });\n view.onViewCreated(function () {\n this.autorun(function () {\n argVar.set(argFunc());\n\n // This is a hack so that autoruns inside the body\n // of the #with get stopped sooner. It reaches inside\n // our ReactiveVar to access its dep.\n\n Tracker.onInvalidate(function () {\n argVar.dep.changed();\n });\n\n // Take the case of `{{#with A}}{{B}}{{/with}}`. The goal\n // is to not re-render `B` if `A` changes to become falsy\n // and `B` is simultaneously invalidated.\n //\n // A series of autoruns are involved:\n //\n // 1. This autorun (argument to Spacebars.With)\n // 2. Argument to Blaze.If\n // 3. Blaze.If view re-render\n // 4. Argument to Blaze.With\n // 5. The template tag `{{B}}`\n //\n // When (3) is invalidated, it immediately stops (4) and (5)\n // because of a Tracker.onInvalidate built into materializeView.\n // (When a View's render method is invalidated, it immediately\n // tears down all the subviews, via a Tracker.onInvalidate much\n // like this one.\n //\n // Suppose `A` changes to become falsy, and `B` changes at the\n // same time (i.e. without an intervening flush).\n // Without the code above, this happens:\n //\n // - (1) and (5) are invalidated.\n // - (1) runs, invalidating (2) and (4).\n // - (5) runs.\n // - (2) runs, invalidating (3), stopping (4) and (5).\n //\n // With the code above:\n //\n // - (1) and (5) are invalidated, invalidating (2) and (4).\n // - (1) runs.\n // - (2) runs, invalidating (3), stopping (4) and (5).\n //\n // If the re-run of (5) is originally enqueued before (1), all\n // bets are off, but typically that doesn't seem to be the\n // case. Anyway, doing this is always better than not doing it,\n // because it might save a bunch of DOM from being updated\n // needlessly.\n });\n });\n\n return view;\n};\n\n// XXX COMPAT WITH 0.9.0\nSpacebars.TemplateWith = Blaze._TemplateWith;\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js b/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js
deleted file mode 100644
index 0ee94a5..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-
-/* Package-scope variables */
-var lodash, _;
-
-(function () {
-
-///////////////////////////////////////////////////////////////////////
-// //
-// packages/stevezhu:lodash/server.js //
-// //
-///////////////////////////////////////////////////////////////////////
- //
-_ = lodash = Npm.require('lodash'); // 1
- // 2
-///////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package['stevezhu:lodash'] = {
- lodash: lodash,
- _: _
-};
-
-})();
-
-//# sourceMappingURL=stevezhu_lodash.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js.map b/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js.map
deleted file mode 100644
index 60bce94..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/stevezhu_lodash.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["stevezhu:lodash/server.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mC","file":"/packages/stevezhu_lodash.js","sourcesContent":["_ = lodash = Npm.require('lodash');\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/templating.js b/web-app/.meteor/local/build/programs/server/packages/templating.js
deleted file mode 100644
index 8b9b165..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/templating.js
+++ /dev/null
@@ -1,19 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var _ = Package.underscore._;
-var Blaze = Package.blaze.Blaze;
-var UI = Package.blaze.UI;
-var Handlebars = Package.blaze.Handlebars;
-var HTML = Package.htmljs.HTML;
-
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.templating = {};
-
-})();
-
-//# sourceMappingURL=templating.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/templating.js.map b/web-app/.meteor/local/build/programs/server/packages/templating.js.map
deleted file mode 100644
index 09b6843..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/templating.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":[],"names":[],"mappings":";;;;;;;;;;","file":"/packages/templating.js"}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/tracker.js b/web-app/.meteor/local/build/programs/server/packages/tracker.js
deleted file mode 100644
index 6bf4018..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/tracker.js
+++ /dev/null
@@ -1,660 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-
-/* Package-scope variables */
-var Tracker, Deps;
-
-(function () {
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/tracker/tracker.js //
-// //
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-///////////////////////////////////////////////////// // 1
-// Package docs at http://docs.meteor.com/#tracker // // 2
-///////////////////////////////////////////////////// // 3
- // 4
-/** // 5
- * @namespace Tracker // 6
- * @summary The namespace for Tracker-related methods. // 7
- */ // 8
-Tracker = {}; // 9
- // 10
-// http://docs.meteor.com/#tracker_active // 11
- // 12
-/** // 13
- * @summary True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.
- * @locus Client // 15
- * @type {Boolean} // 16
- */ // 17
-Tracker.active = false; // 18
- // 19
-// http://docs.meteor.com/#tracker_currentcomputation // 20
- // 21
-/** // 22
- * @summary The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.
- * @locus Client // 24
- * @type {Tracker.Computation} // 25
- */ // 26
-Tracker.currentComputation = null; // 27
- // 28
-// References to all computations created within the Tracker by id. // 29
-// Keeping these references on an underscore property gives more control to // 30
-// tooling and packages extending Tracker without increasing the API surface. // 31
-// These can used to monkey-patch computations, their functions, use // 32
-// computation ids for tracking, etc. // 33
-Tracker._computations = {}; // 34
- // 35
-var setCurrentComputation = function (c) { // 36
- Tracker.currentComputation = c; // 37
- Tracker.active = !! c; // 38
-}; // 39
- // 40
-var _debugFunc = function () { // 41
- // We want this code to work without Meteor, and also without // 42
- // "console" (which is technically non-standard and may be missing // 43
- // on some browser we come across, like it was on IE 7). // 44
- // // 45
- // Lazy evaluation because `Meteor` does not exist right away.(??) // 46
- return (typeof Meteor !== "undefined" ? Meteor._debug : // 47
- ((typeof console !== "undefined") && console.error ? // 48
- function () { console.error.apply(console, arguments); } : // 49
- function () {})); // 50
-}; // 51
- // 52
-var _maybeSupressMoreLogs = function (messagesLength) { // 53
- // Sometimes when running tests, we intentionally supress logs on expected // 54
- // printed errors. Since the current implementation of _throwOrLog can log // 55
- // multiple separate log messages, supress all of them if at least one supress // 56
- // is expected as we still want them to count as one. // 57
- if (typeof Meteor !== "undefined") { // 58
- if (Meteor._supressed_log_expected()) { // 59
- Meteor._suppress_log(messagesLength - 1); // 60
- } // 61
- } // 62
-}; // 63
- // 64
-var _throwOrLog = function (from, e) { // 65
- if (throwFirstError) { // 66
- throw e; // 67
- } else { // 68
- var printArgs = ["Exception from Tracker " + from + " function:"]; // 69
- if (e.stack && e.message && e.name) { // 70
- var idx = e.stack.indexOf(e.message); // 71
- if (idx < 0 || idx > e.name.length + 2) { // check for "Error: " // 72
- // message is not part of the stack // 73
- var message = e.name + ": " + e.message; // 74
- printArgs.push(message); // 75
- } // 76
- } // 77
- printArgs.push(e.stack); // 78
- _maybeSupressMoreLogs(printArgs.length); // 79
- // 80
- for (var i = 0; i < printArgs.length; i++) { // 81
- _debugFunc()(printArgs[i]); // 82
- } // 83
- } // 84
-}; // 85
- // 86
-// Takes a function `f`, and wraps it in a `Meteor._noYieldsAllowed` // 87
-// block if we are running on the server. On the client, returns the // 88
-// original function (since `Meteor._noYieldsAllowed` is a // 89
-// no-op). This has the benefit of not adding an unnecessary stack // 90
-// frame on the client. // 91
-var withNoYieldsAllowed = function (f) { // 92
- if ((typeof Meteor === 'undefined') || Meteor.isClient) { // 93
- return f; // 94
- } else { // 95
- return function () { // 96
- var args = arguments; // 97
- Meteor._noYieldsAllowed(function () { // 98
- f.apply(null, args); // 99
- }); // 100
- }; // 101
- } // 102
-}; // 103
- // 104
-var nextId = 1; // 105
-// computations whose callbacks we should call at flush time // 106
-var pendingComputations = []; // 107
-// `true` if a Tracker.flush is scheduled, or if we are in Tracker.flush now // 108
-var willFlush = false; // 109
-// `true` if we are in Tracker.flush now // 110
-var inFlush = false; // 111
-// `true` if we are computing a computation now, either first time // 112
-// or recompute. This matches Tracker.active unless we are inside // 113
-// Tracker.nonreactive, which nullfies currentComputation even though // 114
-// an enclosing computation may still be running. // 115
-var inCompute = false; // 116
-// `true` if the `_throwFirstError` option was passed in to the call // 117
-// to Tracker.flush that we are in. When set, throw rather than log the // 118
-// first error encountered while flushing. Before throwing the error, // 119
-// finish flushing (from a finally block), logging any subsequent // 120
-// errors. // 121
-var throwFirstError = false; // 122
- // 123
-var afterFlushCallbacks = []; // 124
- // 125
-var requireFlush = function () { // 126
- if (! willFlush) { // 127
- // We want this code to work without Meteor, see debugFunc above // 128
- if (typeof Meteor !== "undefined") // 129
- Meteor._setImmediate(Tracker._runFlush); // 130
- else // 131
- setTimeout(Tracker._runFlush, 0); // 132
- willFlush = true; // 133
- } // 134
-}; // 135
- // 136
-// Tracker.Computation constructor is visible but private // 137
-// (throws an error if you try to call it) // 138
-var constructingComputation = false; // 139
- // 140
-// // 141
-// http://docs.meteor.com/#tracker_computation // 142
- // 143
-/** // 144
- * @summary A Computation object represents code that is repeatedly rerun // 145
- * in response to // 146
- * reactive data changes. Computations don't have return values; they just // 147
- * perform actions, such as rerendering a template on the screen. Computations // 148
- * are created using Tracker.autorun. Use stop to prevent further rerunning of a // 149
- * computation. // 150
- * @instancename computation // 151
- */ // 152
-Tracker.Computation = function (f, parent, onError) { // 153
- if (! constructingComputation) // 154
- throw new Error( // 155
- "Tracker.Computation constructor is private; use Tracker.autorun"); // 156
- constructingComputation = false; // 157
- // 158
- var self = this; // 159
- // 160
- // http://docs.meteor.com/#computation_stopped // 161
- // 162
- /** // 163
- * @summary True if this computation has been stopped. // 164
- * @locus Client // 165
- * @memberOf Tracker.Computation // 166
- * @instance // 167
- * @name stopped // 168
- */ // 169
- self.stopped = false; // 170
- // 171
- // http://docs.meteor.com/#computation_invalidated // 172
- // 173
- /** // 174
- * @summary True if this computation has been invalidated (and not yet rerun), or if it has been stopped. // 175
- * @locus Client // 176
- * @memberOf Tracker.Computation // 177
- * @instance // 178
- * @name invalidated // 179
- * @type {Boolean} // 180
- */ // 181
- self.invalidated = false; // 182
- // 183
- // http://docs.meteor.com/#computation_firstrun // 184
- // 185
- /** // 186
- * @summary True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.
- * @locus Client // 188
- * @memberOf Tracker.Computation // 189
- * @instance // 190
- * @name firstRun // 191
- * @type {Boolean} // 192
- */ // 193
- self.firstRun = true; // 194
- // 195
- self._id = nextId++; // 196
- self._onInvalidateCallbacks = []; // 197
- // the plan is at some point to use the parent relation // 198
- // to constrain the order that computations are processed // 199
- self._parent = parent; // 200
- self._func = f; // 201
- self._onError = onError; // 202
- self._recomputing = false; // 203
- // 204
- // Register the computation within the global Tracker. // 205
- Tracker._computations[self._id] = self; // 206
- // 207
- var errored = true; // 208
- try { // 209
- self._compute(); // 210
- errored = false; // 211
- } finally { // 212
- self.firstRun = false; // 213
- if (errored) // 214
- self.stop(); // 215
- } // 216
-}; // 217
- // 218
-// http://docs.meteor.com/#computation_oninvalidate // 219
- // 220
-/** // 221
- * @summary Registers `callback` to run when this computation is next invalidated, or runs it immediately if the computation is already invalidated. The callback is run exactly once and not upon future invalidations unless `onInvalidate` is called again after the computation becomes valid again.
- * @locus Client // 223
- * @param {Function} callback Function to be called on invalidation. Receives one argument, the computation that was invalidated.
- */ // 225
-Tracker.Computation.prototype.onInvalidate = function (f) { // 226
- var self = this; // 227
- // 228
- if (typeof f !== 'function') // 229
- throw new Error("onInvalidate requires a function"); // 230
- // 231
- if (self.invalidated) { // 232
- Tracker.nonreactive(function () { // 233
- withNoYieldsAllowed(f)(self); // 234
- }); // 235
- } else { // 236
- self._onInvalidateCallbacks.push(f); // 237
- } // 238
-}; // 239
- // 240
-// http://docs.meteor.com/#computation_invalidate // 241
- // 242
-/** // 243
- * @summary Invalidates this computation so that it will be rerun. // 244
- * @locus Client // 245
- */ // 246
-Tracker.Computation.prototype.invalidate = function () { // 247
- var self = this; // 248
- if (! self.invalidated) { // 249
- // if we're currently in _recompute(), don't enqueue // 250
- // ourselves, since we'll rerun immediately anyway. // 251
- if (! self._recomputing && ! self.stopped) { // 252
- requireFlush(); // 253
- pendingComputations.push(this); // 254
- } // 255
- // 256
- self.invalidated = true; // 257
- // 258
- // callbacks can't add callbacks, because // 259
- // self.invalidated === true. // 260
- for(var i = 0, f; f = self._onInvalidateCallbacks[i]; i++) { // 261
- Tracker.nonreactive(function () { // 262
- withNoYieldsAllowed(f)(self); // 263
- }); // 264
- } // 265
- self._onInvalidateCallbacks = []; // 266
- } // 267
-}; // 268
- // 269
-// http://docs.meteor.com/#computation_stop // 270
- // 271
-/** // 272
- * @summary Prevents this computation from rerunning. // 273
- * @locus Client // 274
- */ // 275
-Tracker.Computation.prototype.stop = function () { // 276
- if (! this.stopped) { // 277
- this.stopped = true; // 278
- this.invalidate(); // 279
- // Unregister from global Tracker. // 280
- delete Tracker._computations[this._id]; // 281
- } // 282
-}; // 283
- // 284
-Tracker.Computation.prototype._compute = function () { // 285
- var self = this; // 286
- self.invalidated = false; // 287
- // 288
- var previous = Tracker.currentComputation; // 289
- setCurrentComputation(self); // 290
- var previousInCompute = inCompute; // 291
- inCompute = true; // 292
- try { // 293
- withNoYieldsAllowed(self._func)(self); // 294
- } finally { // 295
- setCurrentComputation(previous); // 296
- inCompute = previousInCompute; // 297
- } // 298
-}; // 299
- // 300
-Tracker.Computation.prototype._needsRecompute = function () { // 301
- var self = this; // 302
- return self.invalidated && ! self.stopped; // 303
-}; // 304
- // 305
-Tracker.Computation.prototype._recompute = function () { // 306
- var self = this; // 307
- // 308
- self._recomputing = true; // 309
- try { // 310
- if (self._needsRecompute()) { // 311
- try { // 312
- self._compute(); // 313
- } catch (e) { // 314
- if (self._onError) { // 315
- self._onError(e); // 316
- } else { // 317
- _throwOrLog("recompute", e); // 318
- } // 319
- } // 320
- } // 321
- } finally { // 322
- self._recomputing = false; // 323
- } // 324
-}; // 325
- // 326
-// // 327
-// http://docs.meteor.com/#tracker_dependency // 328
- // 329
-/** // 330
- * @summary A Dependency represents an atomic unit of reactive data that a // 331
- * computation might depend on. Reactive data sources such as Session or // 332
- * Minimongo internally create different Dependency objects for different // 333
- * pieces of data, each of which may be depended on by multiple computations. // 334
- * When the data changes, the computations are invalidated. // 335
- * @class // 336
- * @instanceName dependency // 337
- */ // 338
-Tracker.Dependency = function () { // 339
- this._dependentsById = {}; // 340
-}; // 341
- // 342
-// http://docs.meteor.com/#dependency_depend // 343
-// // 344
-// Adds `computation` to this set if it is not already // 345
-// present. Returns true if `computation` is a new member of the set. // 346
-// If no argument, defaults to currentComputation, or does nothing // 347
-// if there is no currentComputation. // 348
- // 349
-/** // 350
- * @summary Declares that the current computation (or `fromComputation` if given) depends on `dependency`. The computation will be invalidated the next time `dependency` changes.
- // 352
-If there is no current computation and `depend()` is called with no arguments, it does nothing and returns false. // 353
- // 354
-Returns true if the computation is a new dependent of `dependency` rather than an existing one. // 355
- * @locus Client // 356
- * @param {Tracker.Computation} [fromComputation] An optional computation declared to depend on `dependency` instead of the current computation.
- * @returns {Boolean} // 358
- */ // 359
-Tracker.Dependency.prototype.depend = function (computation) { // 360
- if (! computation) { // 361
- if (! Tracker.active) // 362
- return false; // 363
- // 364
- computation = Tracker.currentComputation; // 365
- } // 366
- var self = this; // 367
- var id = computation._id; // 368
- if (! (id in self._dependentsById)) { // 369
- self._dependentsById[id] = computation; // 370
- computation.onInvalidate(function () { // 371
- delete self._dependentsById[id]; // 372
- }); // 373
- return true; // 374
- } // 375
- return false; // 376
-}; // 377
- // 378
-// http://docs.meteor.com/#dependency_changed // 379
- // 380
-/** // 381
- * @summary Invalidate all dependent computations immediately and remove them as dependents. // 382
- * @locus Client // 383
- */ // 384
-Tracker.Dependency.prototype.changed = function () { // 385
- var self = this; // 386
- for (var id in self._dependentsById) // 387
- self._dependentsById[id].invalidate(); // 388
-}; // 389
- // 390
-// http://docs.meteor.com/#dependency_hasdependents // 391
- // 392
-/** // 393
- * @summary True if this Dependency has one or more dependent Computations, which would be invalidated if this Dependency were to change.
- * @locus Client // 395
- * @returns {Boolean} // 396
- */ // 397
-Tracker.Dependency.prototype.hasDependents = function () { // 398
- var self = this; // 399
- for(var id in self._dependentsById) // 400
- return true; // 401
- return false; // 402
-}; // 403
- // 404
-// http://docs.meteor.com/#tracker_flush // 405
- // 406
-/** // 407
- * @summary Process all reactive updates immediately and ensure that all invalidated computations are rerun. // 408
- * @locus Client // 409
- */ // 410
-Tracker.flush = function (options) { // 411
- Tracker._runFlush({ finishSynchronously: true, // 412
- throwFirstError: options && options._throwFirstError }); // 413
-}; // 414
- // 415
-// Run all pending computations and afterFlush callbacks. If we were not called // 416
-// directly via Tracker.flush, this may return before they're all done to allow // 417
-// the event loop to run a little before continuing. // 418
-Tracker._runFlush = function (options) { // 419
- // XXX What part of the comment below is still true? (We no longer // 420
- // have Spark) // 421
- // // 422
- // Nested flush could plausibly happen if, say, a flush causes // 423
- // DOM mutation, which causes a "blur" event, which runs an // 424
- // app event handler that calls Tracker.flush. At the moment // 425
- // Spark blocks event handlers during DOM mutation anyway, // 426
- // because the LiveRange tree isn't valid. And we don't have // 427
- // any useful notion of a nested flush. // 428
- // // 429
- // https://app.asana.com/0/159908330244/385138233856 // 430
- if (inFlush) // 431
- throw new Error("Can't call Tracker.flush while flushing"); // 432
- // 433
- if (inCompute) // 434
- throw new Error("Can't flush inside Tracker.autorun"); // 435
- // 436
- options = options || {}; // 437
- // 438
- inFlush = true; // 439
- willFlush = true; // 440
- throwFirstError = !! options.throwFirstError; // 441
- // 442
- var recomputedCount = 0; // 443
- var finishedTry = false; // 444
- try { // 445
- while (pendingComputations.length || // 446
- afterFlushCallbacks.length) { // 447
- // 448
- // recompute all pending computations // 449
- while (pendingComputations.length) { // 450
- var comp = pendingComputations.shift(); // 451
- comp._recompute(); // 452
- if (comp._needsRecompute()) { // 453
- pendingComputations.unshift(comp); // 454
- } // 455
- // 456
- if (! options.finishSynchronously && ++recomputedCount > 1000) { // 457
- finishedTry = true; // 458
- return; // 459
- } // 460
- } // 461
- // 462
- if (afterFlushCallbacks.length) { // 463
- // call one afterFlush callback, which may // 464
- // invalidate more computations // 465
- var func = afterFlushCallbacks.shift(); // 466
- try { // 467
- func(); // 468
- } catch (e) { // 469
- _throwOrLog("afterFlush", e); // 470
- } // 471
- } // 472
- } // 473
- finishedTry = true; // 474
- } finally { // 475
- if (! finishedTry) { // 476
- // we're erroring due to throwFirstError being true. // 477
- inFlush = false; // needed before calling `Tracker.flush()` again // 478
- // finish flushing // 479
- Tracker._runFlush({ // 480
- finishSynchronously: options.finishSynchronously, // 481
- throwFirstError: false // 482
- }); // 483
- } // 484
- willFlush = false; // 485
- inFlush = false; // 486
- if (pendingComputations.length || afterFlushCallbacks.length) { // 487
- // We're yielding because we ran a bunch of computations and we aren't // 488
- // required to finish synchronously, so we'd like to give the event loop a // 489
- // chance. We should flush again soon. // 490
- if (options.finishSynchronously) { // 491
- throw new Error("still have more to do?"); // shouldn't happen // 492
- } // 493
- setTimeout(requireFlush, 10); // 494
- } // 495
- } // 496
-}; // 497
- // 498
-// http://docs.meteor.com/#tracker_autorun // 499
-// // 500
-// Run f(). Record its dependencies. Rerun it whenever the // 501
-// dependencies change. // 502
-// // 503
-// Returns a new Computation, which is also passed to f. // 504
-// // 505
-// Links the computation to the current computation // 506
-// so that it is stopped if the current computation is invalidated. // 507
- // 508
-/** // 509
- * @callback Tracker.ComputationFunction // 510
- * @param {Tracker.Computation} // 511
- */ // 512
-/** // 513
- * @summary Run a function now and rerun it later whenever its dependencies // 514
- * change. Returns a Computation object that can be used to stop or observe the // 515
- * rerunning. // 516
- * @locus Client // 517
- * @param {Tracker.ComputationFunction} runFunc The function to run. It receives // 518
- * one argument: the Computation object that will be returned. // 519
- * @param {Object} [options] // 520
- * @param {Function} options.onError Optional. The function to run when an error // 521
- * happens in the Computation. The only argument it recieves is the Error // 522
- * thrown. Defaults to the error being logged to the console. // 523
- * @returns {Tracker.Computation} // 524
- */ // 525
-Tracker.autorun = function (f, options) { // 526
- if (typeof f !== 'function') // 527
- throw new Error('Tracker.autorun requires a function argument'); // 528
- // 529
- options = options || {}; // 530
- // 531
- constructingComputation = true; // 532
- var c = new Tracker.Computation( // 533
- f, Tracker.currentComputation, options.onError); // 534
- // 535
- if (Tracker.active) // 536
- Tracker.onInvalidate(function () { // 537
- c.stop(); // 538
- }); // 539
- // 540
- return c; // 541
-}; // 542
- // 543
-// http://docs.meteor.com/#tracker_nonreactive // 544
-// // 545
-// Run `f` with no current computation, returning the return value // 546
-// of `f`. Used to turn off reactivity for the duration of `f`, // 547
-// so that reactive data sources accessed by `f` will not result in any // 548
-// computations being invalidated. // 549
- // 550
-/** // 551
- * @summary Run a function without tracking dependencies. // 552
- * @locus Client // 553
- * @param {Function} func A function to call immediately. // 554
- */ // 555
-Tracker.nonreactive = function (f) { // 556
- var previous = Tracker.currentComputation; // 557
- setCurrentComputation(null); // 558
- try { // 559
- return f(); // 560
- } finally { // 561
- setCurrentComputation(previous); // 562
- } // 563
-}; // 564
- // 565
-// http://docs.meteor.com/#tracker_oninvalidate // 566
- // 567
-/** // 568
- * @summary Registers a new [`onInvalidate`](#computation_oninvalidate) callback on the current computation (which must exist), to be called immediately when the current computation is invalidated or stopped.
- * @locus Client // 570
- * @param {Function} callback A callback function that will be invoked as `func(c)`, where `c` is the computation on which the callback is registered.
- */ // 572
-Tracker.onInvalidate = function (f) { // 573
- if (! Tracker.active) // 574
- throw new Error("Tracker.onInvalidate requires a currentComputation"); // 575
- // 576
- Tracker.currentComputation.onInvalidate(f); // 577
-}; // 578
- // 579
-// http://docs.meteor.com/#tracker_afterflush // 580
- // 581
-/** // 582
- * @summary Schedules a function to be called during the next flush, or later in the current flush if one is in progress, after all invalidated computations have been rerun. The function will be run once and not on subsequent flushes unless `afterFlush` is called again.
- * @locus Client // 584
- * @param {Function} callback A function to call at flush time. // 585
- */ // 586
-Tracker.afterFlush = function (f) { // 587
- afterFlushCallbacks.push(f); // 588
- requireFlush(); // 589
-}; // 590
- // 591
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-
-
-
-
-(function () {
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/tracker/deprecated.js //
-// //
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-// Deprecated functions. // 1
- // 2
-// These functions used to be on the Meteor object (and worked slightly // 3
-// differently). // 4
-// XXX COMPAT WITH 0.5.7 // 5
-Meteor.flush = Tracker.flush; // 6
-Meteor.autorun = Tracker.autorun; // 7
- // 8
-// We used to require a special "autosubscribe" call to reactively subscribe to // 9
-// things. Now, it works with autorun. // 10
-// XXX COMPAT WITH 0.5.4 // 11
-Meteor.autosubscribe = Tracker.autorun; // 12
- // 13
-// This Tracker API briefly existed in 0.5.8 and 0.5.9 // 14
-// XXX COMPAT WITH 0.5.9 // 15
-Tracker.depend = function (d) { // 16
- return d.depend(); // 17
-}; // 18
- // 19
-Deps = Tracker; // 20
- // 21
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.tracker = {
- Tracker: Tracker,
- Deps: Deps
-};
-
-})();
-
-//# sourceMappingURL=tracker.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/tracker.js.map b/web-app/.meteor/local/build/programs/server/packages/tracker.js.map
deleted file mode 100644
index df8a576..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/tracker.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["tracker/tracker.js","tracker/deprecated.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qD;AACA,qD;AACA,qD;;AAEA,G;AACA,qB;AACA,sD;AACA,G;AACA,a;;AAEA,yC;;AAEA,G;AACA,iL;AACA,gB;AACA,kB;AACA,G;AACA,uB;;AAEA,qD;;AAEA,G;AACA,4S;AACA,gB;AACA,8B;AACA,G;AACA,kC;;AAEA,mE;AACA,2E;AACA,6E;AACA,oE;AACA,qC;AACA,2B;;AAEA,0C;AACA,iC;AACA,wB;AACA,E;;AAEA,8B;AACA,+D;AACA,oE;AACA,0D;AACA,I;AACA,oE;AACA,yD;AACA,8D;AACA,qE;AACA,4B;AACA,E;;AAEA,uD;AACA,4E;AACA,4E;AACA,gF;AACA,uD;AACA,sC;AACA,2C;AACA,+C;AACA,K;AACA,G;AACA,E;;AAEA,sC;AACA,wB;AACA,Y;AACA,U;AACA,sE;AACA,yC;AACA,2C;AACA,sE;AACA,2C;AACA,gD;AACA,gC;AACA,O;AACA,K;AACA,4B;AACA,4C;;AAEA,gD;AACA,iC;AACA,K;AACA,G;AACA,E;;AAEA,oE;AACA,oE;AACA,0D;AACA,kE;AACA,uB;AACA,wC;AACA,2D;AACA,a;AACA,U;AACA,wB;AACA,2B;AACA,2C;AACA,4B;AACA,S;AACA,M;AACA,G;AACA,E;;AAEA,e;AACA,4D;AACA,6B;AACA,4E;AACA,sB;AACA,wC;AACA,oB;AACA,kE;AACA,kE;AACA,qE;AACA,iD;AACA,sB;AACA,oE;AACA,uE;AACA,qE;AACA,iE;AACA,U;AACA,4B;;AAEA,6B;;AAEA,gC;AACA,oB;AACA,oE;AACA,sC;AACA,8C;AACA,Q;AACA,uC;AACA,qB;AACA,G;AACA,E;;AAEA,yD;AACA,0C;AACA,oC;;AAEA,E;AACA,8C;;AAEA,G;AACA,yE;AACA,iB;AACA,0E;AACA,8E;AACA,gF;AACA,e;AACA,4B;AACA,G;AACA,qD;AACA,gC;AACA,oB;AACA,yE;AACA,kC;;AAEA,kB;;AAEA,gD;;AAEA,K;AACA,wD;AACA,kB;AACA,kC;AACA,c;AACA,mB;AACA,K;AACA,uB;;AAEA,oD;;AAEA,K;AACA,2G;AACA,kB;AACA,kC;AACA,c;AACA,uB;AACA,oB;AACA,K;AACA,2B;;AAEA,iD;;AAEA,K;AACA,wJ;AACA,kB;AACA,kC;AACA,c;AACA,oB;AACA,oB;AACA,K;AACA,uB;;AAEA,sB;AACA,mC;AACA,yD;AACA,2D;AACA,wB;AACA,iB;AACA,0B;AACA,4B;;AAEA,wD;AACA,yC;;AAEA,qB;AACA,O;AACA,oB;AACA,oB;AACA,a;AACA,0B;AACA,gB;AACA,kB;AACA,G;AACA,E;;AAEA,mD;;AAEA,G;AACA,yS;AACA,gB;AACA,iI;AACA,G;AACA,2D;AACA,kB;;AAEA,8B;AACA,wD;;AAEA,yB;AACA,qC;AACA,mC;AACA,O;AACA,U;AACA,wC;AACA,G;AACA,E;;AAEA,iD;;AAEA,G;AACA,kE;AACA,gB;AACA,G;AACA,wD;AACA,kB;AACA,2B;AACA,wD;AACA,uD;AACA,gD;AACA,qB;AACA,qC;AACA,K;;AAEA,4B;;AAEA,6C;AACA,iC;AACA,gE;AACA,uC;AACA,qC;AACA,S;AACA,K;AACA,qC;AACA,G;AACA,E;;AAEA,2C;;AAEA,G;AACA,qD;AACA,gB;AACA,G;AACA,kD;AACA,uB;AACA,wB;AACA,sB;AACA,sC;AACA,2C;AACA,G;AACA,E;;AAEA,sD;AACA,kB;AACA,2B;;AAEA,4C;AACA,8B;AACA,oC;AACA,mB;AACA,O;AACA,0C;AACA,a;AACA,oC;AACA,kC;AACA,G;AACA,E;;AAEA,6D;AACA,kB;AACA,4C;AACA,E;;AAEA,wD;AACA,kB;;AAEA,2B;AACA,O;AACA,iC;AACA,W;AACA,wB;AACA,mB;AACA,4B;AACA,2B;AACA,gB;AACA,sC;AACA,S;AACA,O;AACA,K;AACA,a;AACA,8B;AACA,G;AACA,E;;AAEA,E;AACA,6C;;AAEA,G;AACA,0E;AACA,wE;AACA,yE;AACA,6E;AACA,2D;AACA,S;AACA,2B;AACA,G;AACA,kC;AACA,4B;AACA,E;;AAEA,4C;AACA,E;AACA,sD;AACA,sE;AACA,kE;AACA,qC;;AAEA,G;AACA,mL;;AAEA,iH;;AAEA,+F;AACA,gB;AACA,gJ;AACA,qB;AACA,G;AACA,8D;AACA,sB;AACA,yB;AACA,mB;;AAEA,6C;AACA,G;AACA,kB;AACA,2B;AACA,uC;AACA,2C;AACA,0C;AACA,sC;AACA,O;AACA,gB;AACA,G;AACA,e;AACA,E;;AAEA,6C;;AAEA,G;AACA,4F;AACA,gB;AACA,G;AACA,oD;AACA,kB;AACA,sC;AACA,0C;AACA,E;;AAEA,mD;;AAEA,G;AACA,yI;AACA,gB;AACA,qB;AACA,G;AACA,0D;AACA,kB;AACA,qC;AACA,gB;AACA,e;AACA,E;;AAEA,wC;;AAEA,G;AACA,4G;AACA,gB;AACA,G;AACA,oC;AACA,gD;AACA,8E;AACA,E;;AAEA,gF;AACA,+E;AACA,oD;AACA,wC;AACA,oE;AACA,gB;AACA,I;AACA,gE;AACA,6D;AACA,+D;AACA,4D;AACA,+D;AACA,yC;AACA,I;AACA,sD;AACA,c;AACA,+D;;AAEA,gB;AACA,0D;;AAEA,0B;;AAEA,iB;AACA,mB;AACA,+C;;AAEA,0B;AACA,0B;AACA,O;AACA,wC;AACA,wC;;AAEA,2C;AACA,0C;AACA,+C;AACA,0B;AACA,qC;AACA,4C;AACA,S;;AAEA,wE;AACA,6B;AACA,iB;AACA,S;AACA,O;;AAEA,uC;AACA,kD;AACA,uC;AACA,+C;AACA,a;AACA,iB;AACA,qB;AACA,uC;AACA,S;AACA,O;AACA,K;AACA,uB;AACA,a;AACA,wB;AACA,0D;AACA,uE;AACA,wB;AACA,yB;AACA,yD;AACA,8B;AACA,S;AACA,K;AACA,sB;AACA,oB;AACA,mE;AACA,4E;AACA,gF;AACA,4C;AACA,wC;AACA,uE;AACA,O;AACA,mC;AACA,K;AACA,G;AACA,E;;AAEA,0C;AACA,E;AACA,0D;AACA,uB;AACA,E;AACA,wD;AACA,E;AACA,mD;AACA,mE;;AAEA,G;AACA,wC;AACA,+B;AACA,G;AACA,G;AACA,2E;AACA,+E;AACA,a;AACA,gB;AACA,gF;AACA,8D;AACA,4B;AACA,gF;AACA,yE;AACA,6D;AACA,iC;AACA,G;AACA,yC;AACA,8B;AACA,oE;;AAEA,0B;;AAEA,iC;AACA,kC;AACA,oD;;AAEA,qB;AACA,sC;AACA,e;AACA,O;;AAEA,W;AACA,E;;AAEA,8C;AACA,E;AACA,kE;AACA,gE;AACA,uE;AACA,kC;;AAEA,G;AACA,yD;AACA,gB;AACA,yD;AACA,G;AACA,oC;AACA,4C;AACA,8B;AACA,O;AACA,e;AACA,a;AACA,oC;AACA,G;AACA,E;;AAEA,+C;;AAEA,G;AACA,gN;AACA,gB;AACA,sJ;AACA,G;AACA,qC;AACA,uB;AACA,0E;;AAEA,6C;AACA,E;;AAEA,6C;;AAEA,G;AACA,+Q;AACA,gB;AACA,+D;AACA,G;AACA,mC;AACA,8B;AACA,iB;AACA,E;;;;;;;;;;;;;;;;;;;AC7kBA,wB;;AAEA,uE;AACA,gB;AACA,wB;AACA,6B;AACA,iC;;AAEA,+E;AACA,sC;AACA,wB;AACA,uC;;AAEA,sD;AACA,wB;AACA,+B;AACA,oB;AACA,E;;AAEA,e","file":"/packages/tracker.js","sourcesContent":["/////////////////////////////////////////////////////\n// Package docs at http://docs.meteor.com/#tracker //\n/////////////////////////////////////////////////////\n\n/**\n * @namespace Tracker\n * @summary The namespace for Tracker-related methods.\n */\nTracker = {};\n\n// http://docs.meteor.com/#tracker_active\n\n/**\n * @summary True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.\n * @locus Client\n * @type {Boolean}\n */\nTracker.active = false;\n\n// http://docs.meteor.com/#tracker_currentcomputation\n\n/**\n * @summary The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.\n * @locus Client\n * @type {Tracker.Computation}\n */\nTracker.currentComputation = null;\n\n// References to all computations created within the Tracker by id.\n// Keeping these references on an underscore property gives more control to\n// tooling and packages extending Tracker without increasing the API surface.\n// These can used to monkey-patch computations, their functions, use\n// computation ids for tracking, etc.\nTracker._computations = {};\n\nvar setCurrentComputation = function (c) {\n Tracker.currentComputation = c;\n Tracker.active = !! c;\n};\n\nvar _debugFunc = function () {\n // We want this code to work without Meteor, and also without\n // \"console\" (which is technically non-standard and may be missing\n // on some browser we come across, like it was on IE 7).\n //\n // Lazy evaluation because `Meteor` does not exist right away.(??)\n return (typeof Meteor !== \"undefined\" ? Meteor._debug :\n ((typeof console !== \"undefined\") && console.error ?\n function () { console.error.apply(console, arguments); } :\n function () {}));\n};\n\nvar _maybeSupressMoreLogs = function (messagesLength) {\n // Sometimes when running tests, we intentionally supress logs on expected\n // printed errors. Since the current implementation of _throwOrLog can log\n // multiple separate log messages, supress all of them if at least one supress\n // is expected as we still want them to count as one.\n if (typeof Meteor !== \"undefined\") {\n if (Meteor._supressed_log_expected()) {\n Meteor._suppress_log(messagesLength - 1);\n }\n }\n};\n\nvar _throwOrLog = function (from, e) {\n if (throwFirstError) {\n throw e;\n } else {\n var printArgs = [\"Exception from Tracker \" + from + \" function:\"];\n if (e.stack && e.message && e.name) {\n var idx = e.stack.indexOf(e.message);\n if (idx < 0 || idx > e.name.length + 2) { // check for \"Error: \"\n // message is not part of the stack\n var message = e.name + \": \" + e.message;\n printArgs.push(message);\n }\n }\n printArgs.push(e.stack);\n _maybeSupressMoreLogs(printArgs.length);\n\n for (var i = 0; i < printArgs.length; i++) {\n _debugFunc()(printArgs[i]);\n }\n }\n};\n\n// Takes a function `f`, and wraps it in a `Meteor._noYieldsAllowed`\n// block if we are running on the server. On the client, returns the\n// original function (since `Meteor._noYieldsAllowed` is a\n// no-op). This has the benefit of not adding an unnecessary stack\n// frame on the client.\nvar withNoYieldsAllowed = function (f) {\n if ((typeof Meteor === 'undefined') || Meteor.isClient) {\n return f;\n } else {\n return function () {\n var args = arguments;\n Meteor._noYieldsAllowed(function () {\n f.apply(null, args);\n });\n };\n }\n};\n\nvar nextId = 1;\n// computations whose callbacks we should call at flush time\nvar pendingComputations = [];\n// `true` if a Tracker.flush is scheduled, or if we are in Tracker.flush now\nvar willFlush = false;\n// `true` if we are in Tracker.flush now\nvar inFlush = false;\n// `true` if we are computing a computation now, either first time\n// or recompute. This matches Tracker.active unless we are inside\n// Tracker.nonreactive, which nullfies currentComputation even though\n// an enclosing computation may still be running.\nvar inCompute = false;\n// `true` if the `_throwFirstError` option was passed in to the call\n// to Tracker.flush that we are in. When set, throw rather than log the\n// first error encountered while flushing. Before throwing the error,\n// finish flushing (from a finally block), logging any subsequent\n// errors.\nvar throwFirstError = false;\n\nvar afterFlushCallbacks = [];\n\nvar requireFlush = function () {\n if (! willFlush) {\n // We want this code to work without Meteor, see debugFunc above\n if (typeof Meteor !== \"undefined\")\n Meteor._setImmediate(Tracker._runFlush);\n else\n setTimeout(Tracker._runFlush, 0);\n willFlush = true;\n }\n};\n\n// Tracker.Computation constructor is visible but private\n// (throws an error if you try to call it)\nvar constructingComputation = false;\n\n//\n// http://docs.meteor.com/#tracker_computation\n\n/**\n * @summary A Computation object represents code that is repeatedly rerun\n * in response to\n * reactive data changes. Computations don't have return values; they just\n * perform actions, such as rerendering a template on the screen. Computations\n * are created using Tracker.autorun. Use stop to prevent further rerunning of a\n * computation.\n * @instancename computation\n */\nTracker.Computation = function (f, parent, onError) {\n if (! constructingComputation)\n throw new Error(\n \"Tracker.Computation constructor is private; use Tracker.autorun\");\n constructingComputation = false;\n\n var self = this;\n\n // http://docs.meteor.com/#computation_stopped\n\n /**\n * @summary True if this computation has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name stopped\n */\n self.stopped = false;\n\n // http://docs.meteor.com/#computation_invalidated\n\n /**\n * @summary True if this computation has been invalidated (and not yet rerun), or if it has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name invalidated\n * @type {Boolean}\n */\n self.invalidated = false;\n\n // http://docs.meteor.com/#computation_firstrun\n\n /**\n * @summary True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name firstRun\n * @type {Boolean}\n */\n self.firstRun = true;\n\n self._id = nextId++;\n self._onInvalidateCallbacks = [];\n // the plan is at some point to use the parent relation\n // to constrain the order that computations are processed\n self._parent = parent;\n self._func = f;\n self._onError = onError;\n self._recomputing = false;\n\n // Register the computation within the global Tracker.\n Tracker._computations[self._id] = self;\n\n var errored = true;\n try {\n self._compute();\n errored = false;\n } finally {\n self.firstRun = false;\n if (errored)\n self.stop();\n }\n};\n\n// http://docs.meteor.com/#computation_oninvalidate\n\n/**\n * @summary Registers `callback` to run when this computation is next invalidated, or runs it immediately if the computation is already invalidated. The callback is run exactly once and not upon future invalidations unless `onInvalidate` is called again after the computation becomes valid again.\n * @locus Client\n * @param {Function} callback Function to be called on invalidation. Receives one argument, the computation that was invalidated.\n */\nTracker.Computation.prototype.onInvalidate = function (f) {\n var self = this;\n\n if (typeof f !== 'function')\n throw new Error(\"onInvalidate requires a function\");\n\n if (self.invalidated) {\n Tracker.nonreactive(function () {\n withNoYieldsAllowed(f)(self);\n });\n } else {\n self._onInvalidateCallbacks.push(f);\n }\n};\n\n// http://docs.meteor.com/#computation_invalidate\n\n/**\n * @summary Invalidates this computation so that it will be rerun.\n * @locus Client\n */\nTracker.Computation.prototype.invalidate = function () {\n var self = this;\n if (! self.invalidated) {\n // if we're currently in _recompute(), don't enqueue\n // ourselves, since we'll rerun immediately anyway.\n if (! self._recomputing && ! self.stopped) {\n requireFlush();\n pendingComputations.push(this);\n }\n\n self.invalidated = true;\n\n // callbacks can't add callbacks, because\n // self.invalidated === true.\n for(var i = 0, f; f = self._onInvalidateCallbacks[i]; i++) {\n Tracker.nonreactive(function () {\n withNoYieldsAllowed(f)(self);\n });\n }\n self._onInvalidateCallbacks = [];\n }\n};\n\n// http://docs.meteor.com/#computation_stop\n\n/**\n * @summary Prevents this computation from rerunning.\n * @locus Client\n */\nTracker.Computation.prototype.stop = function () {\n if (! this.stopped) {\n this.stopped = true;\n this.invalidate();\n // Unregister from global Tracker.\n delete Tracker._computations[this._id];\n }\n};\n\nTracker.Computation.prototype._compute = function () {\n var self = this;\n self.invalidated = false;\n\n var previous = Tracker.currentComputation;\n setCurrentComputation(self);\n var previousInCompute = inCompute;\n inCompute = true;\n try {\n withNoYieldsAllowed(self._func)(self);\n } finally {\n setCurrentComputation(previous);\n inCompute = previousInCompute;\n }\n};\n\nTracker.Computation.prototype._needsRecompute = function () {\n var self = this;\n return self.invalidated && ! self.stopped;\n};\n\nTracker.Computation.prototype._recompute = function () {\n var self = this;\n\n self._recomputing = true;\n try {\n if (self._needsRecompute()) {\n try {\n self._compute();\n } catch (e) {\n if (self._onError) {\n self._onError(e);\n } else {\n _throwOrLog(\"recompute\", e);\n }\n }\n }\n } finally {\n self._recomputing = false;\n }\n};\n\n//\n// http://docs.meteor.com/#tracker_dependency\n\n/**\n * @summary A Dependency represents an atomic unit of reactive data that a\n * computation might depend on. Reactive data sources such as Session or\n * Minimongo internally create different Dependency objects for different\n * pieces of data, each of which may be depended on by multiple computations.\n * When the data changes, the computations are invalidated.\n * @class\n * @instanceName dependency\n */\nTracker.Dependency = function () {\n this._dependentsById = {};\n};\n\n// http://docs.meteor.com/#dependency_depend\n//\n// Adds `computation` to this set if it is not already\n// present. Returns true if `computation` is a new member of the set.\n// If no argument, defaults to currentComputation, or does nothing\n// if there is no currentComputation.\n\n/**\n * @summary Declares that the current computation (or `fromComputation` if given) depends on `dependency`. The computation will be invalidated the next time `dependency` changes.\n\nIf there is no current computation and `depend()` is called with no arguments, it does nothing and returns false.\n\nReturns true if the computation is a new dependent of `dependency` rather than an existing one.\n * @locus Client\n * @param {Tracker.Computation} [fromComputation] An optional computation declared to depend on `dependency` instead of the current computation.\n * @returns {Boolean}\n */\nTracker.Dependency.prototype.depend = function (computation) {\n if (! computation) {\n if (! Tracker.active)\n return false;\n\n computation = Tracker.currentComputation;\n }\n var self = this;\n var id = computation._id;\n if (! (id in self._dependentsById)) {\n self._dependentsById[id] = computation;\n computation.onInvalidate(function () {\n delete self._dependentsById[id];\n });\n return true;\n }\n return false;\n};\n\n// http://docs.meteor.com/#dependency_changed\n\n/**\n * @summary Invalidate all dependent computations immediately and remove them as dependents.\n * @locus Client\n */\nTracker.Dependency.prototype.changed = function () {\n var self = this;\n for (var id in self._dependentsById)\n self._dependentsById[id].invalidate();\n};\n\n// http://docs.meteor.com/#dependency_hasdependents\n\n/**\n * @summary True if this Dependency has one or more dependent Computations, which would be invalidated if this Dependency were to change.\n * @locus Client\n * @returns {Boolean}\n */\nTracker.Dependency.prototype.hasDependents = function () {\n var self = this;\n for(var id in self._dependentsById)\n return true;\n return false;\n};\n\n// http://docs.meteor.com/#tracker_flush\n\n/**\n * @summary Process all reactive updates immediately and ensure that all invalidated computations are rerun.\n * @locus Client\n */\nTracker.flush = function (options) {\n Tracker._runFlush({ finishSynchronously: true,\n throwFirstError: options && options._throwFirstError });\n};\n\n// Run all pending computations and afterFlush callbacks. If we were not called\n// directly via Tracker.flush, this may return before they're all done to allow\n// the event loop to run a little before continuing.\nTracker._runFlush = function (options) {\n // XXX What part of the comment below is still true? (We no longer\n // have Spark)\n //\n // Nested flush could plausibly happen if, say, a flush causes\n // DOM mutation, which causes a \"blur\" event, which runs an\n // app event handler that calls Tracker.flush. At the moment\n // Spark blocks event handlers during DOM mutation anyway,\n // because the LiveRange tree isn't valid. And we don't have\n // any useful notion of a nested flush.\n //\n // https://app.asana.com/0/159908330244/385138233856\n if (inFlush)\n throw new Error(\"Can't call Tracker.flush while flushing\");\n\n if (inCompute)\n throw new Error(\"Can't flush inside Tracker.autorun\");\n\n options = options || {};\n\n inFlush = true;\n willFlush = true;\n throwFirstError = !! options.throwFirstError;\n\n var recomputedCount = 0;\n var finishedTry = false;\n try {\n while (pendingComputations.length ||\n afterFlushCallbacks.length) {\n\n // recompute all pending computations\n while (pendingComputations.length) {\n var comp = pendingComputations.shift();\n comp._recompute();\n if (comp._needsRecompute()) {\n pendingComputations.unshift(comp);\n }\n\n if (! options.finishSynchronously && ++recomputedCount > 1000) {\n finishedTry = true;\n return;\n }\n }\n\n if (afterFlushCallbacks.length) {\n // call one afterFlush callback, which may\n // invalidate more computations\n var func = afterFlushCallbacks.shift();\n try {\n func();\n } catch (e) {\n _throwOrLog(\"afterFlush\", e);\n }\n }\n }\n finishedTry = true;\n } finally {\n if (! finishedTry) {\n // we're erroring due to throwFirstError being true.\n inFlush = false; // needed before calling `Tracker.flush()` again\n // finish flushing\n Tracker._runFlush({\n finishSynchronously: options.finishSynchronously,\n throwFirstError: false\n });\n }\n willFlush = false;\n inFlush = false;\n if (pendingComputations.length || afterFlushCallbacks.length) {\n // We're yielding because we ran a bunch of computations and we aren't\n // required to finish synchronously, so we'd like to give the event loop a\n // chance. We should flush again soon.\n if (options.finishSynchronously) {\n throw new Error(\"still have more to do?\"); // shouldn't happen\n }\n setTimeout(requireFlush, 10);\n }\n }\n};\n\n// http://docs.meteor.com/#tracker_autorun\n//\n// Run f(). Record its dependencies. Rerun it whenever the\n// dependencies change.\n//\n// Returns a new Computation, which is also passed to f.\n//\n// Links the computation to the current computation\n// so that it is stopped if the current computation is invalidated.\n\n/**\n * @callback Tracker.ComputationFunction\n * @param {Tracker.Computation}\n */\n/**\n * @summary Run a function now and rerun it later whenever its dependencies\n * change. Returns a Computation object that can be used to stop or observe the\n * rerunning.\n * @locus Client\n * @param {Tracker.ComputationFunction} runFunc The function to run. It receives\n * one argument: the Computation object that will be returned.\n * @param {Object} [options]\n * @param {Function} options.onError Optional. The function to run when an error\n * happens in the Computation. The only argument it recieves is the Error\n * thrown. Defaults to the error being logged to the console.\n * @returns {Tracker.Computation}\n */\nTracker.autorun = function (f, options) {\n if (typeof f !== 'function')\n throw new Error('Tracker.autorun requires a function argument');\n\n options = options || {};\n\n constructingComputation = true;\n var c = new Tracker.Computation(\n f, Tracker.currentComputation, options.onError);\n\n if (Tracker.active)\n Tracker.onInvalidate(function () {\n c.stop();\n });\n\n return c;\n};\n\n// http://docs.meteor.com/#tracker_nonreactive\n//\n// Run `f` with no current computation, returning the return value\n// of `f`. Used to turn off reactivity for the duration of `f`,\n// so that reactive data sources accessed by `f` will not result in any\n// computations being invalidated.\n\n/**\n * @summary Run a function without tracking dependencies.\n * @locus Client\n * @param {Function} func A function to call immediately.\n */\nTracker.nonreactive = function (f) {\n var previous = Tracker.currentComputation;\n setCurrentComputation(null);\n try {\n return f();\n } finally {\n setCurrentComputation(previous);\n }\n};\n\n// http://docs.meteor.com/#tracker_oninvalidate\n\n/**\n * @summary Registers a new [`onInvalidate`](#computation_oninvalidate) callback on the current computation (which must exist), to be called immediately when the current computation is invalidated or stopped.\n * @locus Client\n * @param {Function} callback A callback function that will be invoked as `func(c)`, where `c` is the computation on which the callback is registered.\n */\nTracker.onInvalidate = function (f) {\n if (! Tracker.active)\n throw new Error(\"Tracker.onInvalidate requires a currentComputation\");\n\n Tracker.currentComputation.onInvalidate(f);\n};\n\n// http://docs.meteor.com/#tracker_afterflush\n\n/**\n * @summary Schedules a function to be called during the next flush, or later in the current flush if one is in progress, after all invalidated computations have been rerun. The function will be run once and not on subsequent flushes unless `afterFlush` is called again.\n * @locus Client\n * @param {Function} callback A function to call at flush time.\n */\nTracker.afterFlush = function (f) {\n afterFlushCallbacks.push(f);\n requireFlush();\n};\n","// Deprecated functions.\n\n// These functions used to be on the Meteor object (and worked slightly\n// differently).\n// XXX COMPAT WITH 0.5.7\nMeteor.flush = Tracker.flush;\nMeteor.autorun = Tracker.autorun;\n\n// We used to require a special \"autosubscribe\" call to reactively subscribe to\n// things. Now, it works with autorun.\n// XXX COMPAT WITH 0.5.4\nMeteor.autosubscribe = Tracker.autorun;\n\n// This Tracker API briefly existed in 0.5.8 and 0.5.9\n// XXX COMPAT WITH 0.5.9\nTracker.depend = function (d) {\n return d.depend();\n};\n\nDeps = Tracker;\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/ui.js b/web-app/.meteor/local/build/programs/server/packages/ui.js
deleted file mode 100644
index 4b3f4d7..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/ui.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var Blaze = Package.blaze.Blaze;
-var UI = Package.blaze.UI;
-var Handlebars = Package.blaze.Handlebars;
-var HTML = Package.htmljs.HTML;
-
-/* Package-scope variables */
-var Blaze, UI, Handlebars;
-
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.ui = {
- Blaze: Blaze,
- UI: UI,
- Handlebars: Handlebars
-};
-
-})();
-
-//# sourceMappingURL=ui.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/ui.js.map b/web-app/.meteor/local/build/programs/server/packages/ui.js.map
deleted file mode 100644
index 8ea872a..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/ui.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":[],"names":[],"mappings":";;;;;;;;;;;;","file":"/packages/ui.js"}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/underscore.js b/web-app/.meteor/local/build/programs/server/packages/underscore.js
deleted file mode 100644
index ef975ef..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/underscore.js
+++ /dev/null
@@ -1,1372 +0,0 @@
-(function () {
-
-/* Package-scope variables */
-var _, exports;
-
-(function () {
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/underscore/pre.js //
-// //
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-// Define an object named exports. This will cause underscore.js to put `_` as a // 1
-// field on it, instead of in the global namespace. See also post.js. // 2
-exports = {}; // 3
- // 4
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-
-
-
-
-(function () {
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/underscore/underscore.js //
-// //
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-// Underscore.js 1.5.2 // 1
-// http://underscorejs.org // 2
-// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // 3
-// Underscore may be freely distributed under the MIT license. // 4
- // 5
-(function() { // 6
- // 7
- // Baseline setup // 8
- // -------------- // 9
- // 10
- // Establish the root object, `window` in the browser, or `exports` on the server. // 11
- var root = this; // 12
- // 13
- // Save the previous value of the `_` variable. // 14
- var previousUnderscore = root._; // 15
- // 16
- // Establish the object that gets returned to break out of a loop iteration. // 17
- var breaker = {}; // 18
- // 19
- // Save bytes in the minified (but not gzipped) version: // 20
- var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; // 21
- // 22
- // Create quick reference variables for speed access to core prototypes. // 23
- var // 24
- push = ArrayProto.push, // 25
- slice = ArrayProto.slice, // 26
- concat = ArrayProto.concat, // 27
- toString = ObjProto.toString, // 28
- hasOwnProperty = ObjProto.hasOwnProperty; // 29
- // 30
- // All **ECMAScript 5** native function implementations that we hope to use // 31
- // are declared here. // 32
- var // 33
- nativeForEach = ArrayProto.forEach, // 34
- nativeMap = ArrayProto.map, // 35
- nativeReduce = ArrayProto.reduce, // 36
- nativeReduceRight = ArrayProto.reduceRight, // 37
- nativeFilter = ArrayProto.filter, // 38
- nativeEvery = ArrayProto.every, // 39
- nativeSome = ArrayProto.some, // 40
- nativeIndexOf = ArrayProto.indexOf, // 41
- nativeLastIndexOf = ArrayProto.lastIndexOf, // 42
- nativeIsArray = Array.isArray, // 43
- nativeKeys = Object.keys, // 44
- nativeBind = FuncProto.bind; // 45
- // 46
- // Create a safe reference to the Underscore object for use below. // 47
- var _ = function(obj) { // 48
- if (obj instanceof _) return obj; // 49
- if (!(this instanceof _)) return new _(obj); // 50
- this._wrapped = obj; // 51
- }; // 52
- // 53
- // Export the Underscore object for **Node.js**, with // 54
- // backwards-compatibility for the old `require()` API. If we're in // 55
- // the browser, add `_` as a global object via a string identifier, // 56
- // for Closure Compiler "advanced" mode. // 57
- if (typeof exports !== 'undefined') { // 58
- if (typeof module !== 'undefined' && module.exports) { // 59
- exports = module.exports = _; // 60
- } // 61
- exports._ = _; // 62
- } else { // 63
- root._ = _; // 64
- } // 65
- // 66
- // Current version. // 67
- _.VERSION = '1.5.2'; // 68
- // 69
- // Collection Functions // 70
- // -------------------- // 71
- // 72
- // METEOR CHANGE: Define _isArguments instead of depending on // 73
- // _.isArguments which is defined using each. In looksLikeArray // 74
- // (which each depends on), we then use _isArguments instead of // 75
- // _.isArguments. // 76
- var _isArguments = function (obj) { // 77
- return toString.call(obj) === '[object Arguments]'; // 78
- }; // 79
- // Define a fallback version of the method in browsers (ahem, IE), where // 80
- // there isn't any inspectable "Arguments" type. // 81
- if (!_isArguments(arguments)) { // 82
- _isArguments = function (obj) { // 83
- return !!(obj && hasOwnProperty.call(obj, 'callee') && typeof obj.callee === 'function'); // 84
- }; // 85
- } // 86
- // 87
- // METEOR CHANGE: _.each({length: 5}) should be treated like an object, not an // 88
- // array. This looksLikeArray function is introduced by Meteor, and replaces // 89
- // all instances of `obj.length === +obj.length`. // 90
- // https://github.com/meteor/meteor/issues/594 // 91
- // https://github.com/jashkenas/underscore/issues/770 // 92
- var looksLikeArray = function (obj) { // 93
- return (obj.length === +obj.length // 94
- // _.isArguments not yet necessarily defined here // 95
- && (_isArguments(obj) || obj.constructor !== Object)); // 96
- }; // 97
- // 98
- // The cornerstone, an `each` implementation, aka `forEach`. // 99
- // Handles objects with the built-in `forEach`, arrays, and raw objects. // 100
- // Delegates to **ECMAScript 5**'s native `forEach` if available. // 101
- var each = _.each = _.forEach = function(obj, iterator, context) { // 102
- if (obj == null) return; // 103
- if (nativeForEach && obj.forEach === nativeForEach) { // 104
- obj.forEach(iterator, context); // 105
- } else if (looksLikeArray(obj)) { // 106
- for (var i = 0, length = obj.length; i < length; i++) { // 107
- if (iterator.call(context, obj[i], i, obj) === breaker) return; // 108
- } // 109
- } else { // 110
- var keys = _.keys(obj); // 111
- for (var i = 0, length = keys.length; i < length; i++) { // 112
- if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return; // 113
- } // 114
- } // 115
- }; // 116
- // 117
- // Return the results of applying the iterator to each element. // 118
- // Delegates to **ECMAScript 5**'s native `map` if available. // 119
- _.map = _.collect = function(obj, iterator, context) { // 120
- var results = []; // 121
- if (obj == null) return results; // 122
- if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); // 123
- each(obj, function(value, index, list) { // 124
- results.push(iterator.call(context, value, index, list)); // 125
- }); // 126
- return results; // 127
- }; // 128
- // 129
- var reduceError = 'Reduce of empty array with no initial value'; // 130
- // 131
- // **Reduce** builds up a single result from a list of values, aka `inject`, // 132
- // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. // 133
- _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { // 134
- var initial = arguments.length > 2; // 135
- if (obj == null) obj = []; // 136
- if (nativeReduce && obj.reduce === nativeReduce) { // 137
- if (context) iterator = _.bind(iterator, context); // 138
- return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); // 139
- } // 140
- each(obj, function(value, index, list) { // 141
- if (!initial) { // 142
- memo = value; // 143
- initial = true; // 144
- } else { // 145
- memo = iterator.call(context, memo, value, index, list); // 146
- } // 147
- }); // 148
- if (!initial) throw new TypeError(reduceError); // 149
- return memo; // 150
- }; // 151
- // 152
- // The right-associative version of reduce, also known as `foldr`. // 153
- // Delegates to **ECMAScript 5**'s native `reduceRight` if available. // 154
- _.reduceRight = _.foldr = function(obj, iterator, memo, context) { // 155
- var initial = arguments.length > 2; // 156
- if (obj == null) obj = []; // 157
- if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { // 158
- if (context) iterator = _.bind(iterator, context); // 159
- return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); // 160
- } // 161
- var length = obj.length; // 162
- if (!looksLikeArray(obj)) { // 163
- var keys = _.keys(obj); // 164
- length = keys.length; // 165
- } // 166
- each(obj, function(value, index, list) { // 167
- index = keys ? keys[--length] : --length; // 168
- if (!initial) { // 169
- memo = obj[index]; // 170
- initial = true; // 171
- } else { // 172
- memo = iterator.call(context, memo, obj[index], index, list); // 173
- } // 174
- }); // 175
- if (!initial) throw new TypeError(reduceError); // 176
- return memo; // 177
- }; // 178
- // 179
- // Return the first value which passes a truth test. Aliased as `detect`. // 180
- _.find = _.detect = function(obj, iterator, context) { // 181
- var result; // 182
- any(obj, function(value, index, list) { // 183
- if (iterator.call(context, value, index, list)) { // 184
- result = value; // 185
- return true; // 186
- } // 187
- }); // 188
- return result; // 189
- }; // 190
- // 191
- // Return all the elements that pass a truth test. // 192
- // Delegates to **ECMAScript 5**'s native `filter` if available. // 193
- // Aliased as `select`. // 194
- _.filter = _.select = function(obj, iterator, context) { // 195
- var results = []; // 196
- if (obj == null) return results; // 197
- if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); // 198
- each(obj, function(value, index, list) { // 199
- if (iterator.call(context, value, index, list)) results.push(value); // 200
- }); // 201
- return results; // 202
- }; // 203
- // 204
- // Return all the elements for which a truth test fails. // 205
- _.reject = function(obj, iterator, context) { // 206
- return _.filter(obj, function(value, index, list) { // 207
- return !iterator.call(context, value, index, list); // 208
- }, context); // 209
- }; // 210
- // 211
- // Determine whether all of the elements match a truth test. // 212
- // Delegates to **ECMAScript 5**'s native `every` if available. // 213
- // Aliased as `all`. // 214
- _.every = _.all = function(obj, iterator, context) { // 215
- iterator || (iterator = _.identity); // 216
- var result = true; // 217
- if (obj == null) return result; // 218
- if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); // 219
- each(obj, function(value, index, list) { // 220
- if (!(result = result && iterator.call(context, value, index, list))) return breaker; // 221
- }); // 222
- return !!result; // 223
- }; // 224
- // 225
- // Determine if at least one element in the object matches a truth test. // 226
- // Delegates to **ECMAScript 5**'s native `some` if available. // 227
- // Aliased as `any`. // 228
- var any = _.some = _.any = function(obj, iterator, context) { // 229
- iterator || (iterator = _.identity); // 230
- var result = false; // 231
- if (obj == null) return result; // 232
- if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); // 233
- each(obj, function(value, index, list) { // 234
- if (result || (result = iterator.call(context, value, index, list))) return breaker; // 235
- }); // 236
- return !!result; // 237
- }; // 238
- // 239
- // Determine if the array or object contains a given value (using `===`). // 240
- // Aliased as `include`. // 241
- _.contains = _.include = function(obj, target) { // 242
- if (obj == null) return false; // 243
- if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; // 244
- return any(obj, function(value) { // 245
- return value === target; // 246
- }); // 247
- }; // 248
- // 249
- // Invoke a method (with arguments) on every item in a collection. // 250
- _.invoke = function(obj, method) { // 251
- var args = slice.call(arguments, 2); // 252
- var isFunc = _.isFunction(method); // 253
- return _.map(obj, function(value) { // 254
- return (isFunc ? method : value[method]).apply(value, args); // 255
- }); // 256
- }; // 257
- // 258
- // Convenience version of a common use case of `map`: fetching a property. // 259
- _.pluck = function(obj, key) { // 260
- return _.map(obj, function(value){ return value[key]; }); // 261
- }; // 262
- // 263
- // Convenience version of a common use case of `filter`: selecting only objects // 264
- // containing specific `key:value` pairs. // 265
- _.where = function(obj, attrs, first) { // 266
- if (_.isEmpty(attrs)) return first ? void 0 : []; // 267
- return _[first ? 'find' : 'filter'](obj, function(value) { // 268
- for (var key in attrs) { // 269
- if (attrs[key] !== value[key]) return false; // 270
- } // 271
- return true; // 272
- }); // 273
- }; // 274
- // 275
- // Convenience version of a common use case of `find`: getting the first object // 276
- // containing specific `key:value` pairs. // 277
- _.findWhere = function(obj, attrs) { // 278
- return _.where(obj, attrs, true); // 279
- }; // 280
- // 281
- // Return the maximum element or (element-based computation). // 282
- // Can't optimize arrays of integers longer than 65,535 elements. // 283
- // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797) // 284
- _.max = function(obj, iterator, context) { // 285
- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { // 286
- return Math.max.apply(Math, obj); // 287
- } // 288
- if (!iterator && _.isEmpty(obj)) return -Infinity; // 289
- var result = {computed : -Infinity, value: -Infinity}; // 290
- each(obj, function(value, index, list) { // 291
- var computed = iterator ? iterator.call(context, value, index, list) : value; // 292
- computed > result.computed && (result = {value : value, computed : computed}); // 293
- }); // 294
- return result.value; // 295
- }; // 296
- // 297
- // Return the minimum element (or element-based computation). // 298
- _.min = function(obj, iterator, context) { // 299
- if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { // 300
- return Math.min.apply(Math, obj); // 301
- } // 302
- if (!iterator && _.isEmpty(obj)) return Infinity; // 303
- var result = {computed : Infinity, value: Infinity}; // 304
- each(obj, function(value, index, list) { // 305
- var computed = iterator ? iterator.call(context, value, index, list) : value; // 306
- computed < result.computed && (result = {value : value, computed : computed}); // 307
- }); // 308
- return result.value; // 309
- }; // 310
- // 311
- // Shuffle an array, using the modern version of the // 312
- // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). // 313
- _.shuffle = function(obj) { // 314
- var rand; // 315
- var index = 0; // 316
- var shuffled = []; // 317
- each(obj, function(value) { // 318
- rand = _.random(index++); // 319
- shuffled[index - 1] = shuffled[rand]; // 320
- shuffled[rand] = value; // 321
- }); // 322
- return shuffled; // 323
- }; // 324
- // 325
- // Sample **n** random values from an array. // 326
- // If **n** is not specified, returns a single random element from the array. // 327
- // The internal `guard` argument allows it to work with `map`. // 328
- _.sample = function(obj, n, guard) { // 329
- if (arguments.length < 2 || guard) { // 330
- return obj[_.random(obj.length - 1)]; // 331
- } // 332
- return _.shuffle(obj).slice(0, Math.max(0, n)); // 333
- }; // 334
- // 335
- // An internal function to generate lookup iterators. // 336
- var lookupIterator = function(value) { // 337
- return _.isFunction(value) ? value : function(obj){ return obj[value]; }; // 338
- }; // 339
- // 340
- // Sort the object's values by a criterion produced by an iterator. // 341
- _.sortBy = function(obj, value, context) { // 342
- var iterator = lookupIterator(value); // 343
- return _.pluck(_.map(obj, function(value, index, list) { // 344
- return { // 345
- value: value, // 346
- index: index, // 347
- criteria: iterator.call(context, value, index, list) // 348
- }; // 349
- }).sort(function(left, right) { // 350
- var a = left.criteria; // 351
- var b = right.criteria; // 352
- if (a !== b) { // 353
- if (a > b || a === void 0) return 1; // 354
- if (a < b || b === void 0) return -1; // 355
- } // 356
- return left.index - right.index; // 357
- }), 'value'); // 358
- }; // 359
- // 360
- // An internal function used for aggregate "group by" operations. // 361
- var group = function(behavior) { // 362
- return function(obj, value, context) { // 363
- var result = {}; // 364
- var iterator = value == null ? _.identity : lookupIterator(value); // 365
- each(obj, function(value, index) { // 366
- var key = iterator.call(context, value, index, obj); // 367
- behavior(result, key, value); // 368
- }); // 369
- return result; // 370
- }; // 371
- }; // 372
- // 373
- // Groups the object's values by a criterion. Pass either a string attribute // 374
- // to group by, or a function that returns the criterion. // 375
- _.groupBy = group(function(result, key, value) { // 376
- (_.has(result, key) ? result[key] : (result[key] = [])).push(value); // 377
- }); // 378
- // 379
- // Indexes the object's values by a criterion, similar to `groupBy`, but for // 380
- // when you know that your index values will be unique. // 381
- _.indexBy = group(function(result, key, value) { // 382
- result[key] = value; // 383
- }); // 384
- // 385
- // Counts instances of an object that group by a certain criterion. Pass // 386
- // either a string attribute to count by, or a function that returns the // 387
- // criterion. // 388
- _.countBy = group(function(result, key) { // 389
- _.has(result, key) ? result[key]++ : result[key] = 1; // 390
- }); // 391
- // 392
- // Use a comparator function to figure out the smallest index at which // 393
- // an object should be inserted so as to maintain order. Uses binary search. // 394
- _.sortedIndex = function(array, obj, iterator, context) { // 395
- iterator = iterator == null ? _.identity : lookupIterator(iterator); // 396
- var value = iterator.call(context, obj); // 397
- var low = 0, high = array.length; // 398
- while (low < high) { // 399
- var mid = (low + high) >>> 1; // 400
- iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid; // 401
- } // 402
- return low; // 403
- }; // 404
- // 405
- // Safely create a real, live array from anything iterable. // 406
- _.toArray = function(obj) { // 407
- if (!obj) return []; // 408
- if (_.isArray(obj)) return slice.call(obj); // 409
- if (looksLikeArray(obj)) return _.map(obj, _.identity); // 410
- return _.values(obj); // 411
- }; // 412
- // 413
- // Return the number of elements in an object. // 414
- _.size = function(obj) { // 415
- if (obj == null) return 0; // 416
- return (looksLikeArray(obj)) ? obj.length : _.keys(obj).length; // 417
- }; // 418
- // 419
- // Array Functions // 420
- // --------------- // 421
- // 422
- // Get the first element of an array. Passing **n** will return the first N // 423
- // values in the array. Aliased as `head` and `take`. The **guard** check // 424
- // allows it to work with `_.map`. // 425
- _.first = _.head = _.take = function(array, n, guard) { // 426
- if (array == null) return void 0; // 427
- return (n == null) || guard ? array[0] : slice.call(array, 0, n); // 428
- }; // 429
- // 430
- // Returns everything but the last entry of the array. Especially useful on // 431
- // the arguments object. Passing **n** will return all the values in // 432
- // the array, excluding the last N. The **guard** check allows it to work with // 433
- // `_.map`. // 434
- _.initial = function(array, n, guard) { // 435
- return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); // 436
- }; // 437
- // 438
- // Get the last element of an array. Passing **n** will return the last N // 439
- // values in the array. The **guard** check allows it to work with `_.map`. // 440
- _.last = function(array, n, guard) { // 441
- if (array == null) return void 0; // 442
- if ((n == null) || guard) { // 443
- return array[array.length - 1]; // 444
- } else { // 445
- return slice.call(array, Math.max(array.length - n, 0)); // 446
- } // 447
- }; // 448
- // 449
- // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. // 450
- // Especially useful on the arguments object. Passing an **n** will return // 451
- // the rest N values in the array. The **guard** // 452
- // check allows it to work with `_.map`. // 453
- _.rest = _.tail = _.drop = function(array, n, guard) { // 454
- return slice.call(array, (n == null) || guard ? 1 : n); // 455
- }; // 456
- // 457
- // Trim out all falsy values from an array. // 458
- _.compact = function(array) { // 459
- return _.filter(array, _.identity); // 460
- }; // 461
- // 462
- // Internal implementation of a recursive `flatten` function. // 463
- var flatten = function(input, shallow, output) { // 464
- if (shallow && _.every(input, _.isArray)) { // 465
- return concat.apply(output, input); // 466
- } // 467
- each(input, function(value) { // 468
- if (_.isArray(value) || _.isArguments(value)) { // 469
- shallow ? push.apply(output, value) : flatten(value, shallow, output); // 470
- } else { // 471
- output.push(value); // 472
- } // 473
- }); // 474
- return output; // 475
- }; // 476
- // 477
- // Flatten out an array, either recursively (by default), or just one level. // 478
- _.flatten = function(array, shallow) { // 479
- return flatten(array, shallow, []); // 480
- }; // 481
- // 482
- // Return a version of the array that does not contain the specified value(s). // 483
- _.without = function(array) { // 484
- return _.difference(array, slice.call(arguments, 1)); // 485
- }; // 486
- // 487
- // Produce a duplicate-free version of the array. If the array has already // 488
- // been sorted, you have the option of using a faster algorithm. // 489
- // Aliased as `unique`. // 490
- _.uniq = _.unique = function(array, isSorted, iterator, context) { // 491
- if (_.isFunction(isSorted)) { // 492
- context = iterator; // 493
- iterator = isSorted; // 494
- isSorted = false; // 495
- } // 496
- var initial = iterator ? _.map(array, iterator, context) : array; // 497
- var results = []; // 498
- var seen = []; // 499
- each(initial, function(value, index) { // 500
- if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) { // 501
- seen.push(value); // 502
- results.push(array[index]); // 503
- } // 504
- }); // 505
- return results; // 506
- }; // 507
- // 508
- // Produce an array that contains the union: each distinct element from all of // 509
- // the passed-in arrays. // 510
- _.union = function() { // 511
- return _.uniq(_.flatten(arguments, true)); // 512
- }; // 513
- // 514
- // Produce an array that contains every item shared between all the // 515
- // passed-in arrays. // 516
- _.intersection = function(array) { // 517
- var rest = slice.call(arguments, 1); // 518
- return _.filter(_.uniq(array), function(item) { // 519
- return _.every(rest, function(other) { // 520
- return _.indexOf(other, item) >= 0; // 521
- }); // 522
- }); // 523
- }; // 524
- // 525
- // Take the difference between one array and a number of other arrays. // 526
- // Only the elements present in just the first array will remain. // 527
- _.difference = function(array) { // 528
- var rest = concat.apply(ArrayProto, slice.call(arguments, 1)); // 529
- return _.filter(array, function(value){ return !_.contains(rest, value); }); // 530
- }; // 531
- // 532
- // Zip together multiple lists into a single array -- elements that share // 533
- // an index go together. // 534
- _.zip = function() { // 535
- var length = _.max(_.pluck(arguments, "length").concat(0)); // 536
- var results = new Array(length); // 537
- for (var i = 0; i < length; i++) { // 538
- results[i] = _.pluck(arguments, '' + i); // 539
- } // 540
- return results; // 541
- }; // 542
- // 543
- // Converts lists into objects. Pass either a single array of `[key, value]` // 544
- // pairs, or two parallel arrays of the same length -- one of keys, and one of // 545
- // the corresponding values. // 546
- _.object = function(list, values) { // 547
- if (list == null) return {}; // 548
- var result = {}; // 549
- for (var i = 0, length = list.length; i < length; i++) { // 550
- if (values) { // 551
- result[list[i]] = values[i]; // 552
- } else { // 553
- result[list[i][0]] = list[i][1]; // 554
- } // 555
- } // 556
- return result; // 557
- }; // 558
- // 559
- // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), // 560
- // we need this function. Return the position of the first occurrence of an // 561
- // item in an array, or -1 if the item is not included in the array. // 562
- // Delegates to **ECMAScript 5**'s native `indexOf` if available. // 563
- // If the array is large and already in sort order, pass `true` // 564
- // for **isSorted** to use binary search. // 565
- _.indexOf = function(array, item, isSorted) { // 566
- if (array == null) return -1; // 567
- var i = 0, length = array.length; // 568
- if (isSorted) { // 569
- if (typeof isSorted == 'number') { // 570
- i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted); // 571
- } else { // 572
- i = _.sortedIndex(array, item); // 573
- return array[i] === item ? i : -1; // 574
- } // 575
- } // 576
- if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted); // 577
- for (; i < length; i++) if (array[i] === item) return i; // 578
- return -1; // 579
- }; // 580
- // 581
- // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. // 582
- _.lastIndexOf = function(array, item, from) { // 583
- if (array == null) return -1; // 584
- var hasIndex = from != null; // 585
- if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) { // 586
- return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item); // 587
- } // 588
- var i = (hasIndex ? from : array.length); // 589
- while (i--) if (array[i] === item) return i; // 590
- return -1; // 591
- }; // 592
- // 593
- // Generate an integer Array containing an arithmetic progression. A port of // 594
- // the native Python `range()` function. See // 595
- // [the Python documentation](http://docs.python.org/library/functions.html#range). // 596
- _.range = function(start, stop, step) { // 597
- if (arguments.length <= 1) { // 598
- stop = start || 0; // 599
- start = 0; // 600
- } // 601
- step = arguments[2] || 1; // 602
- // 603
- var length = Math.max(Math.ceil((stop - start) / step), 0); // 604
- var idx = 0; // 605
- var range = new Array(length); // 606
- // 607
- while(idx < length) { // 608
- range[idx++] = start; // 609
- start += step; // 610
- } // 611
- // 612
- return range; // 613
- }; // 614
- // 615
- // Function (ahem) Functions // 616
- // ------------------ // 617
- // 618
- // Reusable constructor function for prototype setting. // 619
- var ctor = function(){}; // 620
- // 621
- // Create a function bound to a given object (assigning `this`, and arguments, // 622
- // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if // 623
- // available. // 624
- _.bind = function(func, context) { // 625
- var args, bound; // 626
- if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); // 627
- if (!_.isFunction(func)) throw new TypeError; // 628
- args = slice.call(arguments, 2); // 629
- return bound = function() { // 630
- if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments))); // 631
- ctor.prototype = func.prototype; // 632
- var self = new ctor; // 633
- ctor.prototype = null; // 634
- var result = func.apply(self, args.concat(slice.call(arguments))); // 635
- if (Object(result) === result) return result; // 636
- return self; // 637
- }; // 638
- }; // 639
- // 640
- // Partially apply a function by creating a version that has had some of its // 641
- // arguments pre-filled, without changing its dynamic `this` context. // 642
- _.partial = function(func) { // 643
- var args = slice.call(arguments, 1); // 644
- return function() { // 645
- return func.apply(this, args.concat(slice.call(arguments))); // 646
- }; // 647
- }; // 648
- // 649
- // Bind all of an object's methods to that object. Useful for ensuring that // 650
- // all callbacks defined on an object belong to it. // 651
- _.bindAll = function(obj) { // 652
- var funcs = slice.call(arguments, 1); // 653
- if (funcs.length === 0) throw new Error("bindAll must be passed function names"); // 654
- each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); // 655
- return obj; // 656
- }; // 657
- // 658
- // Memoize an expensive function by storing its results. // 659
- _.memoize = function(func, hasher) { // 660
- var memo = {}; // 661
- hasher || (hasher = _.identity); // 662
- return function() { // 663
- var key = hasher.apply(this, arguments); // 664
- return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); // 665
- }; // 666
- }; // 667
- // 668
- // Delays a function for the given number of milliseconds, and then calls // 669
- // it with the arguments supplied. // 670
- _.delay = function(func, wait) { // 671
- var args = slice.call(arguments, 2); // 672
- return setTimeout(function(){ return func.apply(null, args); }, wait); // 673
- }; // 674
- // 675
- // Defers a function, scheduling it to run after the current call stack has // 676
- // cleared. // 677
- _.defer = function(func) { // 678
- return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); // 679
- }; // 680
- // 681
- // Returns a function, that, when invoked, will only be triggered at most once // 682
- // during a given window of time. Normally, the throttled function will run // 683
- // as much as it can, without ever going more than once per `wait` duration; // 684
- // but if you'd like to disable the execution on the leading edge, pass // 685
- // `{leading: false}`. To disable execution on the trailing edge, ditto. // 686
- _.throttle = function(func, wait, options) { // 687
- var context, args, result; // 688
- var timeout = null; // 689
- var previous = 0; // 690
- options || (options = {}); // 691
- var later = function() { // 692
- previous = options.leading === false ? 0 : new Date; // 693
- timeout = null; // 694
- result = func.apply(context, args); // 695
- }; // 696
- return function() { // 697
- var now = new Date; // 698
- if (!previous && options.leading === false) previous = now; // 699
- var remaining = wait - (now - previous); // 700
- context = this; // 701
- args = arguments; // 702
- if (remaining <= 0) { // 703
- clearTimeout(timeout); // 704
- timeout = null; // 705
- previous = now; // 706
- result = func.apply(context, args); // 707
- } else if (!timeout && options.trailing !== false) { // 708
- timeout = setTimeout(later, remaining); // 709
- } // 710
- return result; // 711
- }; // 712
- }; // 713
- // 714
- // Returns a function, that, as long as it continues to be invoked, will not // 715
- // be triggered. The function will be called after it stops being called for // 716
- // N milliseconds. If `immediate` is passed, trigger the function on the // 717
- // leading edge, instead of the trailing. // 718
- _.debounce = function(func, wait, immediate) { // 719
- var timeout, args, context, timestamp, result; // 720
- return function() { // 721
- context = this; // 722
- args = arguments; // 723
- timestamp = new Date(); // 724
- var later = function() { // 725
- var last = (new Date()) - timestamp; // 726
- if (last < wait) { // 727
- timeout = setTimeout(later, wait - last); // 728
- } else { // 729
- timeout = null; // 730
- if (!immediate) result = func.apply(context, args); // 731
- } // 732
- }; // 733
- var callNow = immediate && !timeout; // 734
- if (!timeout) { // 735
- timeout = setTimeout(later, wait); // 736
- } // 737
- if (callNow) result = func.apply(context, args); // 738
- return result; // 739
- }; // 740
- }; // 741
- // 742
- // Returns a function that will be executed at most one time, no matter how // 743
- // often you call it. Useful for lazy initialization. // 744
- _.once = function(func) { // 745
- var ran = false, memo; // 746
- return function() { // 747
- if (ran) return memo; // 748
- ran = true; // 749
- memo = func.apply(this, arguments); // 750
- func = null; // 751
- return memo; // 752
- }; // 753
- }; // 754
- // 755
- // Returns the first function passed as an argument to the second, // 756
- // allowing you to adjust arguments, run code before and after, and // 757
- // conditionally execute the original function. // 758
- _.wrap = function(func, wrapper) { // 759
- return function() { // 760
- var args = [func]; // 761
- push.apply(args, arguments); // 762
- return wrapper.apply(this, args); // 763
- }; // 764
- }; // 765
- // 766
- // Returns a function that is the composition of a list of functions, each // 767
- // consuming the return value of the function that follows. // 768
- _.compose = function() { // 769
- var funcs = arguments; // 770
- return function() { // 771
- var args = arguments; // 772
- for (var i = funcs.length - 1; i >= 0; i--) { // 773
- args = [funcs[i].apply(this, args)]; // 774
- } // 775
- return args[0]; // 776
- }; // 777
- }; // 778
- // 779
- // Returns a function that will only be executed after being called N times. // 780
- _.after = function(times, func) { // 781
- return function() { // 782
- if (--times < 1) { // 783
- return func.apply(this, arguments); // 784
- } // 785
- }; // 786
- }; // 787
- // 788
- // Object Functions // 789
- // ---------------- // 790
- // 791
- // Retrieve the names of an object's properties. // 792
- // Delegates to **ECMAScript 5**'s native `Object.keys` // 793
- _.keys = nativeKeys || function(obj) { // 794
- if (obj !== Object(obj)) throw new TypeError('Invalid object'); // 795
- var keys = []; // 796
- for (var key in obj) if (_.has(obj, key)) keys.push(key); // 797
- return keys; // 798
- }; // 799
- // 800
- // Retrieve the values of an object's properties. // 801
- _.values = function(obj) { // 802
- var keys = _.keys(obj); // 803
- var length = keys.length; // 804
- var values = new Array(length); // 805
- for (var i = 0; i < length; i++) { // 806
- values[i] = obj[keys[i]]; // 807
- } // 808
- return values; // 809
- }; // 810
- // 811
- // Convert an object into a list of `[key, value]` pairs. // 812
- _.pairs = function(obj) { // 813
- var keys = _.keys(obj); // 814
- var length = keys.length; // 815
- var pairs = new Array(length); // 816
- for (var i = 0; i < length; i++) { // 817
- pairs[i] = [keys[i], obj[keys[i]]]; // 818
- } // 819
- return pairs; // 820
- }; // 821
- // 822
- // Invert the keys and values of an object. The values must be serializable. // 823
- _.invert = function(obj) { // 824
- var result = {}; // 825
- var keys = _.keys(obj); // 826
- for (var i = 0, length = keys.length; i < length; i++) { // 827
- result[obj[keys[i]]] = keys[i]; // 828
- } // 829
- return result; // 830
- }; // 831
- // 832
- // Return a sorted list of the function names available on the object. // 833
- // Aliased as `methods` // 834
- _.functions = _.methods = function(obj) { // 835
- var names = []; // 836
- for (var key in obj) { // 837
- if (_.isFunction(obj[key])) names.push(key); // 838
- } // 839
- return names.sort(); // 840
- }; // 841
- // 842
- // Extend a given object with all the properties in passed-in object(s). // 843
- _.extend = function(obj) { // 844
- each(slice.call(arguments, 1), function(source) { // 845
- if (source) { // 846
- for (var prop in source) { // 847
- obj[prop] = source[prop]; // 848
- } // 849
- } // 850
- }); // 851
- return obj; // 852
- }; // 853
- // 854
- // Return a copy of the object only containing the whitelisted properties. // 855
- _.pick = function(obj) { // 856
- var copy = {}; // 857
- var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); // 858
- each(keys, function(key) { // 859
- if (key in obj) copy[key] = obj[key]; // 860
- }); // 861
- return copy; // 862
- }; // 863
- // 864
- // Return a copy of the object without the blacklisted properties. // 865
- _.omit = function(obj) { // 866
- var copy = {}; // 867
- var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); // 868
- for (var key in obj) { // 869
- if (!_.contains(keys, key)) copy[key] = obj[key]; // 870
- } // 871
- return copy; // 872
- }; // 873
- // 874
- // Fill in a given object with default properties. // 875
- _.defaults = function(obj) { // 876
- each(slice.call(arguments, 1), function(source) { // 877
- if (source) { // 878
- for (var prop in source) { // 879
- if (obj[prop] === void 0) obj[prop] = source[prop]; // 880
- } // 881
- } // 882
- }); // 883
- return obj; // 884
- }; // 885
- // 886
- // Create a (shallow-cloned) duplicate of an object. // 887
- _.clone = function(obj) { // 888
- if (!_.isObject(obj)) return obj; // 889
- return _.isArray(obj) ? obj.slice() : _.extend({}, obj); // 890
- }; // 891
- // 892
- // Invokes interceptor with the obj, and then returns obj. // 893
- // The primary purpose of this method is to "tap into" a method chain, in // 894
- // order to perform operations on intermediate results within the chain. // 895
- _.tap = function(obj, interceptor) { // 896
- interceptor(obj); // 897
- return obj; // 898
- }; // 899
- // 900
- // Internal recursive comparison function for `isEqual`. // 901
- var eq = function(a, b, aStack, bStack) { // 902
- // Identical objects are equal. `0 === -0`, but they aren't identical. // 903
- // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). // 904
- if (a === b) return a !== 0 || 1 / a == 1 / b; // 905
- // A strict comparison is necessary because `null == undefined`. // 906
- if (a == null || b == null) return a === b; // 907
- // Unwrap any wrapped objects. // 908
- if (a instanceof _) a = a._wrapped; // 909
- if (b instanceof _) b = b._wrapped; // 910
- // Compare `[[Class]]` names. // 911
- var className = toString.call(a); // 912
- if (className != toString.call(b)) return false; // 913
- switch (className) { // 914
- // Strings, numbers, dates, and booleans are compared by value. // 915
- case '[object String]': // 916
- // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is // 917
- // equivalent to `new String("5")`. // 918
- return a == String(b); // 919
- case '[object Number]': // 920
- // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for // 921
- // other numeric values. // 922
- return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); // 923
- case '[object Date]': // 924
- case '[object Boolean]': // 925
- // Coerce dates and booleans to numeric primitive values. Dates are compared by their // 926
- // millisecond representations. Note that invalid dates with millisecond representations // 927
- // of `NaN` are not equivalent. // 928
- return +a == +b; // 929
- // RegExps are compared by their source patterns and flags. // 930
- case '[object RegExp]': // 931
- return a.source == b.source && // 932
- a.global == b.global && // 933
- a.multiline == b.multiline && // 934
- a.ignoreCase == b.ignoreCase; // 935
- } // 936
- if (typeof a != 'object' || typeof b != 'object') return false; // 937
- // Assume equality for cyclic structures. The algorithm for detecting cyclic // 938
- // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. // 939
- var length = aStack.length; // 940
- while (length--) { // 941
- // Linear search. Performance is inversely proportional to the number of // 942
- // unique nested structures. // 943
- if (aStack[length] == a) return bStack[length] == b; // 944
- } // 945
- // Objects with different constructors are not equivalent, but `Object`s // 946
- // from different frames are. // 947
- var aCtor = a.constructor, bCtor = b.constructor; // 948
- if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) && // 949
- _.isFunction(bCtor) && (bCtor instanceof bCtor))) { // 950
- return false; // 951
- } // 952
- // Add the first object to the stack of traversed objects. // 953
- aStack.push(a); // 954
- bStack.push(b); // 955
- var size = 0, result = true; // 956
- // Recursively compare objects and arrays. // 957
- if (className == '[object Array]') { // 958
- // Compare array lengths to determine if a deep comparison is necessary. // 959
- size = a.length; // 960
- result = size == b.length; // 961
- if (result) { // 962
- // Deep compare the contents, ignoring non-numeric properties. // 963
- while (size--) { // 964
- if (!(result = eq(a[size], b[size], aStack, bStack))) break; // 965
- } // 966
- } // 967
- } else { // 968
- // Deep compare objects. // 969
- for (var key in a) { // 970
- if (_.has(a, key)) { // 971
- // Count the expected number of properties. // 972
- size++; // 973
- // Deep compare each member. // 974
- if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; // 975
- } // 976
- } // 977
- // Ensure that both objects contain the same number of properties. // 978
- if (result) { // 979
- for (key in b) { // 980
- if (_.has(b, key) && !(size--)) break; // 981
- } // 982
- result = !size; // 983
- } // 984
- } // 985
- // Remove the first object from the stack of traversed objects. // 986
- aStack.pop(); // 987
- bStack.pop(); // 988
- return result; // 989
- }; // 990
- // 991
- // Perform a deep comparison to check if two objects are equal. // 992
- _.isEqual = function(a, b) { // 993
- return eq(a, b, [], []); // 994
- }; // 995
- // 996
- // Is a given array, string, or object empty? // 997
- // An "empty" object has no enumerable own-properties. // 998
- _.isEmpty = function(obj) { // 999
- if (obj == null) return true; // 1000
- if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; // 1001
- for (var key in obj) if (_.has(obj, key)) return false; // 1002
- return true; // 1003
- }; // 1004
- // 1005
- // Is a given value a DOM element? // 1006
- _.isElement = function(obj) { // 1007
- return !!(obj && obj.nodeType === 1); // 1008
- }; // 1009
- // 1010
- // Is a given value an array? // 1011
- // Delegates to ECMA5's native Array.isArray // 1012
- _.isArray = nativeIsArray || function(obj) { // 1013
- return toString.call(obj) == '[object Array]'; // 1014
- }; // 1015
- // 1016
- // Is a given variable an object? // 1017
- _.isObject = function(obj) { // 1018
- return obj === Object(obj); // 1019
- }; // 1020
- // 1021
- // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. // 1022
- each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { // 1023
- _['is' + name] = function(obj) { // 1024
- return toString.call(obj) == '[object ' + name + ']'; // 1025
- }; // 1026
- }); // 1027
- // 1028
- // Define a fallback version of the method in browsers (ahem, IE), where // 1029
- // there isn't any inspectable "Arguments" type. // 1030
- if (!_.isArguments(arguments)) { // 1031
- _.isArguments = function(obj) { // 1032
- return !!(obj && _.has(obj, 'callee')); // 1033
- }; // 1034
- } // 1035
- // 1036
- // Optimize `isFunction` if appropriate. // 1037
- if (typeof (/./) !== 'function') { // 1038
- _.isFunction = function(obj) { // 1039
- return typeof obj === 'function'; // 1040
- }; // 1041
- } // 1042
- // 1043
- // Is a given object a finite number? // 1044
- _.isFinite = function(obj) { // 1045
- return isFinite(obj) && !isNaN(parseFloat(obj)); // 1046
- }; // 1047
- // 1048
- // Is the given value `NaN`? (NaN is the only number which does not equal itself). // 1049
- _.isNaN = function(obj) { // 1050
- return _.isNumber(obj) && obj != +obj; // 1051
- }; // 1052
- // 1053
- // Is a given value a boolean? // 1054
- _.isBoolean = function(obj) { // 1055
- return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; // 1056
- }; // 1057
- // 1058
- // Is a given value equal to null? // 1059
- _.isNull = function(obj) { // 1060
- return obj === null; // 1061
- }; // 1062
- // 1063
- // Is a given variable undefined? // 1064
- _.isUndefined = function(obj) { // 1065
- return obj === void 0; // 1066
- }; // 1067
- // 1068
- // Shortcut function for checking if an object has a given property directly // 1069
- // on itself (in other words, not on a prototype). // 1070
- _.has = function(obj, key) { // 1071
- return hasOwnProperty.call(obj, key); // 1072
- }; // 1073
- // 1074
- // Utility Functions // 1075
- // ----------------- // 1076
- // 1077
- // Run Underscore.js in *noConflict* mode, returning the `_` variable to its // 1078
- // previous owner. Returns a reference to the Underscore object. // 1079
- _.noConflict = function() { // 1080
- root._ = previousUnderscore; // 1081
- return this; // 1082
- }; // 1083
- // 1084
- // Keep the identity function around for default iterators. // 1085
- _.identity = function(value) { // 1086
- return value; // 1087
- }; // 1088
- // 1089
- // Run a function **n** times. // 1090
- _.times = function(n, iterator, context) { // 1091
- var accum = Array(Math.max(0, n)); // 1092
- for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i); // 1093
- return accum; // 1094
- }; // 1095
- // 1096
- // Return a random integer between min and max (inclusive). // 1097
- _.random = function(min, max) { // 1098
- if (max == null) { // 1099
- max = min; // 1100
- min = 0; // 1101
- } // 1102
- return min + Math.floor(Math.random() * (max - min + 1)); // 1103
- }; // 1104
- // 1105
- // List of HTML entities for escaping. // 1106
- var entityMap = { // 1107
- escape: { // 1108
- '&': '&', // 1109
- '<': '<', // 1110
- '>': '>', // 1111
- '"': '"', // 1112
- "'": ''' // 1113
- } // 1114
- }; // 1115
- entityMap.unescape = _.invert(entityMap.escape); // 1116
- // 1117
- // Regexes containing the keys and values listed immediately above. // 1118
- var entityRegexes = { // 1119
- escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'), // 1120
- unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g') // 1121
- }; // 1122
- // 1123
- // Functions for escaping and unescaping strings to/from HTML interpolation. // 1124
- _.each(['escape', 'unescape'], function(method) { // 1125
- _[method] = function(string) { // 1126
- if (string == null) return ''; // 1127
- return ('' + string).replace(entityRegexes[method], function(match) { // 1128
- return entityMap[method][match]; // 1129
- }); // 1130
- }; // 1131
- }); // 1132
- // 1133
- // If the value of the named `property` is a function then invoke it with the // 1134
- // `object` as context; otherwise, return it. // 1135
- _.result = function(object, property) { // 1136
- if (object == null) return void 0; // 1137
- var value = object[property]; // 1138
- return _.isFunction(value) ? value.call(object) : value; // 1139
- }; // 1140
- // 1141
- // Add your own custom functions to the Underscore object. // 1142
- _.mixin = function(obj) { // 1143
- each(_.functions(obj), function(name) { // 1144
- var func = _[name] = obj[name]; // 1145
- _.prototype[name] = function() { // 1146
- var args = [this._wrapped]; // 1147
- push.apply(args, arguments); // 1148
- return result.call(this, func.apply(_, args)); // 1149
- }; // 1150
- }); // 1151
- }; // 1152
- // 1153
- // Generate a unique integer id (unique within the entire client session). // 1154
- // Useful for temporary DOM ids. // 1155
- var idCounter = 0; // 1156
- _.uniqueId = function(prefix) { // 1157
- var id = ++idCounter + ''; // 1158
- return prefix ? prefix + id : id; // 1159
- }; // 1160
- // 1161
- // By default, Underscore uses ERB-style template delimiters, change the // 1162
- // following template settings to use alternative delimiters. // 1163
- _.templateSettings = { // 1164
- evaluate : /<%([\s\S]+?)%>/g, // 1165
- interpolate : /<%=([\s\S]+?)%>/g, // 1166
- escape : /<%-([\s\S]+?)%>/g // 1167
- }; // 1168
- // 1169
- // When customizing `templateSettings`, if you don't want to define an // 1170
- // interpolation, evaluation or escaping regex, we need one that is // 1171
- // guaranteed not to match. // 1172
- var noMatch = /(.)^/; // 1173
- // 1174
- // Certain characters need to be escaped so that they can be put into a // 1175
- // string literal. // 1176
- var escapes = { // 1177
- "'": "'", // 1178
- '\\': '\\', // 1179
- '\r': 'r', // 1180
- '\n': 'n', // 1181
- '\t': 't', // 1182
- '\u2028': 'u2028', // 1183
- '\u2029': 'u2029' // 1184
- }; // 1185
- // 1186
- var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; // 1187
- // 1188
- // JavaScript micro-templating, similar to John Resig's implementation. // 1189
- // Underscore templating handles arbitrary delimiters, preserves whitespace, // 1190
- // and correctly escapes quotes within interpolated code. // 1191
- _.template = function(text, data, settings) { // 1192
- var render; // 1193
- settings = _.defaults({}, settings, _.templateSettings); // 1194
- // 1195
- // Combine delimiters into one regular expression via alternation. // 1196
- var matcher = new RegExp([ // 1197
- (settings.escape || noMatch).source, // 1198
- (settings.interpolate || noMatch).source, // 1199
- (settings.evaluate || noMatch).source // 1200
- ].join('|') + '|$', 'g'); // 1201
- // 1202
- // Compile the template source, escaping string literals appropriately. // 1203
- var index = 0; // 1204
- var source = "__p+='"; // 1205
- text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { // 1206
- source += text.slice(index, offset) // 1207
- .replace(escaper, function(match) { return '\\' + escapes[match]; }); // 1208
- // 1209
- if (escape) { // 1210
- source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; // 1211
- } // 1212
- if (interpolate) { // 1213
- source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; // 1214
- } // 1215
- if (evaluate) { // 1216
- source += "';\n" + evaluate + "\n__p+='"; // 1217
- } // 1218
- index = offset + match.length; // 1219
- return match; // 1220
- }); // 1221
- source += "';\n"; // 1222
- // 1223
- // If a variable is not specified, place data values in local scope. // 1224
- if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; // 1225
- // 1226
- source = "var __t,__p='',__j=Array.prototype.join," + // 1227
- "print=function(){__p+=__j.call(arguments,'');};\n" + // 1228
- source + "return __p;\n"; // 1229
- // 1230
- try { // 1231
- render = new Function(settings.variable || 'obj', '_', source); // 1232
- } catch (e) { // 1233
- e.source = source; // 1234
- throw e; // 1235
- } // 1236
- // 1237
- if (data) return render(data, _); // 1238
- var template = function(data) { // 1239
- return render.call(this, data, _); // 1240
- }; // 1241
- // 1242
- // Provide the compiled function source as a convenience for precompilation. // 1243
- template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; // 1244
- // 1245
- return template; // 1246
- }; // 1247
- // 1248
- // Add a "chain" function, which will delegate to the wrapper. // 1249
- _.chain = function(obj) { // 1250
- return _(obj).chain(); // 1251
- }; // 1252
- // 1253
- // OOP // 1254
- // --------------- // 1255
- // If Underscore is called as a function, it returns a wrapped object that // 1256
- // can be used OO-style. This wrapper holds altered versions of all the // 1257
- // underscore functions. Wrapped objects may be chained. // 1258
- // 1259
- // Helper function to continue chaining intermediate results. // 1260
- var result = function(obj) { // 1261
- return this._chain ? _(obj).chain() : obj; // 1262
- }; // 1263
- // 1264
- // Add all of the Underscore functions to the wrapper object. // 1265
- _.mixin(_); // 1266
- // 1267
- // Add all mutator Array functions to the wrapper. // 1268
- each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { // 1269
- var method = ArrayProto[name]; // 1270
- _.prototype[name] = function() { // 1271
- var obj = this._wrapped; // 1272
- method.apply(obj, arguments); // 1273
- if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0]; // 1274
- return result.call(this, obj); // 1275
- }; // 1276
- }); // 1277
- // 1278
- // Add all accessor Array functions to the wrapper. // 1279
- each(['concat', 'join', 'slice'], function(name) { // 1280
- var method = ArrayProto[name]; // 1281
- _.prototype[name] = function() { // 1282
- return result.call(this, method.apply(this._wrapped, arguments)); // 1283
- }; // 1284
- }); // 1285
- // 1286
- _.extend(_.prototype, { // 1287
- // 1288
- // Start chaining a wrapped Underscore object. // 1289
- chain: function() { // 1290
- this._chain = true; // 1291
- return this; // 1292
- }, // 1293
- // 1294
- // Extracts the result from a wrapped and chained object. // 1295
- value: function() { // 1296
- return this._wrapped; // 1297
- } // 1298
- // 1299
- }); // 1300
- // 1301
-}).call(this); // 1302
- // 1303
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-
-
-
-
-(function () {
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/underscore/post.js //
-// //
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
- //
-// This exports object was created in pre.js. Now copy the `_` object from it // 1
-// into the package-scope variable `_`, which will get exported. // 2
-_ = exports._; // 3
- // 4
-///////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.underscore = {
- _: _
-};
-
-})();
-
-//# sourceMappingURL=underscore.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/underscore.js.map b/web-app/.meteor/local/build/programs/server/packages/underscore.js.map
deleted file mode 100644
index 3b9cb83..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/underscore.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["underscore/pre.js","underscore/underscore.js","underscore/post.js"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,gF;AACA,sE;AACA,a;;;;;;;;;;;;;;;;;;;ACFA,0B;AACA,8B;AACA,yF;AACA,kE;;AAEA,a;;AAEA,mB;AACA,mB;;AAEA,oF;AACA,kB;;AAEA,iD;AACA,kC;;AAEA,8E;AACA,mB;;AAEA,0D;AACA,gG;;AAEA,0E;AACA,K;AACA,uC;AACA,wC;AACA,yC;AACA,yC;AACA,+C;;AAEA,6E;AACA,uB;AACA,K;AACA,4C;AACA,wC;AACA,2C;AACA,gD;AACA,2C;AACA,0C;AACA,yC;AACA,4C;AACA,gD;AACA,uC;AACA,qC;AACA,wC;;AAEA,oE;AACA,yB;AACA,qC;AACA,gD;AACA,wB;AACA,I;;AAEA,uD;AACA,qE;AACA,qE;AACA,0C;AACA,uC;AACA,0D;AACA,mC;AACA,K;AACA,kB;AACA,U;AACA,e;AACA,G;;AAEA,qB;AACA,sB;;AAEA,yB;AACA,yB;;AAEA,+D;AACA,iE;AACA,iE;AACA,mB;AACA,qC;AACA,uD;AACA,I;AACA,0E;AACA,kD;AACA,iC;AACA,mC;AACA,+F;AACA,M;AACA,G;;AAEA,gF;AACA,8E;AACA,mD;AACA,gD;AACA,uD;AACA,uC;AACA,sC;AACA,6D;AACA,kE;AACA,I;;AAEA,8D;AACA,0E;AACA,mE;AACA,oE;AACA,4B;AACA,yD;AACA,qC;AACA,qC;AACA,6D;AACA,uE;AACA,O;AACA,Y;AACA,6B;AACA,8D;AACA,mF;AACA,O;AACA,K;AACA,I;;AAEA,iE;AACA,+D;AACA,wD;AACA,qB;AACA,oC;AACA,8E;AACA,4C;AACA,+D;AACA,O;AACA,mB;AACA,I;;AAEA,kE;;AAEA,8E;AACA,8E;AACA,0E;AACA,uC;AACA,8B;AACA,sD;AACA,wD;AACA,yE;AACA,K;AACA,4C;AACA,qB;AACA,qB;AACA,uB;AACA,c;AACA,gE;AACA,O;AACA,O;AACA,mD;AACA,gB;AACA,I;;AAEA,oE;AACA,uE;AACA,oE;AACA,uC;AACA,8B;AACA,qE;AACA,wD;AACA,mF;AACA,K;AACA,4B;AACA,+B;AACA,6B;AACA,2B;AACA,K;AACA,4C;AACA,+C;AACA,qB;AACA,0B;AACA,uB;AACA,c;AACA,qE;AACA,O;AACA,O;AACA,mD;AACA,gB;AACA,I;;AAEA,2E;AACA,wD;AACA,e;AACA,2C;AACA,uD;AACA,uB;AACA,oB;AACA,O;AACA,O;AACA,kB;AACA,I;;AAEA,oD;AACA,kE;AACA,yB;AACA,0D;AACA,qB;AACA,oC;AACA,0F;AACA,4C;AACA,0E;AACA,O;AACA,mB;AACA,I;;AAEA,0D;AACA,+C;AACA,uD;AACA,yD;AACA,gB;AACA,I;;AAEA,8D;AACA,iE;AACA,sB;AACA,sD;AACA,wC;AACA,sB;AACA,mC;AACA,sF;AACA,4C;AACA,2F;AACA,O;AACA,oB;AACA,I;;AAEA,0E;AACA,gE;AACA,sB;AACA,+D;AACA,wC;AACA,uB;AACA,mC;AACA,kF;AACA,4C;AACA,0F;AACA,O;AACA,oB;AACA,I;;AAEA,2E;AACA,0B;AACA,kD;AACA,kC;AACA,yF;AACA,qC;AACA,8B;AACA,O;AACA,I;;AAEA,oE;AACA,oC;AACA,wC;AACA,sC;AACA,uC;AACA,kE;AACA,O;AACA,I;;AAEA,4E;AACA,gC;AACA,6D;AACA,I;;AAEA,iF;AACA,2C;AACA,yC;AACA,qD;AACA,8D;AACA,8B;AACA,oD;AACA,O;AACA,kB;AACA,O;AACA,I;;AAEA,iF;AACA,2C;AACA,sC;AACA,qC;AACA,I;;AAEA,+D;AACA,mE;AACA,0E;AACA,4C;AACA,kF;AACA,uC;AACA,K;AACA,sD;AACA,0D;AACA,4C;AACA,mF;AACA,oF;AACA,O;AACA,wB;AACA,I;;AAEA,+D;AACA,4C;AACA,kF;AACA,uC;AACA,K;AACA,qD;AACA,wD;AACA,4C;AACA,mF;AACA,oF;AACA,O;AACA,wB;AACA,I;;AAEA,uD;AACA,+E;AACA,6B;AACA,a;AACA,kB;AACA,sB;AACA,+B;AACA,+B;AACA,2C;AACA,6B;AACA,O;AACA,oB;AACA,I;;AAEA,8C;AACA,+E;AACA,gE;AACA,sC;AACA,wC;AACA,2C;AACA,K;AACA,mD;AACA,I;;AAEA,uD;AACA,wC;AACA,6E;AACA,I;;AAEA,qE;AACA,4C;AACA,yC;AACA,4D;AACA,c;AACA,qB;AACA,qB;AACA,4D;AACA,Q;AACA,mC;AACA,4B;AACA,6B;AACA,oB;AACA,4C;AACA,6C;AACA,O;AACA,sC;AACA,iB;AACA,I;;AAEA,mE;AACA,kC;AACA,0C;AACA,sB;AACA,wE;AACA,wC;AACA,4D;AACA,qC;AACA,S;AACA,oB;AACA,M;AACA,I;;AAEA,8E;AACA,2D;AACA,kD;AACA,wE;AACA,K;;AAEA,8E;AACA,yD;AACA,kD;AACA,wB;AACA,K;;AAEA,0E;AACA,0E;AACA,e;AACA,2C;AACA,yD;AACA,K;;AAEA,wE;AACA,8E;AACA,2D;AACA,wE;AACA,4C;AACA,qC;AACA,wB;AACA,mC;AACA,8E;AACA,K;AACA,e;AACA,I;;AAEA,6D;AACA,6B;AACA,wB;AACA,+C;AACA,2D;AACA,yB;AACA,I;;AAEA,gD;AACA,0B;AACA,8B;AACA,mE;AACA,I;;AAEA,oB;AACA,oB;;AAEA,6E;AACA,2E;AACA,oC;AACA,yD;AACA,qC;AACA,qE;AACA,I;;AAEA,6E;AACA,sE;AACA,gF;AACA,a;AACA,yC;AACA,+E;AACA,I;;AAEA,2E;AACA,6E;AACA,sC;AACA,qC;AACA,+B;AACA,qC;AACA,Y;AACA,8D;AACA,K;AACA,I;;AAEA,uF;AACA,4E;AACA,kD;AACA,0C;AACA,wD;AACA,2D;AACA,I;;AAEA,6C;AACA,+B;AACA,uC;AACA,I;;AAEA,+D;AACA,kD;AACA,+C;AACA,yC;AACA,K;AACA,iC;AACA,qD;AACA,8E;AACA,c;AACA,2B;AACA,O;AACA,O;AACA,kB;AACA,I;;AAEA,8E;AACA,wC;AACA,uC;AACA,I;;AAEA,gF;AACA,+B;AACA,yD;AACA,I;;AAEA,4E;AACA,kE;AACA,yB;AACA,oE;AACA,iC;AACA,yB;AACA,0B;AACA,uB;AACA,K;AACA,qE;AACA,qB;AACA,kB;AACA,0C;AACA,8F;AACA,yB;AACA,mC;AACA,O;AACA,O;AACA,mB;AACA,I;;AAEA,gF;AACA,0B;AACA,wB;AACA,8C;AACA,I;;AAEA,qE;AACA,sB;AACA,oC;AACA,wC;AACA,mD;AACA,4C;AACA,2C;AACA,S;AACA,O;AACA,I;;AAEA,wE;AACA,mE;AACA,kC;AACA,kE;AACA,gF;AACA,I;;AAEA,2E;AACA,0B;AACA,sB;AACA,+D;AACA,oC;AACA,sC;AACA,8C;AACA,K;AACA,mB;AACA,I;;AAEA,8E;AACA,gF;AACA,8B;AACA,qC;AACA,gC;AACA,oB;AACA,4D;AACA,mB;AACA,oC;AACA,c;AACA,wC;AACA,O;AACA,K;AACA,kB;AACA,I;;AAEA,kF;AACA,6E;AACA,sE;AACA,mE;AACA,iE;AACA,2C;AACA,+C;AACA,iC;AACA,qC;AACA,mB;AACA,wC;AACA,uE;AACA,c;AACA,uC;AACA,0C;AACA,O;AACA,K;AACA,+F;AACA,4D;AACA,c;AACA,I;;AAEA,uE;AACA,+C;AACA,iC;AACA,gC;AACA,uE;AACA,gF;AACA,K;AACA,6C;AACA,gD;AACA,c;AACA,I;;AAEA,8E;AACA,8C;AACA,qF;AACA,yC;AACA,gC;AACA,wB;AACA,gB;AACA,K;AACA,6B;;AAEA,+D;AACA,gB;AACA,kC;;AAEA,yB;AACA,2B;AACA,oB;AACA,K;;AAEA,iB;AACA,I;;AAEA,8B;AACA,uB;;AAEA,yD;AACA,0B;;AAEA,gF;AACA,2E;AACA,e;AACA,oC;AACA,oB;AACA,wG;AACA,iD;AACA,oC;AACA,+B;AACA,mG;AACA,sC;AACA,0B;AACA,4B;AACA,wE;AACA,mD;AACA,kB;AACA,M;AACA,I;;AAEA,8E;AACA,uE;AACA,8B;AACA,wC;AACA,uB;AACA,kE;AACA,M;AACA,I;;AAEA,6E;AACA,qD;AACA,6B;AACA,yC;AACA,qF;AACA,+D;AACA,e;AACA,I;;AAEA,0D;AACA,sC;AACA,kB;AACA,oC;AACA,uB;AACA,8C;AACA,sF;AACA,M;AACA,I;;AAEA,2E;AACA,oC;AACA,kC;AACA,wC;AACA,0E;AACA,I;;AAEA,6E;AACA,a;AACA,4B;AACA,wE;AACA,I;;AAEA,gF;AACA,6E;AACA,8E;AACA,yE;AACA,0E;AACA,8C;AACA,8B;AACA,uB;AACA,qB;AACA,8B;AACA,4B;AACA,0D;AACA,qB;AACA,yC;AACA,M;AACA,uB;AACA,yB;AACA,iE;AACA,8C;AACA,qB;AACA,uB;AACA,2B;AACA,8B;AACA,uB;AACA,uB;AACA,2C;AACA,0D;AACA,+C;AACA,O;AACA,oB;AACA,M;AACA,I;;AAEA,8E;AACA,8E;AACA,0E;AACA,2C;AACA,gD;AACA,kD;AACA,uB;AACA,qB;AACA,uB;AACA,6B;AACA,8B;AACA,4C;AACA,0B;AACA,mD;AACA,gB;AACA,yB;AACA,6D;AACA,S;AACA,Q;AACA,0C;AACA,qB;AACA,0C;AACA,O;AACA,sD;AACA,oB;AACA,M;AACA,I;;AAEA,6E;AACA,uD;AACA,2B;AACA,0B;AACA,uB;AACA,2B;AACA,iB;AACA,yC;AACA,kB;AACA,kB;AACA,M;AACA,I;;AAEA,oE;AACA,qE;AACA,iD;AACA,oC;AACA,uB;AACA,wB;AACA,kC;AACA,uC;AACA,M;AACA,I;;AAEA,4E;AACA,6D;AACA,0B;AACA,0B;AACA,uB;AACA,2B;AACA,mD;AACA,4C;AACA,O;AACA,qB;AACA,M;AACA,I;;AAEA,8E;AACA,mC;AACA,uB;AACA,wB;AACA,2C;AACA,O;AACA,M;AACA,I;;AAEA,qB;AACA,qB;;AAEA,kD;AACA,yD;AACA,wC;AACA,mE;AACA,kB;AACA,6D;AACA,gB;AACA,I;;AAEA,mD;AACA,4B;AACA,2B;AACA,6B;AACA,mC;AACA,sC;AACA,+B;AACA,K;AACA,kB;AACA,I;;AAEA,2D;AACA,2B;AACA,2B;AACA,6B;AACA,kC;AACA,sC;AACA,yC;AACA,K;AACA,iB;AACA,I;;AAEA,8E;AACA,4B;AACA,oB;AACA,2B;AACA,4D;AACA,qC;AACA,K;AACA,kB;AACA,I;;AAEA,wE;AACA,yB;AACA,2C;AACA,mB;AACA,0B;AACA,kD;AACA,K;AACA,wB;AACA,I;;AAEA,0E;AACA,4B;AACA,qD;AACA,mB;AACA,kC;AACA,mC;AACA,S;AACA,O;AACA,O;AACA,e;AACA,I;;AAEA,4E;AACA,0B;AACA,kB;AACA,kE;AACA,8B;AACA,2C;AACA,O;AACA,gB;AACA,I;;AAEA,qE;AACA,0B;AACA,kB;AACA,kE;AACA,0B;AACA,uD;AACA,K;AACA,gB;AACA,I;;AAEA,oD;AACA,8B;AACA,qD;AACA,mB;AACA,kC;AACA,6D;AACA,S;AACA,O;AACA,O;AACA,e;AACA,I;;AAEA,sD;AACA,2B;AACA,qC;AACA,4D;AACA,I;;AAEA,4D;AACA,2E;AACA,0E;AACA,sC;AACA,qB;AACA,e;AACA,I;;AAEA,0D;AACA,2C;AACA,0E;AACA,8F;AACA,kD;AACA,oE;AACA,+C;AACA,kC;AACA,uC;AACA,uC;AACA,iC;AACA,qC;AACA,oD;AACA,wB;AACA,qE;AACA,6B;AACA,4F;AACA,2C;AACA,8B;AACA,6B;AACA,0F;AACA,gC;AACA,uE;AACA,2B;AACA,8B;AACA,6F;AACA,gG;AACA,uC;AACA,wB;AACA,iE;AACA,6B;AACA,sC;AACA,sC;AACA,4C;AACA,4C;AACA,K;AACA,mE;AACA,gF;AACA,kF;AACA,+B;AACA,sB;AACA,8E;AACA,kC;AACA,0D;AACA,K;AACA,4E;AACA,iC;AACA,qD;AACA,+E;AACA,gF;AACA,mB;AACA,K;AACA,8D;AACA,mB;AACA,mB;AACA,gC;AACA,8C;AACA,wC;AACA,8E;AACA,sB;AACA,gC;AACA,mB;AACA,sE;AACA,wB;AACA,sE;AACA,S;AACA,O;AACA,Y;AACA,8B;AACA,0B;AACA,4B;AACA,qD;AACA,iB;AACA,sC;AACA,qF;AACA,S;AACA,O;AACA,wE;AACA,mB;AACA,wB;AACA,gD;AACA,S;AACA,uB;AACA,O;AACA,K;AACA,mE;AACA,iB;AACA,iB;AACA,kB;AACA,I;;AAEA,iE;AACA,8B;AACA,4B;AACA,I;;AAEA,+C;AACA,wD;AACA,6B;AACA,iC;AACA,mE;AACA,2D;AACA,gB;AACA,I;;AAEA,oC;AACA,+B;AACA,yC;AACA,I;;AAEA,+B;AACA,8C;AACA,8C;AACA,kD;AACA,I;;AAEA,mC;AACA,8B;AACA,+B;AACA,I;;AAEA,4F;AACA,wF;AACA,oC;AACA,2D;AACA,M;AACA,K;;AAEA,0E;AACA,kD;AACA,kC;AACA,mC;AACA,6C;AACA,M;AACA,G;;AAEA,0C;AACA,oC;AACA,kC;AACA,uC;AACA,M;AACA,G;;AAEA,uC;AACA,8B;AACA,oD;AACA,I;;AAEA,oF;AACA,2B;AACA,0C;AACA,I;;AAEA,gC;AACA,+B;AACA,qF;AACA,I;;AAEA,oC;AACA,4B;AACA,wB;AACA,I;;AAEA,mC;AACA,iC;AACA,0B;AACA,I;;AAEA,8E;AACA,oD;AACA,8B;AACA,yC;AACA,I;;AAEA,sB;AACA,sB;;AAEA,8E;AACA,kE;AACA,6B;AACA,gC;AACA,gB;AACA,I;;AAEA,6D;AACA,gC;AACA,iB;AACA,I;;AAEA,gC;AACA,4C;AACA,sC;AACA,qE;AACA,iB;AACA,I;;AAEA,6D;AACA,iC;AACA,sB;AACA,gB;AACA,c;AACA,K;AACA,6D;AACA,I;;AAEA,wC;AACA,mB;AACA,a;AACA,mB;AACA,kB;AACA,kB;AACA,oB;AACA,mB;AACA,K;AACA,I;AACA,kD;;AAEA,qE;AACA,uB;AACA,6E;AACA,+E;AACA,I;;AAEA,8E;AACA,mD;AACA,kC;AACA,oC;AACA,2E;AACA,wC;AACA,S;AACA,M;AACA,K;;AAEA,+E;AACA,+C;AACA,yC;AACA,sC;AACA,iC;AACA,4D;AACA,I;;AAEA,4D;AACA,2B;AACA,2C;AACA,qC;AACA,sC;AACA,mC;AACA,oC;AACA,sD;AACA,Q;AACA,O;AACA,I;;AAEA,4E;AACA,kC;AACA,oB;AACA,iC;AACA,8B;AACA,qC;AACA,I;;AAEA,0E;AACA,+D;AACA,wB;AACA,oC;AACA,qC;AACA,oC;AACA,I;;AAEA,wE;AACA,qE;AACA,6B;AACA,uB;;AAEA,yE;AACA,oB;AACA,iB;AACA,kB;AACA,mB;AACA,kB;AACA,kB;AACA,kB;AACA,sB;AACA,qB;AACA,I;;AAEA,+C;;AAEA,yE;AACA,8E;AACA,2D;AACA,+C;AACA,e;AACA,4D;;AAEA,sE;AACA,8B;AACA,0C;AACA,+C;AACA,2C;AACA,6B;;AAEA,2E;AACA,kB;AACA,0B;AACA,kF;AACA,yC;AACA,6E;;AAEA,mB;AACA,4E;AACA,O;AACA,wB;AACA,uE;AACA,O;AACA,qB;AACA,iD;AACA,O;AACA,oC;AACA,mB;AACA,O;AACA,qB;;AAEA,wE;AACA,yE;;AAEA,yD;AACA,2D;AACA,+B;;AAEA,S;AACA,qE;AACA,iB;AACA,wB;AACA,c;AACA,K;;AAEA,qC;AACA,mC;AACA,wC;AACA,M;;AAEA,gF;AACA,yF;;AAEA,oB;AACA,I;;AAEA,gE;AACA,2B;AACA,0B;AACA,I;;AAEA,Q;AACA,oB;AACA,4E;AACA,yE;AACA,0D;;AAEA,+D;AACA,8B;AACA,8C;AACA,I;;AAEA,+D;AACA,a;;AAEA,oD;AACA,yF;AACA,kC;AACA,oC;AACA,8B;AACA,mC;AACA,mF;AACA,oC;AACA,M;AACA,K;;AAEA,qD;AACA,oD;AACA,kC;AACA,oC;AACA,uE;AACA,M;AACA,K;;AAEA,yB;;AAEA,kD;AACA,uB;AACA,yB;AACA,kB;AACA,M;;AAEA,6D;AACA,uB;AACA,2B;AACA,K;;AAEA,K;;AAEA,c;;;;;;;;;;;;;;;;;;;ACrxCA,8E;AACA,gE;AACA,c","file":"/packages/underscore.js","sourcesContent":["// Define an object named exports. This will cause underscore.js to put `_` as a\n// field on it, instead of in the global namespace. See also post.js.\nexports = {};\n","// Underscore.js 1.5.2\n// http://underscorejs.org\n// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n// Underscore may be freely distributed under the MIT license.\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `exports` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Establish the object that gets returned to break out of a loop iteration.\n var breaker = {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n var\n push = ArrayProto.push,\n slice = ArrayProto.slice,\n concat = ArrayProto.concat,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeForEach = ArrayProto.forEach,\n nativeMap = ArrayProto.map,\n nativeReduce = ArrayProto.reduce,\n nativeReduceRight = ArrayProto.reduceRight,\n nativeFilter = ArrayProto.filter,\n nativeEvery = ArrayProto.every,\n nativeSome = ArrayProto.some,\n nativeIndexOf = ArrayProto.indexOf,\n nativeLastIndexOf = ArrayProto.lastIndexOf,\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind;\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) {\n if (obj instanceof _) return obj;\n if (!(this instanceof _)) return new _(obj);\n this._wrapped = obj;\n };\n\n // Export the Underscore object for **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object via a string identifier,\n // for Closure Compiler \"advanced\" mode.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root._ = _;\n }\n\n // Current version.\n _.VERSION = '1.5.2';\n\n // Collection Functions\n // --------------------\n\n // METEOR CHANGE: Define _isArguments instead of depending on\n // _.isArguments which is defined using each. In looksLikeArray\n // (which each depends on), we then use _isArguments instead of\n // _.isArguments.\n var _isArguments = function (obj) {\n return toString.call(obj) === '[object Arguments]';\n };\n // Define a fallback version of the method in browsers (ahem, IE), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_isArguments(arguments)) {\n _isArguments = function (obj) {\n return !!(obj && hasOwnProperty.call(obj, 'callee') && typeof obj.callee === 'function');\n };\n }\n\n // METEOR CHANGE: _.each({length: 5}) should be treated like an object, not an\n // array. This looksLikeArray function is introduced by Meteor, and replaces\n // all instances of `obj.length === +obj.length`.\n // https://github.com/meteor/meteor/issues/594\n // https://github.com/jashkenas/underscore/issues/770\n var looksLikeArray = function (obj) {\n return (obj.length === +obj.length\n // _.isArguments not yet necessarily defined here\n && (_isArguments(obj) || obj.constructor !== Object));\n };\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles objects with the built-in `forEach`, arrays, and raw objects.\n // Delegates to **ECMAScript 5**'s native `forEach` if available.\n var each = _.each = _.forEach = function(obj, iterator, context) {\n if (obj == null) return;\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (looksLikeArray(obj)) {\n for (var i = 0, length = obj.length; i < length; i++) {\n if (iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n if (iterator.call(context, obj[keys[i]], keys[i], obj) === breaker) return;\n }\n }\n };\n\n // Return the results of applying the iterator to each element.\n // Delegates to **ECMAScript 5**'s native `map` if available.\n _.map = _.collect = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n each(obj, function(value, index, list) {\n results.push(iterator.call(context, value, index, list));\n });\n return results;\n };\n\n var reduceError = 'Reduce of empty array with no initial value';\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.\n _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduce && obj.reduce === nativeReduce) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n }\n each(obj, function(value, index, list) {\n if (!initial) {\n memo = value;\n initial = true;\n } else {\n memo = iterator.call(context, memo, value, index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n\n // The right-associative version of reduce, also known as `foldr`.\n // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n }\n var length = obj.length;\n if (!looksLikeArray(obj)) {\n var keys = _.keys(obj);\n length = keys.length;\n }\n each(obj, function(value, index, list) {\n index = keys ? keys[--length] : --length;\n if (!initial) {\n memo = obj[index];\n initial = true;\n } else {\n memo = iterator.call(context, memo, obj[index], index, list);\n }\n });\n if (!initial) throw new TypeError(reduceError);\n return memo;\n };\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, iterator, context) {\n var result;\n any(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n });\n return result;\n };\n\n // Return all the elements that pass a truth test.\n // Delegates to **ECMAScript 5**'s native `filter` if available.\n // Aliased as `select`.\n _.filter = _.select = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n each(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) results.push(value);\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, iterator, context) {\n return _.filter(obj, function(value, index, list) {\n return !iterator.call(context, value, index, list);\n }, context);\n };\n\n // Determine whether all of the elements match a truth test.\n // Delegates to **ECMAScript 5**'s native `every` if available.\n // Aliased as `all`.\n _.every = _.all = function(obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = true;\n if (obj == null) return result;\n if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);\n each(obj, function(value, index, list) {\n if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Delegates to **ECMAScript 5**'s native `some` if available.\n // Aliased as `any`.\n var any = _.some = _.any = function(obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = false;\n if (obj == null) return result;\n if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n each(obj, function(value, index, list) {\n if (result || (result = iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n\n // Determine if the array or object contains a given value (using `===`).\n // Aliased as `include`.\n _.contains = _.include = function(obj, target) {\n if (obj == null) return false;\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n return any(obj, function(value) {\n return value === target;\n });\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n var isFunc = _.isFunction(method);\n return _.map(obj, function(value) {\n return (isFunc ? method : value[method]).apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, function(value){ return value[key]; });\n };\n\n // Convenience version of a common use case of `filter`: selecting only objects\n // containing specific `key:value` pairs.\n _.where = function(obj, attrs, first) {\n if (_.isEmpty(attrs)) return first ? void 0 : [];\n return _[first ? 'find' : 'filter'](obj, function(value) {\n for (var key in attrs) {\n if (attrs[key] !== value[key]) return false;\n }\n return true;\n });\n };\n\n // Convenience version of a common use case of `find`: getting the first object\n // containing specific `key:value` pairs.\n _.findWhere = function(obj, attrs) {\n return _.where(obj, attrs, true);\n };\n\n // Return the maximum element or (element-based computation).\n // Can't optimize arrays of integers longer than 65,535 elements.\n // See [WebKit Bug 80797](https://bugs.webkit.org/show_bug.cgi?id=80797)\n _.max = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.max.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return -Infinity;\n var result = {computed : -Infinity, value: -Infinity};\n each(obj, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed > result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) {\n return Math.min.apply(Math, obj);\n }\n if (!iterator && _.isEmpty(obj)) return Infinity;\n var result = {computed : Infinity, value: Infinity};\n each(obj, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed < result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n\n // Shuffle an array, using the modern version of the \n // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).\n _.shuffle = function(obj) {\n var rand;\n var index = 0;\n var shuffled = [];\n each(obj, function(value) {\n rand = _.random(index++);\n shuffled[index - 1] = shuffled[rand];\n shuffled[rand] = value;\n });\n return shuffled;\n };\n\n // Sample **n** random values from an array.\n // If **n** is not specified, returns a single random element from the array.\n // The internal `guard` argument allows it to work with `map`.\n _.sample = function(obj, n, guard) {\n if (arguments.length < 2 || guard) {\n return obj[_.random(obj.length - 1)];\n }\n return _.shuffle(obj).slice(0, Math.max(0, n));\n };\n\n // An internal function to generate lookup iterators.\n var lookupIterator = function(value) {\n return _.isFunction(value) ? value : function(obj){ return obj[value]; };\n };\n\n // Sort the object's values by a criterion produced by an iterator.\n _.sortBy = function(obj, value, context) {\n var iterator = lookupIterator(value);\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value: value,\n index: index,\n criteria: iterator.call(context, value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria;\n var b = right.criteria;\n if (a !== b) {\n if (a > b || a === void 0) return 1;\n if (a < b || b === void 0) return -1;\n }\n return left.index - right.index;\n }), 'value');\n };\n\n // An internal function used for aggregate \"group by\" operations.\n var group = function(behavior) {\n return function(obj, value, context) {\n var result = {};\n var iterator = value == null ? _.identity : lookupIterator(value);\n each(obj, function(value, index) {\n var key = iterator.call(context, value, index, obj);\n behavior(result, key, value);\n });\n return result;\n };\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = group(function(result, key, value) {\n (_.has(result, key) ? result[key] : (result[key] = [])).push(value);\n });\n\n // Indexes the object's values by a criterion, similar to `groupBy`, but for\n // when you know that your index values will be unique.\n _.indexBy = group(function(result, key, value) {\n result[key] = value;\n });\n\n // Counts instances of an object that group by a certain criterion. Pass\n // either a string attribute to count by, or a function that returns the\n // criterion.\n _.countBy = group(function(result, key) {\n _.has(result, key) ? result[key]++ : result[key] = 1;\n });\n\n // Use a comparator function to figure out the smallest index at which\n // an object should be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iterator, context) {\n iterator = iterator == null ? _.identity : lookupIterator(iterator);\n var value = iterator.call(context, obj);\n var low = 0, high = array.length;\n while (low < high) {\n var mid = (low + high) >>> 1;\n iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid;\n }\n return low;\n };\n\n // Safely create a real, live array from anything iterable.\n _.toArray = function(obj) {\n if (!obj) return [];\n if (_.isArray(obj)) return slice.call(obj);\n if (looksLikeArray(obj)) return _.map(obj, _.identity);\n return _.values(obj);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n if (obj == null) return 0;\n return (looksLikeArray(obj)) ? obj.length : _.keys(obj).length;\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head` and `take`. The **guard** check\n // allows it to work with `_.map`.\n _.first = _.head = _.take = function(array, n, guard) {\n if (array == null) return void 0;\n return (n == null) || guard ? array[0] : slice.call(array, 0, n);\n };\n\n // Returns everything but the last entry of the array. Especially useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N. The **guard** check allows it to work with\n // `_.map`.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array. The **guard** check allows it to work with `_.map`.\n _.last = function(array, n, guard) {\n if (array == null) return void 0;\n if ((n == null) || guard) {\n return array[array.length - 1];\n } else {\n return slice.call(array, Math.max(array.length - n, 0));\n }\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.\n // Especially useful on the arguments object. Passing an **n** will return\n // the rest N values in the array. The **guard**\n // check allows it to work with `_.map`.\n _.rest = _.tail = _.drop = function(array, n, guard) {\n return slice.call(array, (n == null) || guard ? 1 : n);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, _.identity);\n };\n\n // Internal implementation of a recursive `flatten` function.\n var flatten = function(input, shallow, output) {\n if (shallow && _.every(input, _.isArray)) {\n return concat.apply(output, input);\n }\n each(input, function(value) {\n if (_.isArray(value) || _.isArguments(value)) {\n shallow ? push.apply(output, value) : flatten(value, shallow, output);\n } else {\n output.push(value);\n }\n });\n return output;\n };\n\n // Flatten out an array, either recursively (by default), or just one level.\n _.flatten = function(array, shallow) {\n return flatten(array, shallow, []);\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iterator, context) {\n if (_.isFunction(isSorted)) {\n context = iterator;\n iterator = isSorted;\n isSorted = false;\n }\n var initial = iterator ? _.map(array, iterator, context) : array;\n var results = [];\n var seen = [];\n each(initial, function(value, index) {\n if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) {\n seen.push(value);\n results.push(array[index]);\n }\n });\n return results;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(_.flatten(arguments, true));\n };\n\n // Produce an array that contains every item shared between all the\n // passed-in arrays.\n _.intersection = function(array) {\n var rest = slice.call(arguments, 1);\n return _.filter(_.uniq(array), function(item) {\n return _.every(rest, function(other) {\n return _.indexOf(other, item) >= 0;\n });\n });\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = concat.apply(ArrayProto, slice.call(arguments, 1));\n return _.filter(array, function(value){ return !_.contains(rest, value); });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n var length = _.max(_.pluck(arguments, \"length\").concat(0));\n var results = new Array(length);\n for (var i = 0; i < length; i++) {\n results[i] = _.pluck(arguments, '' + i);\n }\n return results;\n };\n\n // Converts lists into objects. Pass either a single array of `[key, value]`\n // pairs, or two parallel arrays of the same length -- one of keys, and one of\n // the corresponding values.\n _.object = function(list, values) {\n if (list == null) return {};\n var result = {};\n for (var i = 0, length = list.length; i < length; i++) {\n if (values) {\n result[list[i]] = values[i];\n } else {\n result[list[i][0]] = list[i][1];\n }\n }\n return result;\n };\n\n // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n // we need this function. Return the position of the first occurrence of an\n // item in an array, or -1 if the item is not included in the array.\n // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = function(array, item, isSorted) {\n if (array == null) return -1;\n var i = 0, length = array.length;\n if (isSorted) {\n if (typeof isSorted == 'number') {\n i = (isSorted < 0 ? Math.max(0, length + isSorted) : isSorted);\n } else {\n i = _.sortedIndex(array, item);\n return array[i] === item ? i : -1;\n }\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted);\n for (; i < length; i++) if (array[i] === item) return i;\n return -1;\n };\n\n // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n _.lastIndexOf = function(array, item, from) {\n if (array == null) return -1;\n var hasIndex = from != null;\n if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) {\n return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item);\n }\n var i = (hasIndex ? from : array.length);\n while (i--) if (array[i] === item) return i;\n return -1;\n };\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (arguments.length <= 1) {\n stop = start || 0;\n start = 0;\n }\n step = arguments[2] || 1;\n\n var length = Math.max(Math.ceil((stop - start) / step), 0);\n var idx = 0;\n var range = new Array(length);\n\n while(idx < length) {\n range[idx++] = start;\n start += step;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Reusable constructor function for prototype setting.\n var ctor = function(){};\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if\n // available.\n _.bind = function(func, context) {\n var args, bound;\n if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError;\n args = slice.call(arguments, 2);\n return bound = function() {\n if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n ctor.prototype = func.prototype;\n var self = new ctor;\n ctor.prototype = null;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) return result;\n return self;\n };\n };\n\n // Partially apply a function by creating a version that has had some of its\n // arguments pre-filled, without changing its dynamic `this` context.\n _.partial = function(func) {\n var args = slice.call(arguments, 1);\n return function() {\n return func.apply(this, args.concat(slice.call(arguments)));\n };\n };\n\n // Bind all of an object's methods to that object. Useful for ensuring that\n // all callbacks defined on an object belong to it.\n _.bindAll = function(obj) {\n var funcs = slice.call(arguments, 1);\n if (funcs.length === 0) throw new Error(\"bindAll must be passed function names\");\n each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memo = {};\n hasher || (hasher = _.identity);\n return function() {\n var key = hasher.apply(this, arguments);\n return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n };\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){ return func.apply(null, args); }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack has\n // cleared.\n _.defer = function(func) {\n return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n };\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time. Normally, the throttled function will run\n // as much as it can, without ever going more than once per `wait` duration;\n // but if you'd like to disable the execution on the leading edge, pass\n // `{leading: false}`. To disable execution on the trailing edge, ditto.\n _.throttle = function(func, wait, options) {\n var context, args, result;\n var timeout = null;\n var previous = 0;\n options || (options = {});\n var later = function() {\n previous = options.leading === false ? 0 : new Date;\n timeout = null;\n result = func.apply(context, args);\n };\n return function() {\n var now = new Date;\n if (!previous && options.leading === false) previous = now;\n var remaining = wait - (now - previous);\n context = this;\n args = arguments;\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being called for\n // N milliseconds. If `immediate` is passed, trigger the function on the\n // leading edge, instead of the trailing.\n _.debounce = function(func, wait, immediate) {\n var timeout, args, context, timestamp, result;\n return function() {\n context = this;\n args = arguments;\n timestamp = new Date();\n var later = function() {\n var last = (new Date()) - timestamp;\n if (last < wait) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) result = func.apply(context, args);\n }\n };\n var callNow = immediate && !timeout;\n if (!timeout) {\n timeout = setTimeout(later, wait);\n }\n if (callNow) result = func.apply(context, args);\n return result;\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = function(func) {\n var ran = false, memo;\n return function() {\n if (ran) return memo;\n ran = true;\n memo = func.apply(this, arguments);\n func = null;\n return memo;\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return function() {\n var args = [func];\n push.apply(args, arguments);\n return wrapper.apply(this, args);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var funcs = arguments;\n return function() {\n var args = arguments;\n for (var i = funcs.length - 1; i >= 0; i--) {\n args = [funcs[i].apply(this, args)];\n }\n return args[0];\n };\n };\n\n // Returns a function that will only be executed after being called N times.\n _.after = function(times, func) {\n return function() {\n if (--times < 1) {\n return func.apply(this, arguments);\n }\n };\n };\n\n // Object Functions\n // ----------------\n\n // Retrieve the names of an object's properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = nativeKeys || function(obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys = [];\n for (var key in obj) if (_.has(obj, key)) keys.push(key);\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var values = new Array(length);\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n\n // Convert an object into a list of `[key, value]` pairs.\n _.pairs = function(obj) {\n var keys = _.keys(obj);\n var length = keys.length;\n var pairs = new Array(length);\n for (var i = 0; i < length; i++) {\n pairs[i] = [keys[i], obj[keys[i]]];\n }\n return pairs;\n };\n\n // Invert the keys and values of an object. The values must be serializable.\n _.invert = function(obj) {\n var result = {};\n var keys = _.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n\n // Return a copy of the object only containing the whitelisted properties.\n _.pick = function(obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n each(keys, function(key) {\n if (key in obj) copy[key] = obj[key];\n });\n return copy;\n };\n\n // Return a copy of the object without the blacklisted properties.\n _.omit = function(obj) {\n var copy = {};\n var keys = concat.apply(ArrayProto, slice.call(arguments, 1));\n for (var key in obj) {\n if (!_.contains(keys, key)) copy[key] = obj[key];\n }\n return copy;\n };\n\n // Fill in a given object with default properties.\n _.defaults = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n if (source) {\n for (var prop in source) {\n if (obj[prop] === void 0) obj[prop] = source[prop];\n }\n }\n });\n return obj;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Internal recursive comparison function for `isEqual`.\n var eq = function(a, b, aStack, bStack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).\n if (a === b) return a !== 0 || 1 / a == 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwrap any wrapped objects.\n if (a instanceof _) a = a._wrapped;\n if (b instanceof _) b = b._wrapped;\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className != toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, dates, and booleans are compared by value.\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return a == String(b);\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n // other numeric values.\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case '[object Date]':\n case '[object Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a == +b;\n // RegExps are compared by their source patterns and flags.\n case '[object RegExp]':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != 'object' || typeof b != 'object') return false;\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n var length = aStack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (aStack[length] == a) return bStack[length] == b;\n }\n // Objects with different constructors are not equivalent, but `Object`s\n // from different frames are.\n var aCtor = a.constructor, bCtor = b.constructor;\n if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) &&\n _.isFunction(bCtor) && (bCtor instanceof bCtor))) {\n return false;\n }\n // Add the first object to the stack of traversed objects.\n aStack.push(a);\n bStack.push(b);\n var size = 0, result = true;\n // Recursively compare objects and arrays.\n if (className == '[object Array]') {\n // Compare array lengths to determine if a deep comparison is necessary.\n size = a.length;\n result = size == b.length;\n if (result) {\n // Deep compare the contents, ignoring non-numeric properties.\n while (size--) {\n if (!(result = eq(a[size], b[size], aStack, bStack))) break;\n }\n }\n } else {\n // Deep compare objects.\n for (var key in a) {\n if (_.has(a, key)) {\n // Count the expected number of properties.\n size++;\n // Deep compare each member.\n if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break;\n }\n }\n // Ensure that both objects contain the same number of properties.\n if (result) {\n for (key in b) {\n if (_.has(b, key) && !(size--)) break;\n }\n result = !size;\n }\n }\n // Remove the first object from the stack of traversed objects.\n aStack.pop();\n bStack.pop();\n return result;\n };\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b, [], []);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (obj == null) return true;\n if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n for (var key in obj) if (_.has(obj, key)) return false;\n return true;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj.nodeType === 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) == '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n return obj === Object(obj);\n };\n\n // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp.\n each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) {\n _['is' + name] = function(obj) {\n return toString.call(obj) == '[object ' + name + ']';\n };\n });\n\n // Define a fallback version of the method in browsers (ahem, IE), where\n // there isn't any inspectable \"Arguments\" type.\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return !!(obj && _.has(obj, 'callee'));\n };\n }\n\n // Optimize `isFunction` if appropriate.\n if (typeof (/./) !== 'function') {\n _.isFunction = function(obj) {\n return typeof obj === 'function';\n };\n }\n\n // Is a given object a finite number?\n _.isFinite = function(obj) {\n return isFinite(obj) && !isNaN(parseFloat(obj));\n };\n\n // Is the given value `NaN`? (NaN is the only number which does not equal itself).\n _.isNaN = function(obj) {\n return _.isNumber(obj) && obj != +obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Shortcut function for checking if an object has a given property directly\n // on itself (in other words, not on a prototype).\n _.has = function(obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning the `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iterators.\n _.identity = function(value) {\n return value;\n };\n\n // Run a function **n** times.\n _.times = function(n, iterator, context) {\n var accum = Array(Math.max(0, n));\n for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i);\n return accum;\n };\n\n // Return a random integer between min and max (inclusive).\n _.random = function(min, max) {\n if (max == null) {\n max = min;\n min = 0;\n }\n return min + Math.floor(Math.random() * (max - min + 1));\n };\n\n // List of HTML entities for escaping.\n var entityMap = {\n escape: {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n }\n };\n entityMap.unescape = _.invert(entityMap.escape);\n\n // Regexes containing the keys and values listed immediately above.\n var entityRegexes = {\n escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'),\n unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g')\n };\n\n // Functions for escaping and unescaping strings to/from HTML interpolation.\n _.each(['escape', 'unescape'], function(method) {\n _[method] = function(string) {\n if (string == null) return '';\n return ('' + string).replace(entityRegexes[method], function(match) {\n return entityMap[method][match];\n });\n };\n });\n\n // If the value of the named `property` is a function then invoke it with the\n // `object` as context; otherwise, return it.\n _.result = function(object, property) {\n if (object == null) return void 0;\n var value = object[property];\n return _.isFunction(value) ? value.call(object) : value;\n };\n\n // Add your own custom functions to the Underscore object.\n _.mixin = function(obj) {\n each(_.functions(obj), function(name) {\n var func = _[name] = obj[name];\n _.prototype[name] = function() {\n var args = [this._wrapped];\n push.apply(args, arguments);\n return result.call(this, func.apply(_, args));\n };\n });\n };\n\n // Generate a unique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = ++idCounter + '';\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /(.)^/;\n\n // Certain characters need to be escaped so that they can be put into a\n // string literal.\n var escapes = {\n \"'\": \"'\",\n '\\\\': '\\\\',\n '\\r': 'r',\n '\\n': 'n',\n '\\t': 't',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n var escaper = /\\\\|'|\\r|\\n|\\t|\\u2028|\\u2029/g;\n\n // JavaScript micro-templating, similar to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n _.template = function(text, data, settings) {\n var render;\n settings = _.defaults({}, settings, _.templateSettings);\n\n // Combine delimiters into one regular expression via alternation.\n var matcher = new RegExp([\n (settings.escape || noMatch).source,\n (settings.interpolate || noMatch).source,\n (settings.evaluate || noMatch).source\n ].join('|') + '|$', 'g');\n\n // Compile the template source, escaping string literals appropriately.\n var index = 0;\n var source = \"__p+='\";\n text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {\n source += text.slice(index, offset)\n .replace(escaper, function(match) { return '\\\\' + escapes[match]; });\n\n if (escape) {\n source += \"'+\\n((__t=(\" + escape + \"))==null?'':_.escape(__t))+\\n'\";\n }\n if (interpolate) {\n source += \"'+\\n((__t=(\" + interpolate + \"))==null?'':__t)+\\n'\";\n }\n if (evaluate) {\n source += \"';\\n\" + evaluate + \"\\n__p+='\";\n }\n index = offset + match.length;\n return match;\n });\n source += \"';\\n\";\n\n // If a variable is not specified, place data values in local scope.\n if (!settings.variable) source = 'with(obj||{}){\\n' + source + '}\\n';\n\n source = \"var __t,__p='',__j=Array.prototype.join,\" +\n \"print=function(){__p+=__j.call(arguments,'');};\\n\" +\n source + \"return __p;\\n\";\n\n try {\n render = new Function(settings.variable || 'obj', '_', source);\n } catch (e) {\n e.source = source;\n throw e;\n }\n\n if (data) return render(data, _);\n var template = function(data) {\n return render.call(this, data, _);\n };\n\n // Provide the compiled function source as a convenience for precompilation.\n template.source = 'function(' + (settings.variable || 'obj') + '){\\n' + source + '}';\n\n return template;\n };\n\n // Add a \"chain\" function, which will delegate to the wrapper.\n _.chain = function(obj) {\n return _(obj).chain();\n };\n\n // OOP\n // ---------------\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n\n // Helper function to continue chaining intermediate results.\n var result = function(obj) {\n return this._chain ? _(obj).chain() : obj;\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n var obj = this._wrapped;\n method.apply(obj, arguments);\n if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0];\n return result.call(this, obj);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n _.prototype[name] = function() {\n return result.call(this, method.apply(this._wrapped, arguments));\n };\n });\n\n _.extend(_.prototype, {\n\n // Start chaining a wrapped Underscore object.\n chain: function() {\n this._chain = true;\n return this;\n },\n\n // Extracts the result from a wrapped and chained object.\n value: function() {\n return this._wrapped;\n }\n\n });\n\n}).call(this);\n","// This exports object was created in pre.js. Now copy the `_` object from it\n// into the package-scope variable `_`, which will get exported.\n_ = exports._;\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js b/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js
deleted file mode 100644
index f824fe1..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js
+++ /dev/null
@@ -1,71 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var _ = Package.underscore._;
-
-/* Package-scope variables */
-var WebAppHashing;
-
-(function () {
-
-//////////////////////////////////////////////////////////////////////////////
-// //
-// packages/webapp-hashing/webapp-hashing.js //
-// //
-//////////////////////////////////////////////////////////////////////////////
- //
-var crypto = Npm.require("crypto"); // 1
- // 2
-WebAppHashing = {}; // 3
- // 4
-// Calculate a hash of all the client resources downloaded by the // 5
-// browser, including the application HTML, runtime config, code, and // 6
-// static files. // 7
-// // 8
-// This hash *must* change if any resources seen by the browser // 9
-// change, and ideally *doesn't* change for any server-only changes // 10
-// (but the second is a performance enhancement, not a hard // 11
-// requirement). // 12
- // 13
-WebAppHashing.calculateClientHash = // 14
- function (manifest, includeFilter, runtimeConfigOverride) { // 15
- var hash = crypto.createHash('sha1'); // 16
- // 17
- // Omit the old hashed client values in the new hash. These may be // 18
- // modified in the new boilerplate. // 19
- var runtimeCfg = _.omit(__meteor_runtime_config__, // 20
- ['autoupdateVersion', 'autoupdateVersionRefreshable', // 21
- 'autoupdateVersionCordova']); // 22
- // 23
- if (runtimeConfigOverride) { // 24
- runtimeCfg = runtimeConfigOverride; // 25
- } // 26
- // 27
- hash.update(JSON.stringify(runtimeCfg, 'utf8')); // 28
- // 29
- _.each(manifest, function (resource) { // 30
- if ((! includeFilter || includeFilter(resource.type)) && // 31
- (resource.where === 'client' || resource.where === 'internal')) { // 32
- hash.update(resource.path); // 33
- hash.update(resource.hash); // 34
- } // 35
- }); // 36
- return hash.digest('hex'); // 37
-}; // 38
- // 39
- // 40
-//////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package['webapp-hashing'] = {
- WebAppHashing: WebAppHashing
-};
-
-})();
-
-//# sourceMappingURL=webapp-hashing.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js.map b/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js.map
deleted file mode 100644
index 2962fcb..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/webapp-hashing.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webapp-hashing/webapp-hashing.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mC;;AAEA,mB;;AAEA,iE;AACA,qE;AACA,gB;AACA,E;AACA,+D;AACA,mE;AACA,2D;AACA,gB;;AAEA,mC;AACA,6D;AACA,uC;;AAEA,oE;AACA,qC;AACA,oD;AACA,yD;AACA,kC;;AAEA,8B;AACA,uC;AACA,G;;AAEA,kD;;AAEA,wC;AACA,8D;AACA,2E;AACA,iC;AACA,iC;AACA,K;AACA,K;AACA,4B;AACA,E","file":"/packages/webapp-hashing.js","sourcesContent":["var crypto = Npm.require(\"crypto\");\n\nWebAppHashing = {};\n\n// Calculate a hash of all the client resources downloaded by the\n// browser, including the application HTML, runtime config, code, and\n// static files.\n//\n// This hash *must* change if any resources seen by the browser\n// change, and ideally *doesn't* change for any server-only changes\n// (but the second is a performance enhancement, not a hard\n// requirement).\n\nWebAppHashing.calculateClientHash =\n function (manifest, includeFilter, runtimeConfigOverride) {\n var hash = crypto.createHash('sha1');\n\n // Omit the old hashed client values in the new hash. These may be\n // modified in the new boilerplate.\n var runtimeCfg = _.omit(__meteor_runtime_config__,\n ['autoupdateVersion', 'autoupdateVersionRefreshable',\n 'autoupdateVersionCordova']);\n\n if (runtimeConfigOverride) {\n runtimeCfg = runtimeConfigOverride;\n }\n\n hash.update(JSON.stringify(runtimeCfg, 'utf8'));\n\n _.each(manifest, function (resource) {\n if ((! includeFilter || includeFilter(resource.type)) &&\n (resource.where === 'client' || resource.where === 'internal')) {\n hash.update(resource.path);\n hash.update(resource.hash);\n }\n });\n return hash.digest('hex');\n};\n\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/packages/webapp.js b/web-app/.meteor/local/build/programs/server/packages/webapp.js
deleted file mode 100644
index 564651a..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/webapp.js
+++ /dev/null
@@ -1,831 +0,0 @@
-(function () {
-
-/* Imports */
-var Meteor = Package.meteor.Meteor;
-var Log = Package.logging.Log;
-var _ = Package.underscore._;
-var RoutePolicy = Package.routepolicy.RoutePolicy;
-var Boilerplate = Package['boilerplate-generator'].Boilerplate;
-var WebAppHashing = Package['webapp-hashing'].WebAppHashing;
-
-/* Package-scope variables */
-var WebApp, main, WebAppInternals;
-
-(function () {
-
-//////////////////////////////////////////////////////////////////////////////////////
-// //
-// packages/webapp/webapp_server.js //
-// //
-//////////////////////////////////////////////////////////////////////////////////////
- //
-////////// Requires ////////// // 1
- // 2
-var fs = Npm.require("fs"); // 3
-var http = Npm.require("http"); // 4
-var os = Npm.require("os"); // 5
-var path = Npm.require("path"); // 6
-var url = Npm.require("url"); // 7
-var crypto = Npm.require("crypto"); // 8
- // 9
-var connect = Npm.require('connect'); // 10
-var useragent = Npm.require('useragent'); // 11
-var send = Npm.require('send'); // 12
- // 13
-var Future = Npm.require('fibers/future'); // 14
-var Fiber = Npm.require('fibers'); // 15
- // 16
-var SHORT_SOCKET_TIMEOUT = 5*1000; // 17
-var LONG_SOCKET_TIMEOUT = 120*1000; // 18
- // 19
-WebApp = {}; // 20
-WebAppInternals = {}; // 21
- // 22
-WebAppInternals.NpmModules = { // 23
- connect: { // 24
- version: Npm.require('connect/package.json').version, // 25
- module: connect // 26
- } // 27
-}; // 28
- // 29
-WebApp.defaultArch = 'web.browser'; // 30
- // 31
-// XXX maps archs to manifests // 32
-WebApp.clientPrograms = {}; // 33
- // 34
-// XXX maps archs to program path on filesystem // 35
-var archPath = {}; // 36
- // 37
-var bundledJsCssPrefix; // 38
- // 39
-var sha1 = function (contents) { // 40
- var hash = crypto.createHash('sha1'); // 41
- hash.update(contents); // 42
- return hash.digest('hex'); // 43
-}; // 44
- // 45
-var readUtf8FileSync = function (filename) { // 46
- return Meteor.wrapAsync(fs.readFile)(filename, 'utf8'); // 47
-}; // 48
- // 49
-// #BrowserIdentification // 50
-// // 51
-// We have multiple places that want to identify the browser: the // 52
-// unsupported browser page, the appcache package, and, eventually // 53
-// delivering browser polyfills only as needed. // 54
-// // 55
-// To avoid detecting the browser in multiple places ad-hoc, we create a // 56
-// Meteor "browser" object. It uses but does not expose the npm // 57
-// useragent module (we could choose a different mechanism to identify // 58
-// the browser in the future if we wanted to). The browser object // 59
-// contains // 60
-// // 61
-// * `name`: the name of the browser in camel case // 62
-// * `major`, `minor`, `patch`: integers describing the browser version // 63
-// // 64
-// Also here is an early version of a Meteor `request` object, intended // 65
-// to be a high-level description of the request without exposing // 66
-// details of connect's low-level `req`. Currently it contains: // 67
-// // 68
-// * `browser`: browser identification object described above // 69
-// * `url`: parsed url, including parsed query params // 70
-// // 71
-// As a temporary hack there is a `categorizeRequest` function on WebApp which // 72
-// converts a connect `req` to a Meteor `request`. This can go away once smart // 73
-// packages such as appcache are being passed a `request` object directly when // 74
-// they serve content. // 75
-// // 76
-// This allows `request` to be used uniformly: it is passed to the html // 77
-// attributes hook, and the appcache package can use it when deciding // 78
-// whether to generate a 404 for the manifest. // 79
-// // 80
-// Real routing / server side rendering will probably refactor this // 81
-// heavily. // 82
- // 83
- // 84
-// e.g. "Mobile Safari" => "mobileSafari" // 85
-var camelCase = function (name) { // 86
- var parts = name.split(' '); // 87
- parts[0] = parts[0].toLowerCase(); // 88
- for (var i = 1; i < parts.length; ++i) { // 89
- parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].substr(1); // 90
- } // 91
- return parts.join(''); // 92
-}; // 93
- // 94
-var identifyBrowser = function (userAgentString) { // 95
- var userAgent = useragent.lookup(userAgentString); // 96
- return { // 97
- name: camelCase(userAgent.family), // 98
- major: +userAgent.major, // 99
- minor: +userAgent.minor, // 100
- patch: +userAgent.patch // 101
- }; // 102
-}; // 103
- // 104
-// XXX Refactor as part of implementing real routing. // 105
-WebAppInternals.identifyBrowser = identifyBrowser; // 106
- // 107
-WebApp.categorizeRequest = function (req) { // 108
- return { // 109
- browser: identifyBrowser(req.headers['user-agent']), // 110
- url: url.parse(req.url, true) // 111
- }; // 112
-}; // 113
- // 114
-// HTML attribute hooks: functions to be called to determine any attributes to // 115
-// be added to the '' tag. Each function is passed a 'request' object (see // 116
-// #BrowserIdentification) and should return null or object. // 117
-var htmlAttributeHooks = []; // 118
-var getHtmlAttributes = function (request) { // 119
- var combinedAttributes = {}; // 120
- _.each(htmlAttributeHooks || [], function (hook) { // 121
- var attributes = hook(request); // 122
- if (attributes === null) // 123
- return; // 124
- if (typeof attributes !== 'object') // 125
- throw Error("HTML attribute hook must return null or object"); // 126
- _.extend(combinedAttributes, attributes); // 127
- }); // 128
- return combinedAttributes; // 129
-}; // 130
-WebApp.addHtmlAttributeHook = function (hook) { // 131
- htmlAttributeHooks.push(hook); // 132
-}; // 133
- // 134
-// Serve app HTML for this URL? // 135
-var appUrl = function (url) { // 136
- if (url === '/favicon.ico' || url === '/robots.txt') // 137
- return false; // 138
- // 139
- // NOTE: app.manifest is not a web standard like favicon.ico and // 140
- // robots.txt. It is a file name we have chosen to use for HTML5 // 141
- // appcache URLs. It is included here to prevent using an appcache // 142
- // then removing it from poisoning an app permanently. Eventually, // 143
- // once we have server side routing, this won't be needed as // 144
- // unknown URLs with return a 404 automatically. // 145
- if (url === '/app.manifest') // 146
- return false; // 147
- // 148
- // Avoid serving app HTML for declared routes such as /sockjs/. // 149
- if (RoutePolicy.classify(url)) // 150
- return false; // 151
- // 152
- // we currently return app HTML on all URLs by default // 153
- return true; // 154
-}; // 155
- // 156
- // 157
-// We need to calculate the client hash after all packages have loaded // 158
-// to give them a chance to populate __meteor_runtime_config__. // 159
-// // 160
-// Calculating the hash during startup means that packages can only // 161
-// populate __meteor_runtime_config__ during load, not during startup. // 162
-// // 163
-// Calculating instead it at the beginning of main after all startup // 164
-// hooks had run would allow packages to also populate // 165
-// __meteor_runtime_config__ during startup, but that's too late for // 166
-// autoupdate because it needs to have the client hash at startup to // 167
-// insert the auto update version itself into // 168
-// __meteor_runtime_config__ to get it to the client. // 169
-// // 170
-// An alternative would be to give autoupdate a "post-start, // 171
-// pre-listen" hook to allow it to insert the auto update version at // 172
-// the right moment. // 173
- // 174
-Meteor.startup(function () { // 175
- var calculateClientHash = WebAppHashing.calculateClientHash; // 176
- WebApp.clientHash = function (archName) { // 177
- archName = archName || WebApp.defaultArch; // 178
- return calculateClientHash(WebApp.clientPrograms[archName].manifest); // 179
- }; // 180
- // 181
- WebApp.calculateClientHashRefreshable = function (archName) { // 182
- archName = archName || WebApp.defaultArch; // 183
- return calculateClientHash(WebApp.clientPrograms[archName].manifest, // 184
- function (name) { // 185
- return name === "css"; // 186
- }); // 187
- }; // 188
- WebApp.calculateClientHashNonRefreshable = function (archName) { // 189
- archName = archName || WebApp.defaultArch; // 190
- return calculateClientHash(WebApp.clientPrograms[archName].manifest, // 191
- function (name) { // 192
- return name !== "css"; // 193
- }); // 194
- }; // 195
- WebApp.calculateClientHashCordova = function () { // 196
- var archName = 'web.cordova'; // 197
- if (! WebApp.clientPrograms[archName]) // 198
- return 'none'; // 199
- // 200
- return calculateClientHash( // 201
- WebApp.clientPrograms[archName].manifest, null, _.pick( // 202
- __meteor_runtime_config__, 'PUBLIC_SETTINGS')); // 203
- }; // 204
-}); // 205
- // 206
- // 207
- // 208
-// When we have a request pending, we want the socket timeout to be long, to // 209
-// give ourselves a while to serve it, and to allow sockjs long polls to // 210
-// complete. On the other hand, we want to close idle sockets relatively // 211
-// quickly, so that we can shut down relatively promptly but cleanly, without // 212
-// cutting off anyone's response. // 213
-WebApp._timeoutAdjustmentRequestCallback = function (req, res) { // 214
- // this is really just req.socket.setTimeout(LONG_SOCKET_TIMEOUT); // 215
- req.setTimeout(LONG_SOCKET_TIMEOUT); // 216
- // Insert our new finish listener to run BEFORE the existing one which removes // 217
- // the response from the socket. // 218
- var finishListeners = res.listeners('finish'); // 219
- // XXX Apparently in Node 0.12 this event is now called 'prefinish'. // 220
- // https://github.com/joyent/node/commit/7c9b6070 // 221
- res.removeAllListeners('finish'); // 222
- res.on('finish', function () { // 223
- res.setTimeout(SHORT_SOCKET_TIMEOUT); // 224
- }); // 225
- _.each(finishListeners, function (l) { res.on('finish', l); }); // 226
-}; // 227
- // 228
- // 229
-// Will be updated by main before we listen. // 230
-// Map from client arch to boilerplate object. // 231
-// Boilerplate object has: // 232
-// - func: XXX // 233
-// - baseData: XXX // 234
-var boilerplateByArch = {}; // 235
- // 236
-// Given a request (as returned from `categorizeRequest`), return the // 237
-// boilerplate HTML to serve for that request. Memoizes on HTML // 238
-// attributes (used by, eg, appcache) and whether inline scripts are // 239
-// currently allowed. // 240
-// XXX so far this function is always called with arch === 'web.browser' // 241
-var memoizedBoilerplate = {}; // 242
-var getBoilerplate = function (request, arch) { // 243
- // 244
- var htmlAttributes = getHtmlAttributes(request); // 245
- // 246
- // The only thing that changes from request to request (for now) are // 247
- // the HTML attributes (used by, eg, appcache) and whether inline // 248
- // scripts are allowed, so we can memoize based on that. // 249
- var memHash = JSON.stringify({ // 250
- inlineScriptsAllowed: inlineScriptsAllowed, // 251
- htmlAttributes: htmlAttributes, // 252
- arch: arch // 253
- }); // 254
- // 255
- if (! memoizedBoilerplate[memHash]) { // 256
- memoizedBoilerplate[memHash] = boilerplateByArch[arch].toHTML({ // 257
- htmlAttributes: htmlAttributes // 258
- }); // 259
- } // 260
- return memoizedBoilerplate[memHash]; // 261
-}; // 262
- // 263
-WebAppInternals.generateBoilerplateInstance = function (arch, // 264
- manifest, // 265
- additionalOptions) { // 266
- additionalOptions = additionalOptions || {}; // 267
- // 268
- var runtimeConfig = _.extend( // 269
- _.clone(__meteor_runtime_config__), // 270
- additionalOptions.runtimeConfigOverrides || {} // 271
- ); // 272
- // 273
- var jsCssPrefix; // 274
- if (arch === 'web.cordova') { // 275
- // in cordova we serve assets up directly from disk so it doesn't make // 276
- // sense to use the prefix (ordinarily something like a CDN) and go out // 277
- // to the internet for those files. // 278
- jsCssPrefix = ''; // 279
- } else { // 280
- jsCssPrefix = bundledJsCssPrefix || // 281
- __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || ''; // 282
- } // 283
- // 284
- return new Boilerplate(arch, manifest, // 285
- _.extend({ // 286
- pathMapper: function (itemPath) { // 287
- return path.join(archPath[arch], itemPath); }, // 288
- baseDataExtension: { // 289
- additionalStaticJs: _.map( // 290
- additionalStaticJs || [], // 291
- function (contents, pathname) { // 292
- return { // 293
- pathname: pathname, // 294
- contents: contents // 295
- }; // 296
- } // 297
- ), // 298
- // Convert to a JSON string, then get rid of most weird characters, then // 299
- // wrap in double quotes. (The outermost JSON.stringify really ought to // 300
- // just be "wrap in double quotes" but we use it to be safe.) This might // 301
- // end up inside a ", but normal {{spacebars}} escaping escapes too much! See // 303
- // https://github.com/meteor/meteor/issues/3730 // 304
- meteorRuntimeConfig: JSON.stringify( // 305
- encodeURIComponent(JSON.stringify(runtimeConfig))), // 306
- rootUrlPathPrefix: __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '', // 307
- bundledJsCssPrefix: jsCssPrefix, // 308
- inlineScriptsAllowed: WebAppInternals.inlineScriptsAllowed(), // 309
- inline: additionalOptions.inline // 310
- } // 311
- }, additionalOptions) // 312
- ); // 313
-}; // 314
- // 315
-// A mapping from url path to "info". Where "info" has the following fields: // 316
-// - type: the type of file to be served // 317
-// - cacheable: optionally, whether the file should be cached or not // 318
-// - sourceMapUrl: optionally, the url of the source map // 319
-// // 320
-// Info also contains one of the following: // 321
-// - content: the stringified content that should be served at this path // 322
-// - absolutePath: the absolute path on disk to the file // 323
- // 324
-var staticFiles; // 325
- // 326
-// Serve static files from the manifest or added with // 327
-// `addStaticJs`. Exported for tests. // 328
-WebAppInternals.staticFilesMiddleware = function (staticFiles, req, res, next) { // 329
- if ('GET' != req.method && 'HEAD' != req.method) { // 330
- next(); // 331
- return; // 332
- } // 333
- var pathname = connect.utils.parseUrl(req).pathname; // 334
- try { // 335
- pathname = decodeURIComponent(pathname); // 336
- } catch (e) { // 337
- next(); // 338
- return; // 339
- } // 340
- // 341
- var serveStaticJs = function (s) { // 342
- res.writeHead(200, { // 343
- 'Content-type': 'application/javascript; charset=UTF-8' // 344
- }); // 345
- res.write(s); // 346
- res.end(); // 347
- }; // 348
- // 349
- if (pathname === "/meteor_runtime_config.js" && // 350
- ! WebAppInternals.inlineScriptsAllowed()) { // 351
- serveStaticJs("__meteor_runtime_config__ = " + // 352
- JSON.stringify(__meteor_runtime_config__) + ";"); // 353
- return; // 354
- } else if (_.has(additionalStaticJs, pathname) && // 355
- ! WebAppInternals.inlineScriptsAllowed()) { // 356
- serveStaticJs(additionalStaticJs[pathname]); // 357
- return; // 358
- } // 359
- // 360
- if (!_.has(staticFiles, pathname)) { // 361
- next(); // 362
- return; // 363
- } // 364
- // 365
- // We don't need to call pause because, unlike 'static', once we call into // 366
- // 'send' and yield to the event loop, we never call another handler with // 367
- // 'next'. // 368
- // 369
- var info = staticFiles[pathname]; // 370
- // 371
- // Cacheable files are files that should never change. Typically // 372
- // named by their hash (eg meteor bundled js and css files). // 373
- // We cache them ~forever (1yr). // 374
- // // 375
- // We cache non-cacheable files anyway. This isn't really correct, as users // 376
- // can change the files and changes won't propagate immediately. However, if // 377
- // we don't cache them, browsers will 'flicker' when rerendering // 378
- // images. Eventually we will probably want to rewrite URLs of static assets // 379
- // to include a query parameter to bust caches. That way we can both get // 380
- // good caching behavior and allow users to change assets without delay. // 381
- // https://github.com/meteor/meteor/issues/773 // 382
- var maxAge = info.cacheable // 383
- ? 1000 * 60 * 60 * 24 * 365 // 384
- : 1000 * 60 * 60 * 24; // 385
- // 386
- // Set the X-SourceMap header, which current Chrome, FireFox, and Safari // 387
- // understand. (The SourceMap header is slightly more spec-correct but FF // 388
- // doesn't understand it.) // 389
- // // 390
- // You may also need to enable source maps in Chrome: open dev tools, click // 391
- // the gear in the bottom right corner, and select "enable source maps". // 392
- if (info.sourceMapUrl) { // 393
- res.setHeader('X-SourceMap', // 394
- __meteor_runtime_config__.ROOT_URL_PATH_PREFIX + // 395
- info.sourceMapUrl); // 396
- } // 397
- // 398
- if (info.type === "js") { // 399
- res.setHeader("Content-Type", "application/javascript; charset=UTF-8"); // 400
- } else if (info.type === "css") { // 401
- res.setHeader("Content-Type", "text/css; charset=UTF-8"); // 402
- } else if (info.type === "json") { // 403
- res.setHeader("Content-Type", "application/json; charset=UTF-8"); // 404
- // XXX if it is a manifest we are serving, set additional headers // 405
- if (/\/manifest.json$/.test(pathname)) { // 406
- res.setHeader("Access-Control-Allow-Origin", "*"); // 407
- } // 408
- } // 409
- // 410
- if (info.content) { // 411
- res.write(info.content); // 412
- res.end(); // 413
- } else { // 414
- send(req, info.absolutePath) // 415
- .maxage(maxAge) // 416
- .hidden(true) // if we specified a dotfile in the manifest, serve it // 417
- .on('error', function (err) { // 418
- Log.error("Error serving static file " + err); // 419
- res.writeHead(500); // 420
- res.end(); // 421
- }) // 422
- .on('directory', function () { // 423
- Log.error("Unexpected directory " + info.absolutePath); // 424
- res.writeHead(500); // 425
- res.end(); // 426
- }) // 427
- .pipe(res); // 428
- } // 429
-}; // 430
- // 431
-var getUrlPrefixForArch = function (arch) { // 432
- // XXX we rely on the fact that arch names don't contain slashes // 433
- // in that case we would need to uri escape it // 434
- // 435
- // We add '__' to the beginning of non-standard archs to "scope" the url // 436
- // to Meteor internals. // 437
- return arch === WebApp.defaultArch ? // 438
- '' : '/' + '__' + arch.replace(/^web\./, ''); // 439
-}; // 440
- // 441
-var runWebAppServer = function () { // 442
- var shuttingDown = false; // 443
- var syncQueue = new Meteor._SynchronousQueue(); // 444
- // 445
- var getItemPathname = function (itemUrl) { // 446
- return decodeURIComponent(url.parse(itemUrl).pathname); // 447
- }; // 448
- // 449
- WebAppInternals.reloadClientPrograms = function () { // 450
- syncQueue.runTask(function() { // 451
- staticFiles = {}; // 452
- var generateClientProgram = function (clientPath, arch) { // 453
- // read the control for the client we'll be serving up // 454
- var clientJsonPath = path.join(__meteor_bootstrap__.serverDir, // 455
- clientPath); // 456
- var clientDir = path.dirname(clientJsonPath); // 457
- var clientJson = JSON.parse(readUtf8FileSync(clientJsonPath)); // 458
- if (clientJson.format !== "web-program-pre1") // 459
- throw new Error("Unsupported format for client assets: " + // 460
- JSON.stringify(clientJson.format)); // 461
- // 462
- if (! clientJsonPath || ! clientDir || ! clientJson) // 463
- throw new Error("Client config file not parsed."); // 464
- // 465
- var urlPrefix = getUrlPrefixForArch(arch); // 466
- // 467
- var manifest = clientJson.manifest; // 468
- _.each(manifest, function (item) { // 469
- if (item.url && item.where === "client") { // 470
- staticFiles[urlPrefix + getItemPathname(item.url)] = { // 471
- absolutePath: path.join(clientDir, item.path), // 472
- cacheable: item.cacheable, // 473
- // Link from source to its map // 474
- sourceMapUrl: item.sourceMapUrl, // 475
- type: item.type // 476
- }; // 477
- // 478
- if (item.sourceMap) { // 479
- // Serve the source map too, under the specified URL. We assume all // 480
- // source maps are cacheable. // 481
- staticFiles[urlPrefix + getItemPathname(item.sourceMapUrl)] = { // 482
- absolutePath: path.join(clientDir, item.sourceMap), // 483
- cacheable: true // 484
- }; // 485
- } // 486
- } // 487
- }); // 488
- // 489
- var program = { // 490
- manifest: manifest, // 491
- version: WebAppHashing.calculateClientHash(manifest, null, _.pick( // 492
- __meteor_runtime_config__, 'PUBLIC_SETTINGS')), // 493
- PUBLIC_SETTINGS: __meteor_runtime_config__.PUBLIC_SETTINGS // 494
- }; // 495
- // 496
- WebApp.clientPrograms[arch] = program; // 497
- // 498
- // Serve the program as a string at /foo/
/manifest.json // 499
- // XXX change manifest.json -> program.json // 500
- staticFiles[path.join(urlPrefix, 'manifest.json')] = { // 501
- content: JSON.stringify(program), // 502
- cacheable: true, // 503
- type: "json" // 504
- }; // 505
- }; // 506
- // 507
- try { // 508
- var clientPaths = __meteor_bootstrap__.configJson.clientPaths; // 509
- _.each(clientPaths, function (clientPath, arch) { // 510
- archPath[arch] = path.dirname(clientPath); // 511
- generateClientProgram(clientPath, arch); // 512
- }); // 513
- // 514
- // Exported for tests. // 515
- WebAppInternals.staticFiles = staticFiles; // 516
- } catch (e) { // 517
- Log.error("Error reloading the client program: " + e.stack); // 518
- process.exit(1); // 519
- } // 520
- }); // 521
- }; // 522
- // 523
- WebAppInternals.generateBoilerplate = function () { // 524
- // This boilerplate will be served to the mobile devices when used with // 525
- // Meteor/Cordova for the Hot-Code Push and since the file will be served by // 526
- // the device's server, it is important to set the DDP url to the actual // 527
- // Meteor server accepting DDP connections and not the device's file server. // 528
- var defaultOptionsForArch = { // 529
- 'web.cordova': { // 530
- runtimeConfigOverrides: { // 531
- // XXX We use absoluteUrl() here so that we serve https:// // 532
- // URLs to cordova clients if force-ssl is in use. If we were // 533
- // to use __meteor_runtime_config__.ROOT_URL instead of // 534
- // absoluteUrl(), then Cordova clients would immediately get a // 535
- // HCP setting their DDP_DEFAULT_CONNECTION_URL to // 536
- // http://example.meteor.com. This breaks the app, because // 537
- // force-ssl doesn't serve CORS headers on 302 // 538
- // redirects. (Plus it's undesirable to have clients // 539
- // connecting to http://example.meteor.com when force-ssl is // 540
- // in use.) // 541
- DDP_DEFAULT_CONNECTION_URL: process.env.MOBILE_DDP_URL || // 542
- Meteor.absoluteUrl(), // 543
- ROOT_URL: process.env.MOBILE_ROOT_URL || // 544
- Meteor.absoluteUrl() // 545
- } // 546
- } // 547
- }; // 548
- // 549
- syncQueue.runTask(function() { // 550
- _.each(WebApp.clientPrograms, function (program, archName) { // 551
- boilerplateByArch[archName] = // 552
- WebAppInternals.generateBoilerplateInstance( // 553
- archName, program.manifest, // 554
- defaultOptionsForArch[archName]); // 555
- }); // 556
- // 557
- // Clear the memoized boilerplate cache. // 558
- memoizedBoilerplate = {}; // 559
- // 560
- // Configure CSS injection for the default arch // 561
- // XXX implement the CSS injection for all archs? // 562
- WebAppInternals.refreshableAssets = { // 563
- allCss: boilerplateByArch[WebApp.defaultArch].baseData.css // 564
- }; // 565
- }); // 566
- }; // 567
- // 568
- WebAppInternals.reloadClientPrograms(); // 569
- // 570
- // webserver // 571
- var app = connect(); // 572
- // 573
- // Auto-compress any json, javascript, or text. // 574
- app.use(connect.compress()); // 575
- // 576
- // Packages and apps can add handlers that run before any other Meteor // 577
- // handlers via WebApp.rawConnectHandlers. // 578
- var rawConnectHandlers = connect(); // 579
- app.use(rawConnectHandlers); // 580
- // 581
- // We're not a proxy; reject (without crashing) attempts to treat us like // 582
- // one. (See #1212.) // 583
- app.use(function(req, res, next) { // 584
- if (RoutePolicy.isValidUrl(req.url)) { // 585
- next(); // 586
- return; // 587
- } // 588
- res.writeHead(400); // 589
- res.write("Not a proxy"); // 590
- res.end(); // 591
- }); // 592
- // 593
- // Strip off the path prefix, if it exists. // 594
- app.use(function (request, response, next) { // 595
- var pathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX; // 596
- var url = Npm.require('url').parse(request.url); // 597
- var pathname = url.pathname; // 598
- // check if the path in the url starts with the path prefix (and the part // 599
- // after the path prefix must start with a / if it exists.) // 600
- if (pathPrefix && pathname.substring(0, pathPrefix.length) === pathPrefix && // 601
- (pathname.length == pathPrefix.length // 602
- || pathname.substring(pathPrefix.length, pathPrefix.length + 1) === "/")) { // 603
- request.url = request.url.substring(pathPrefix.length); // 604
- next(); // 605
- } else if (pathname === "/favicon.ico" || pathname === "/robots.txt") { // 606
- next(); // 607
- } else if (pathPrefix) { // 608
- response.writeHead(404); // 609
- response.write("Unknown path"); // 610
- response.end(); // 611
- } else { // 612
- next(); // 613
- } // 614
- }); // 615
- // 616
- // Parse the query string into res.query. Used by oauth_server, but it's // 617
- // generally pretty handy.. // 618
- app.use(connect.query()); // 619
- // 620
- // Serve static files from the manifest. // 621
- // This is inspired by the 'static' middleware. // 622
- app.use(function (req, res, next) { // 623
- Fiber(function () { // 624
- WebAppInternals.staticFilesMiddleware(staticFiles, req, res, next); // 625
- }).run(); // 626
- }); // 627
- // 628
- // Packages and apps can add handlers to this via WebApp.connectHandlers. // 629
- // They are inserted before our default handler. // 630
- var packageAndAppHandlers = connect(); // 631
- app.use(packageAndAppHandlers); // 632
- // 633
- var suppressConnectErrors = false; // 634
- // connect knows it is an error handler because it has 4 arguments instead of // 635
- // 3. go figure. (It is not smart enough to find such a thing if it's hidden // 636
- // inside packageAndAppHandlers.) // 637
- app.use(function (err, req, res, next) { // 638
- if (!err || !suppressConnectErrors || !req.headers['x-suppress-error']) { // 639
- next(err); // 640
- return; // 641
- } // 642
- res.writeHead(err.status, { 'Content-Type': 'text/plain' }); // 643
- res.end("An error message"); // 644
- }); // 645
- // 646
- app.use(function (req, res, next) { // 647
- if (! appUrl(req.url)) // 648
- return next(); // 649
- // 650
- var headers = { // 651
- 'Content-Type': 'text/html; charset=utf-8' // 652
- }; // 653
- if (shuttingDown) // 654
- headers['Connection'] = 'Close'; // 655
- // 656
- var request = WebApp.categorizeRequest(req); // 657
- // 658
- if (request.url.query && request.url.query['meteor_css_resource']) { // 659
- // In this case, we're requesting a CSS resource in the meteor-specific // 660
- // way, but we don't have it. Serve a static css file that indicates that // 661
- // we didn't have it, so we can detect that and refresh. // 662
- headers['Content-Type'] = 'text/css; charset=utf-8'; // 663
- res.writeHead(200, headers); // 664
- res.write(".meteor-css-not-found-error { width: 0px;}"); // 665
- res.end(); // 666
- return undefined; // 667
- } // 668
- // 669
- // /packages/asdfsad ... /__cordova/dafsdf.js // 670
- var pathname = connect.utils.parseUrl(req).pathname; // 671
- var archKey = pathname.split('/')[1]; // 672
- var archKeyCleaned = 'web.' + archKey.replace(/^__/, ''); // 673
- // 674
- if (! /^__/.test(archKey) || ! _.has(archPath, archKeyCleaned)) { // 675
- archKey = WebApp.defaultArch; // 676
- } else { // 677
- archKey = archKeyCleaned; // 678
- } // 679
- // 680
- var boilerplate; // 681
- try { // 682
- boilerplate = getBoilerplate(request, archKey); // 683
- } catch (e) { // 684
- Log.error("Error running template: " + e); // 685
- res.writeHead(500, headers); // 686
- res.end(); // 687
- return undefined; // 688
- } // 689
- // 690
- res.writeHead(200, headers); // 691
- res.write(boilerplate); // 692
- res.end(); // 693
- return undefined; // 694
- }); // 695
- // 696
- // Return 404 by default, if no other handlers serve this URL. // 697
- app.use(function (req, res) { // 698
- res.writeHead(404); // 699
- res.end(); // 700
- }); // 701
- // 702
- // 703
- var httpServer = http.createServer(app); // 704
- var onListeningCallbacks = []; // 705
- // 706
- // After 5 seconds w/o data on a socket, kill it. On the other hand, if // 707
- // there's an outstanding request, give it a higher timeout instead (to avoid // 708
- // killing long-polling requests) // 709
- httpServer.setTimeout(SHORT_SOCKET_TIMEOUT); // 710
- // 711
- // Do this here, and then also in livedata/stream_server.js, because // 712
- // stream_server.js kills all the current request handlers when installing its // 713
- // own. // 714
- httpServer.on('request', WebApp._timeoutAdjustmentRequestCallback); // 715
- // 716
- // 717
- // start up app // 718
- _.extend(WebApp, { // 719
- connectHandlers: packageAndAppHandlers, // 720
- rawConnectHandlers: rawConnectHandlers, // 721
- httpServer: httpServer, // 722
- // For testing. // 723
- suppressConnectErrors: function () { // 724
- suppressConnectErrors = true; // 725
- }, // 726
- onListening: function (f) { // 727
- if (onListeningCallbacks) // 728
- onListeningCallbacks.push(f); // 729
- else // 730
- f(); // 731
- } // 732
- }); // 733
- // 734
- // Let the rest of the packages (and Meteor.startup hooks) insert connect // 735
- // middlewares and update __meteor_runtime_config__, then keep going to set up // 736
- // actually serving HTML. // 737
- main = function (argv) { // 738
- WebAppInternals.generateBoilerplate(); // 739
- // 740
- // only start listening after all the startup code has run. // 741
- var localPort = parseInt(process.env.PORT) || 0; // 742
- var host = process.env.BIND_IP; // 743
- var localIp = host || '0.0.0.0'; // 744
- httpServer.listen(localPort, localIp, Meteor.bindEnvironment(function() { // 745
- if (process.env.METEOR_PRINT_ON_LISTEN) // 746
- console.log("LISTENING"); // must match run-app.js // 747
- // 748
- var callbacks = onListeningCallbacks; // 749
- onListeningCallbacks = null; // 750
- _.each(callbacks, function (x) { x(); }); // 751
- // 752
- }, function (e) { // 753
- console.error("Error listening:", e); // 754
- console.error(e && e.stack); // 755
- })); // 756
- // 757
- return 'DAEMON'; // 758
- }; // 759
-}; // 760
- // 761
- // 762
-runWebAppServer(); // 763
- // 764
- // 765
-var inlineScriptsAllowed = true; // 766
- // 767
-WebAppInternals.inlineScriptsAllowed = function () { // 768
- return inlineScriptsAllowed; // 769
-}; // 770
- // 771
-WebAppInternals.setInlineScriptsAllowed = function (value) { // 772
- inlineScriptsAllowed = value; // 773
- WebAppInternals.generateBoilerplate(); // 774
-}; // 775
- // 776
-WebAppInternals.setBundledJsCssPrefix = function (prefix) { // 777
- bundledJsCssPrefix = prefix; // 778
- WebAppInternals.generateBoilerplate(); // 779
-}; // 780
- // 781
-// Packages can call `WebAppInternals.addStaticJs` to specify static // 782
-// JavaScript to be included in the app. This static JS will be inlined, // 783
-// unless inline scripts have been disabled, in which case it will be // 784
-// served under `/`. // 785
-var additionalStaticJs = {}; // 786
-WebAppInternals.addStaticJs = function (contents) { // 787
- additionalStaticJs["/" + sha1(contents) + ".js"] = contents; // 788
-}; // 789
- // 790
-// Exported for tests // 791
-WebAppInternals.getBoilerplate = getBoilerplate; // 792
-WebAppInternals.additionalStaticJs = additionalStaticJs; // 793
- // 794
-//////////////////////////////////////////////////////////////////////////////////////
-
-}).call(this);
-
-
-/* Exports */
-if (typeof Package === 'undefined') Package = {};
-Package.webapp = {
- WebApp: WebApp,
- main: main,
- WebAppInternals: WebAppInternals
-};
-
-})();
-
-//# sourceMappingURL=webapp.js.map
diff --git a/web-app/.meteor/local/build/programs/server/packages/webapp.js.map b/web-app/.meteor/local/build/programs/server/packages/webapp.js.map
deleted file mode 100644
index 5867d0b..0000000
--- a/web-app/.meteor/local/build/programs/server/packages/webapp.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["webapp/webapp_server.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,8B;;AAEA,2B;AACA,+B;AACA,2B;AACA,+B;AACA,6B;AACA,mC;;AAEA,qC;AACA,yC;AACA,+B;;AAEA,0C;AACA,kC;;AAEA,kC;AACA,mC;;AAEA,Y;AACA,qB;;AAEA,8B;AACA,Y;AACA,yD;AACA,mB;AACA,G;AACA,E;;AAEA,mC;;AAEA,8B;AACA,2B;;AAEA,+C;AACA,kB;;AAEA,uB;;AAEA,gC;AACA,uC;AACA,wB;AACA,4B;AACA,E;;AAEA,4C;AACA,yD;AACA,E;;AAEA,yB;AACA,E;AACA,iE;AACA,kE;AACA,+C;AACA,E;AACA,wE;AACA,+D;AACA,sE;AACA,kE;AACA,W;AACA,E;AACA,kD;AACA,uE;AACA,E;AACA,uE;AACA,iE;AACA,gE;AACA,E;AACA,6D;AACA,qD;AACA,E;AACA,8E;AACA,8E;AACA,8E;AACA,sB;AACA,E;AACA,uE;AACA,qE;AACA,8C;AACA,E;AACA,mE;AACA,W;;;AAGA,yC;AACA,iC;AACA,8B;AACA,oC;AACA,4C;AACA,qE;AACA,G;AACA,wB;AACA,E;;AAEA,kD;AACA,oD;AACA,U;AACA,sC;AACA,4B;AACA,4B;AACA,2B;AACA,I;AACA,E;;AAEA,qD;AACA,kD;;AAEA,2C;AACA,U;AACA,wD;AACA,iC;AACA,I;AACA,E;;AAEA,8E;AACA,gF;AACA,4D;AACA,4B;AACA,4C;AACA,+B;AACA,oD;AACA,mC;AACA,4B;AACA,a;AACA,uC;AACA,oE;AACA,6C;AACA,K;AACA,4B;AACA,E;AACA,+C;AACA,gC;AACA,E;;AAEA,+B;AACA,6B;AACA,sD;AACA,iB;;AAEA,kE;AACA,kE;AACA,oE;AACA,oE;AACA,8D;AACA,kD;AACA,8B;AACA,iB;;AAEA,iE;AACA,gC;AACA,iB;;AAEA,wD;AACA,c;AACA,E;;;AAGA,sE;AACA,+D;AACA,E;AACA,mE;AACA,sE;AACA,E;AACA,oE;AACA,sD;AACA,oE;AACA,oE;AACA,6C;AACA,qD;AACA,E;AACA,4D;AACA,oE;AACA,oB;;AAEA,4B;AACA,8D;AACA,2C;AACA,8C;AACA,yE;AACA,I;;AAEA,+D;AACA,8C;AACA,wE;AACA,uB;AACA,8B;AACA,S;AACA,I;AACA,kE;AACA,8C;AACA,wE;AACA,uB;AACA,8B;AACA,S;AACA,I;AACA,mD;AACA,iC;AACA,0C;AACA,oB;;AAEA,+B;AACA,6D;AACA,uD;AACA,I;AACA,G;;;;AAIA,4E;AACA,wE;AACA,yE;AACA,6E;AACA,iC;AACA,gE;AACA,oE;AACA,sC;AACA,gF;AACA,kC;AACA,gD;AACA,sE;AACA,mD;AACA,mC;AACA,gC;AACA,yC;AACA,K;AACA,iE;AACA,E;;;AAGA,4C;AACA,8C;AACA,0B;AACA,gB;AACA,oB;AACA,2B;;AAEA,qE;AACA,+D;AACA,oE;AACA,qB;AACA,wE;AACA,6B;AACA,+C;;AAEA,kD;;AAEA,sE;AACA,mE;AACA,0D;AACA,gC;AACA,+C;AACA,mC;AACA,c;AACA,K;;AAEA,uC;AACA,mE;AACA,oC;AACA,O;AACA,G;AACA,sC;AACA,E;;AAEA,6D;AACA,iE;AACA,4E;AACA,8C;;AAEA,+B;AACA,uC;AACA,kD;AACA,I;;AAEA,kB;AACA,+B;AACA,0E;AACA,2E;AACA,uC;AACA,qB;AACA,U;AACA,uC;AACA,2D;AACA,G;;AAEA,wC;AACA,c;AACA,uC;AACA,sD;AACA,0B;AACA,kC;AACA,mC;AACA,yC;AACA,oB;AACA,iC;AACA,gC;AACA,c;AACA,W;AACA,U;AACA,gF;AACA,+E;AACA,gF;AACA,+E;AACA,+E;AACA,uD;AACA,4C;AACA,6D;AACA,gF;AACA,wC;AACA,qE;AACA,wC;AACA,O;AACA,yB;AACA,I;AACA,E;;AAEA,4E;AACA,wC;AACA,oE;AACA,wD;AACA,E;AACA,2C;AACA,wE;AACA,wD;;AAEA,gB;;AAEA,qD;AACA,qC;AACA,gF;AACA,oD;AACA,W;AACA,W;AACA,G;AACA,sD;AACA,O;AACA,4C;AACA,e;AACA,W;AACA,W;AACA,G;;AAEA,oC;AACA,wB;AACA,6D;AACA,O;AACA,iB;AACA,c;AACA,I;;AAEA,iD;AACA,iD;AACA,kD;AACA,mE;AACA,W;AACA,mD;AACA,yD;AACA,gD;AACA,W;AACA,G;;AAEA,sC;AACA,W;AACA,W;AACA,G;;AAEA,4E;AACA,2E;AACA,Y;;AAEA,mC;;AAEA,kE;AACA,8D;AACA,kC;AACA,I;AACA,6E;AACA,8E;AACA,kE;AACA,8E;AACA,0E;AACA,0E;AACA,gD;AACA,6B;AACA,mC;AACA,8B;;AAEA,0E;AACA,4E;AACA,4B;AACA,I;AACA,6E;AACA,0E;AACA,0B;AACA,gC;AACA,kE;AACA,qC;AACA,G;;AAEA,2B;AACA,2E;AACA,mC;AACA,6D;AACA,oC;AACA,qE;AACA,qE;AACA,4C;AACA,wD;AACA,K;AACA,G;;AAEA,qB;AACA,4B;AACA,c;AACA,U;AACA,gC;AACA,qB;AACA,2E;AACA,mC;AACA,sD;AACA,2B;AACA,kB;AACA,Q;AACA,oC;AACA,+D;AACA,2B;AACA,kB;AACA,Q;AACA,iB;AACA,G;AACA,E;;AAEA,2C;AACA,kE;AACA,gD;;AAEA,0E;AACA,yB;AACA,sC;AACA,iD;AACA,E;;AAEA,mC;AACA,2B;AACA,iD;;AAEA,4C;AACA,2D;AACA,I;;AAEA,sD;AACA,kC;AACA,uB;AACA,+D;AACA,8D;AACA,sE;AACA,+C;AACA,qD;AACA,sE;AACA,qD;AACA,oE;AACA,6D;;AAEA,4D;AACA,4D;;AAEA,kD;;AAEA,2C;AACA,0C;AACA,oD;AACA,kE;AACA,4D;AACA,wC;AACA,4C;AACA,8C;AACA,6B;AACA,c;;AAEA,iC;AACA,iF;AACA,2C;AACA,6E;AACA,mE;AACA,+B;AACA,gB;AACA,a;AACA,W;AACA,W;;AAEA,uB;AACA,6B;AACA,4E;AACA,2D;AACA,oE;AACA,U;;AAEA,8C;;AAEA,qE;AACA,mD;AACA,8D;AACA,2C;AACA,0B;AACA,sB;AACA,U;AACA,Q;;AAEA,W;AACA,sE;AACA,yD;AACA,oD;AACA,kD;AACA,W;;AAEA,8B;AACA,kD;AACA,mB;AACA,oE;AACA,wB;AACA,O;AACA,O;AACA,I;;AAEA,qD;AACA,2E;AACA,gF;AACA,4E;AACA,gF;AACA,iC;AACA,sB;AACA,iC;AACA,oE;AACA,uE;AACA,iE;AACA,wE;AACA,4D;AACA,oE;AACA,wD;AACA,8D;AACA,sE;AACA,qB;AACA,mE;AACA,iC;AACA,kD;AACA,gC;AACA,S;AACA,O;AACA,M;;AAEA,kC;AACA,kE;AACA,qC;AACA,sD;AACA,uC;AACA,6C;AACA,S;;AAEA,8C;AACA,+B;;AAEA,qD;AACA,uD;AACA,2C;AACA,kE;AACA,Q;AACA,O;AACA,I;;AAEA,yC;;AAEA,c;AACA,sB;;AAEA,iD;AACA,8B;;AAEA,wE;AACA,4C;AACA,qC;AACA,8B;;AAEA,2E;AACA,sB;AACA,oC;AACA,0C;AACA,a;AACA,a;AACA,K;AACA,uB;AACA,6B;AACA,c;AACA,K;;AAEA,6C;AACA,8C;AACA,oE;AACA,oD;AACA,gC;AACA,6E;AACA,+D;AACA,gF;AACA,4C;AACA,mF;AACA,6D;AACA,a;AACA,2E;AACA,a;AACA,4B;AACA,8B;AACA,qC;AACA,qB;AACA,Y;AACA,a;AACA,K;AACA,K;;AAEA,0E;AACA,6B;AACA,2B;;AAEA,0C;AACA,iD;AACA,qC;AACA,uB;AACA,wE;AACA,a;AACA,K;;AAEA,2E;AACA,kD;AACA,wC;AACA,iC;;AAEA,oC;AACA,+E;AACA,+E;AACA,mC;AACA,0C;AACA,6E;AACA,gB;AACA,a;AACA,K;AACA,gE;AACA,gC;AACA,K;;AAEA,qC;AACA,0B;AACA,oB;;AAEA,mB;AACA,iD;AACA,M;AACA,qB;AACA,sC;;AAEA,gD;;AAEA,wE;AACA,6E;AACA,gF;AACA,8D;AACA,0D;AACA,kC;AACA,8D;AACA,gB;AACA,uB;AACA,K;;AAEA,iD;AACA,wD;AACA,yC;AACA,6D;;AAEA,qE;AACA,mC;AACA,Y;AACA,+B;AACA,K;;AAEA,oB;AACA,S;AACA,qD;AACA,iB;AACA,gD;AACA,kC;AACA,gB;AACA,uB;AACA,K;;AAEA,gC;AACA,2B;AACA,c;AACA,qB;AACA,K;;AAEA,gE;AACA,+B;AACA,uB;AACA,c;AACA,K;;;AAGA,0C;AACA,gC;;AAEA,0E;AACA,+E;AACA,mC;AACA,8C;;AAEA,sE;AACA,gF;AACA,S;AACA,qE;;;AAGA,iB;AACA,oB;AACA,2C;AACA,2C;AACA,2B;AACA,mB;AACA,wC;AACA,mC;AACA,M;AACA,+B;AACA,+B;AACA,qC;AACA,U;AACA,Y;AACA,K;AACA,K;;AAEA,2E;AACA,gF;AACA,2B;AACA,0B;AACA,0C;;AAEA,+D;AACA,oD;AACA,mC;AACA,oC;AACA,6E;AACA,6C;AACA,0D;;AAEA,2C;AACA,kC;AACA,+C;;AAEA,qB;AACA,2C;AACA,kC;AACA,Q;;AAEA,oB;AACA,I;AACA,E;;;AAGA,kB;;;AAGA,gC;;AAEA,oD;AACA,8B;AACA,E;;AAEA,4D;AACA,+B;AACA,wC;AACA,E;;AAEA,2D;AACA,8B;AACA,wC;AACA,E;;AAEA,oE;AACA,wE;AACA,qE;AACA,sC;AACA,4B;AACA,mD;AACA,8D;AACA,E;;AAEA,qB;AACA,gD;AACA,wD","file":"/packages/webapp.js","sourcesContent":["////////// Requires //////////\n\nvar fs = Npm.require(\"fs\");\nvar http = Npm.require(\"http\");\nvar os = Npm.require(\"os\");\nvar path = Npm.require(\"path\");\nvar url = Npm.require(\"url\");\nvar crypto = Npm.require(\"crypto\");\n\nvar connect = Npm.require('connect');\nvar useragent = Npm.require('useragent');\nvar send = Npm.require('send');\n\nvar Future = Npm.require('fibers/future');\nvar Fiber = Npm.require('fibers');\n\nvar SHORT_SOCKET_TIMEOUT = 5*1000;\nvar LONG_SOCKET_TIMEOUT = 120*1000;\n\nWebApp = {};\nWebAppInternals = {};\n\nWebAppInternals.NpmModules = {\n connect: {\n version: Npm.require('connect/package.json').version,\n module: connect\n }\n};\n\nWebApp.defaultArch = 'web.browser';\n\n// XXX maps archs to manifests\nWebApp.clientPrograms = {};\n\n// XXX maps archs to program path on filesystem\nvar archPath = {};\n\nvar bundledJsCssPrefix;\n\nvar sha1 = function (contents) {\n var hash = crypto.createHash('sha1');\n hash.update(contents);\n return hash.digest('hex');\n};\n\nvar readUtf8FileSync = function (filename) {\n return Meteor.wrapAsync(fs.readFile)(filename, 'utf8');\n};\n\n// #BrowserIdentification\n//\n// We have multiple places that want to identify the browser: the\n// unsupported browser page, the appcache package, and, eventually\n// delivering browser polyfills only as needed.\n//\n// To avoid detecting the browser in multiple places ad-hoc, we create a\n// Meteor \"browser\" object. It uses but does not expose the npm\n// useragent module (we could choose a different mechanism to identify\n// the browser in the future if we wanted to). The browser object\n// contains\n//\n// * `name`: the name of the browser in camel case\n// * `major`, `minor`, `patch`: integers describing the browser version\n//\n// Also here is an early version of a Meteor `request` object, intended\n// to be a high-level description of the request without exposing\n// details of connect's low-level `req`. Currently it contains:\n//\n// * `browser`: browser identification object described above\n// * `url`: parsed url, including parsed query params\n//\n// As a temporary hack there is a `categorizeRequest` function on WebApp which\n// converts a connect `req` to a Meteor `request`. This can go away once smart\n// packages such as appcache are being passed a `request` object directly when\n// they serve content.\n//\n// This allows `request` to be used uniformly: it is passed to the html\n// attributes hook, and the appcache package can use it when deciding\n// whether to generate a 404 for the manifest.\n//\n// Real routing / server side rendering will probably refactor this\n// heavily.\n\n\n// e.g. \"Mobile Safari\" => \"mobileSafari\"\nvar camelCase = function (name) {\n var parts = name.split(' ');\n parts[0] = parts[0].toLowerCase();\n for (var i = 1; i < parts.length; ++i) {\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].substr(1);\n }\n return parts.join('');\n};\n\nvar identifyBrowser = function (userAgentString) {\n var userAgent = useragent.lookup(userAgentString);\n return {\n name: camelCase(userAgent.family),\n major: +userAgent.major,\n minor: +userAgent.minor,\n patch: +userAgent.patch\n };\n};\n\n// XXX Refactor as part of implementing real routing.\nWebAppInternals.identifyBrowser = identifyBrowser;\n\nWebApp.categorizeRequest = function (req) {\n return {\n browser: identifyBrowser(req.headers['user-agent']),\n url: url.parse(req.url, true)\n };\n};\n\n// HTML attribute hooks: functions to be called to determine any attributes to\n// be added to the '' tag. Each function is passed a 'request' object (see\n// #BrowserIdentification) and should return null or object.\nvar htmlAttributeHooks = [];\nvar getHtmlAttributes = function (request) {\n var combinedAttributes = {};\n _.each(htmlAttributeHooks || [], function (hook) {\n var attributes = hook(request);\n if (attributes === null)\n return;\n if (typeof attributes !== 'object')\n throw Error(\"HTML attribute hook must return null or object\");\n _.extend(combinedAttributes, attributes);\n });\n return combinedAttributes;\n};\nWebApp.addHtmlAttributeHook = function (hook) {\n htmlAttributeHooks.push(hook);\n};\n\n// Serve app HTML for this URL?\nvar appUrl = function (url) {\n if (url === '/favicon.ico' || url === '/robots.txt')\n return false;\n\n // NOTE: app.manifest is not a web standard like favicon.ico and\n // robots.txt. It is a file name we have chosen to use for HTML5\n // appcache URLs. It is included here to prevent using an appcache\n // then removing it from poisoning an app permanently. Eventually,\n // once we have server side routing, this won't be needed as\n // unknown URLs with return a 404 automatically.\n if (url === '/app.manifest')\n return false;\n\n // Avoid serving app HTML for declared routes such as /sockjs/.\n if (RoutePolicy.classify(url))\n return false;\n\n // we currently return app HTML on all URLs by default\n return true;\n};\n\n\n// We need to calculate the client hash after all packages have loaded\n// to give them a chance to populate __meteor_runtime_config__.\n//\n// Calculating the hash during startup means that packages can only\n// populate __meteor_runtime_config__ during load, not during startup.\n//\n// Calculating instead it at the beginning of main after all startup\n// hooks had run would allow packages to also populate\n// __meteor_runtime_config__ during startup, but that's too late for\n// autoupdate because it needs to have the client hash at startup to\n// insert the auto update version itself into\n// __meteor_runtime_config__ to get it to the client.\n//\n// An alternative would be to give autoupdate a \"post-start,\n// pre-listen\" hook to allow it to insert the auto update version at\n// the right moment.\n\nMeteor.startup(function () {\n var calculateClientHash = WebAppHashing.calculateClientHash;\n WebApp.clientHash = function (archName) {\n archName = archName || WebApp.defaultArch;\n return calculateClientHash(WebApp.clientPrograms[archName].manifest);\n };\n\n WebApp.calculateClientHashRefreshable = function (archName) {\n archName = archName || WebApp.defaultArch;\n return calculateClientHash(WebApp.clientPrograms[archName].manifest,\n function (name) {\n return name === \"css\";\n });\n };\n WebApp.calculateClientHashNonRefreshable = function (archName) {\n archName = archName || WebApp.defaultArch;\n return calculateClientHash(WebApp.clientPrograms[archName].manifest,\n function (name) {\n return name !== \"css\";\n });\n };\n WebApp.calculateClientHashCordova = function () {\n var archName = 'web.cordova';\n if (! WebApp.clientPrograms[archName])\n return 'none';\n\n return calculateClientHash(\n WebApp.clientPrograms[archName].manifest, null, _.pick(\n __meteor_runtime_config__, 'PUBLIC_SETTINGS'));\n };\n});\n\n\n\n// When we have a request pending, we want the socket timeout to be long, to\n// give ourselves a while to serve it, and to allow sockjs long polls to\n// complete. On the other hand, we want to close idle sockets relatively\n// quickly, so that we can shut down relatively promptly but cleanly, without\n// cutting off anyone's response.\nWebApp._timeoutAdjustmentRequestCallback = function (req, res) {\n // this is really just req.socket.setTimeout(LONG_SOCKET_TIMEOUT);\n req.setTimeout(LONG_SOCKET_TIMEOUT);\n // Insert our new finish listener to run BEFORE the existing one which removes\n // the response from the socket.\n var finishListeners = res.listeners('finish');\n // XXX Apparently in Node 0.12 this event is now called 'prefinish'.\n // https://github.com/joyent/node/commit/7c9b6070\n res.removeAllListeners('finish');\n res.on('finish', function () {\n res.setTimeout(SHORT_SOCKET_TIMEOUT);\n });\n _.each(finishListeners, function (l) { res.on('finish', l); });\n};\n\n\n// Will be updated by main before we listen.\n// Map from client arch to boilerplate object.\n// Boilerplate object has:\n// - func: XXX\n// - baseData: XXX\nvar boilerplateByArch = {};\n\n// Given a request (as returned from `categorizeRequest`), return the\n// boilerplate HTML to serve for that request. Memoizes on HTML\n// attributes (used by, eg, appcache) and whether inline scripts are\n// currently allowed.\n// XXX so far this function is always called with arch === 'web.browser'\nvar memoizedBoilerplate = {};\nvar getBoilerplate = function (request, arch) {\n\n var htmlAttributes = getHtmlAttributes(request);\n\n // The only thing that changes from request to request (for now) are\n // the HTML attributes (used by, eg, appcache) and whether inline\n // scripts are allowed, so we can memoize based on that.\n var memHash = JSON.stringify({\n inlineScriptsAllowed: inlineScriptsAllowed,\n htmlAttributes: htmlAttributes,\n arch: arch\n });\n\n if (! memoizedBoilerplate[memHash]) {\n memoizedBoilerplate[memHash] = boilerplateByArch[arch].toHTML({\n htmlAttributes: htmlAttributes\n });\n }\n return memoizedBoilerplate[memHash];\n};\n\nWebAppInternals.generateBoilerplateInstance = function (arch,\n manifest,\n additionalOptions) {\n additionalOptions = additionalOptions || {};\n\n var runtimeConfig = _.extend(\n _.clone(__meteor_runtime_config__),\n additionalOptions.runtimeConfigOverrides || {}\n );\n\n var jsCssPrefix;\n if (arch === 'web.cordova') {\n // in cordova we serve assets up directly from disk so it doesn't make\n // sense to use the prefix (ordinarily something like a CDN) and go out\n // to the internet for those files.\n jsCssPrefix = '';\n } else {\n jsCssPrefix = bundledJsCssPrefix ||\n __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '';\n }\n\n return new Boilerplate(arch, manifest,\n _.extend({\n pathMapper: function (itemPath) {\n return path.join(archPath[arch], itemPath); },\n baseDataExtension: {\n additionalStaticJs: _.map(\n additionalStaticJs || [],\n function (contents, pathname) {\n return {\n pathname: pathname,\n contents: contents\n };\n }\n ),\n // Convert to a JSON string, then get rid of most weird characters, then\n // wrap in double quotes. (The outermost JSON.stringify really ought to\n // just be \"wrap in double quotes\" but we use it to be safe.) This might\n // end up inside a \", but normal {{spacebars}} escaping escapes too much! See\n // https://github.com/meteor/meteor/issues/3730\n meteorRuntimeConfig: JSON.stringify(\n encodeURIComponent(JSON.stringify(runtimeConfig))),\n rootUrlPathPrefix: __meteor_runtime_config__.ROOT_URL_PATH_PREFIX || '',\n bundledJsCssPrefix: jsCssPrefix,\n inlineScriptsAllowed: WebAppInternals.inlineScriptsAllowed(),\n inline: additionalOptions.inline\n }\n }, additionalOptions)\n );\n};\n\n// A mapping from url path to \"info\". Where \"info\" has the following fields:\n// - type: the type of file to be served\n// - cacheable: optionally, whether the file should be cached or not\n// - sourceMapUrl: optionally, the url of the source map\n//\n// Info also contains one of the following:\n// - content: the stringified content that should be served at this path\n// - absolutePath: the absolute path on disk to the file\n\nvar staticFiles;\n\n// Serve static files from the manifest or added with\n// `addStaticJs`. Exported for tests.\nWebAppInternals.staticFilesMiddleware = function (staticFiles, req, res, next) {\n if ('GET' != req.method && 'HEAD' != req.method) {\n next();\n return;\n }\n var pathname = connect.utils.parseUrl(req).pathname;\n try {\n pathname = decodeURIComponent(pathname);\n } catch (e) {\n next();\n return;\n }\n\n var serveStaticJs = function (s) {\n res.writeHead(200, {\n 'Content-type': 'application/javascript; charset=UTF-8'\n });\n res.write(s);\n res.end();\n };\n\n if (pathname === \"/meteor_runtime_config.js\" &&\n ! WebAppInternals.inlineScriptsAllowed()) {\n serveStaticJs(\"__meteor_runtime_config__ = \" +\n JSON.stringify(__meteor_runtime_config__) + \";\");\n return;\n } else if (_.has(additionalStaticJs, pathname) &&\n ! WebAppInternals.inlineScriptsAllowed()) {\n serveStaticJs(additionalStaticJs[pathname]);\n return;\n }\n\n if (!_.has(staticFiles, pathname)) {\n next();\n return;\n }\n\n // We don't need to call pause because, unlike 'static', once we call into\n // 'send' and yield to the event loop, we never call another handler with\n // 'next'.\n\n var info = staticFiles[pathname];\n\n // Cacheable files are files that should never change. Typically\n // named by their hash (eg meteor bundled js and css files).\n // We cache them ~forever (1yr).\n //\n // We cache non-cacheable files anyway. This isn't really correct, as users\n // can change the files and changes won't propagate immediately. However, if\n // we don't cache them, browsers will 'flicker' when rerendering\n // images. Eventually we will probably want to rewrite URLs of static assets\n // to include a query parameter to bust caches. That way we can both get\n // good caching behavior and allow users to change assets without delay.\n // https://github.com/meteor/meteor/issues/773\n var maxAge = info.cacheable\n ? 1000 * 60 * 60 * 24 * 365\n : 1000 * 60 * 60 * 24;\n\n // Set the X-SourceMap header, which current Chrome, FireFox, and Safari\n // understand. (The SourceMap header is slightly more spec-correct but FF\n // doesn't understand it.)\n //\n // You may also need to enable source maps in Chrome: open dev tools, click\n // the gear in the bottom right corner, and select \"enable source maps\".\n if (info.sourceMapUrl) {\n res.setHeader('X-SourceMap',\n __meteor_runtime_config__.ROOT_URL_PATH_PREFIX +\n info.sourceMapUrl);\n }\n\n if (info.type === \"js\") {\n res.setHeader(\"Content-Type\", \"application/javascript; charset=UTF-8\");\n } else if (info.type === \"css\") {\n res.setHeader(\"Content-Type\", \"text/css; charset=UTF-8\");\n } else if (info.type === \"json\") {\n res.setHeader(\"Content-Type\", \"application/json; charset=UTF-8\");\n // XXX if it is a manifest we are serving, set additional headers\n if (/\\/manifest.json$/.test(pathname)) {\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\n }\n }\n\n if (info.content) {\n res.write(info.content);\n res.end();\n } else {\n send(req, info.absolutePath)\n .maxage(maxAge)\n .hidden(true) // if we specified a dotfile in the manifest, serve it\n .on('error', function (err) {\n Log.error(\"Error serving static file \" + err);\n res.writeHead(500);\n res.end();\n })\n .on('directory', function () {\n Log.error(\"Unexpected directory \" + info.absolutePath);\n res.writeHead(500);\n res.end();\n })\n .pipe(res);\n }\n};\n\nvar getUrlPrefixForArch = function (arch) {\n // XXX we rely on the fact that arch names don't contain slashes\n // in that case we would need to uri escape it\n\n // We add '__' to the beginning of non-standard archs to \"scope\" the url\n // to Meteor internals.\n return arch === WebApp.defaultArch ?\n '' : '/' + '__' + arch.replace(/^web\\./, '');\n};\n\nvar runWebAppServer = function () {\n var shuttingDown = false;\n var syncQueue = new Meteor._SynchronousQueue();\n\n var getItemPathname = function (itemUrl) {\n return decodeURIComponent(url.parse(itemUrl).pathname);\n };\n\n WebAppInternals.reloadClientPrograms = function () {\n syncQueue.runTask(function() {\n staticFiles = {};\n var generateClientProgram = function (clientPath, arch) {\n // read the control for the client we'll be serving up\n var clientJsonPath = path.join(__meteor_bootstrap__.serverDir,\n clientPath);\n var clientDir = path.dirname(clientJsonPath);\n var clientJson = JSON.parse(readUtf8FileSync(clientJsonPath));\n if (clientJson.format !== \"web-program-pre1\")\n throw new Error(\"Unsupported format for client assets: \" +\n JSON.stringify(clientJson.format));\n\n if (! clientJsonPath || ! clientDir || ! clientJson)\n throw new Error(\"Client config file not parsed.\");\n\n var urlPrefix = getUrlPrefixForArch(arch);\n\n var manifest = clientJson.manifest;\n _.each(manifest, function (item) {\n if (item.url && item.where === \"client\") {\n staticFiles[urlPrefix + getItemPathname(item.url)] = {\n absolutePath: path.join(clientDir, item.path),\n cacheable: item.cacheable,\n // Link from source to its map\n sourceMapUrl: item.sourceMapUrl,\n type: item.type\n };\n\n if (item.sourceMap) {\n // Serve the source map too, under the specified URL. We assume all\n // source maps are cacheable.\n staticFiles[urlPrefix + getItemPathname(item.sourceMapUrl)] = {\n absolutePath: path.join(clientDir, item.sourceMap),\n cacheable: true\n };\n }\n }\n });\n\n var program = {\n manifest: manifest,\n version: WebAppHashing.calculateClientHash(manifest, null, _.pick(\n __meteor_runtime_config__, 'PUBLIC_SETTINGS')),\n PUBLIC_SETTINGS: __meteor_runtime_config__.PUBLIC_SETTINGS\n };\n\n WebApp.clientPrograms[arch] = program;\n\n // Serve the program as a string at /foo//manifest.json\n // XXX change manifest.json -> program.json\n staticFiles[path.join(urlPrefix, 'manifest.json')] = {\n content: JSON.stringify(program),\n cacheable: true,\n type: \"json\"\n };\n };\n\n try {\n var clientPaths = __meteor_bootstrap__.configJson.clientPaths;\n _.each(clientPaths, function (clientPath, arch) {\n archPath[arch] = path.dirname(clientPath);\n generateClientProgram(clientPath, arch);\n });\n\n // Exported for tests.\n WebAppInternals.staticFiles = staticFiles;\n } catch (e) {\n Log.error(\"Error reloading the client program: \" + e.stack);\n process.exit(1);\n }\n });\n };\n\n WebAppInternals.generateBoilerplate = function () {\n // This boilerplate will be served to the mobile devices when used with\n // Meteor/Cordova for the Hot-Code Push and since the file will be served by\n // the device's server, it is important to set the DDP url to the actual\n // Meteor server accepting DDP connections and not the device's file server.\n var defaultOptionsForArch = {\n 'web.cordova': {\n runtimeConfigOverrides: {\n // XXX We use absoluteUrl() here so that we serve https://\n // URLs to cordova clients if force-ssl is in use. If we were\n // to use __meteor_runtime_config__.ROOT_URL instead of\n // absoluteUrl(), then Cordova clients would immediately get a\n // HCP setting their DDP_DEFAULT_CONNECTION_URL to\n // http://example.meteor.com. This breaks the app, because\n // force-ssl doesn't serve CORS headers on 302\n // redirects. (Plus it's undesirable to have clients\n // connecting to http://example.meteor.com when force-ssl is\n // in use.)\n DDP_DEFAULT_CONNECTION_URL: process.env.MOBILE_DDP_URL ||\n Meteor.absoluteUrl(),\n ROOT_URL: process.env.MOBILE_ROOT_URL ||\n Meteor.absoluteUrl()\n }\n }\n };\n\n syncQueue.runTask(function() {\n _.each(WebApp.clientPrograms, function (program, archName) {\n boilerplateByArch[archName] =\n WebAppInternals.generateBoilerplateInstance(\n archName, program.manifest,\n defaultOptionsForArch[archName]);\n });\n\n // Clear the memoized boilerplate cache.\n memoizedBoilerplate = {};\n\n // Configure CSS injection for the default arch\n // XXX implement the CSS injection for all archs?\n WebAppInternals.refreshableAssets = {\n allCss: boilerplateByArch[WebApp.defaultArch].baseData.css\n };\n });\n };\n\n WebAppInternals.reloadClientPrograms();\n\n // webserver\n var app = connect();\n\n // Auto-compress any json, javascript, or text.\n app.use(connect.compress());\n\n // Packages and apps can add handlers that run before any other Meteor\n // handlers via WebApp.rawConnectHandlers.\n var rawConnectHandlers = connect();\n app.use(rawConnectHandlers);\n\n // We're not a proxy; reject (without crashing) attempts to treat us like\n // one. (See #1212.)\n app.use(function(req, res, next) {\n if (RoutePolicy.isValidUrl(req.url)) {\n next();\n return;\n }\n res.writeHead(400);\n res.write(\"Not a proxy\");\n res.end();\n });\n\n // Strip off the path prefix, if it exists.\n app.use(function (request, response, next) {\n var pathPrefix = __meteor_runtime_config__.ROOT_URL_PATH_PREFIX;\n var url = Npm.require('url').parse(request.url);\n var pathname = url.pathname;\n // check if the path in the url starts with the path prefix (and the part\n // after the path prefix must start with a / if it exists.)\n if (pathPrefix && pathname.substring(0, pathPrefix.length) === pathPrefix &&\n (pathname.length == pathPrefix.length\n || pathname.substring(pathPrefix.length, pathPrefix.length + 1) === \"/\")) {\n request.url = request.url.substring(pathPrefix.length);\n next();\n } else if (pathname === \"/favicon.ico\" || pathname === \"/robots.txt\") {\n next();\n } else if (pathPrefix) {\n response.writeHead(404);\n response.write(\"Unknown path\");\n response.end();\n } else {\n next();\n }\n });\n\n // Parse the query string into res.query. Used by oauth_server, but it's\n // generally pretty handy..\n app.use(connect.query());\n\n // Serve static files from the manifest.\n // This is inspired by the 'static' middleware.\n app.use(function (req, res, next) {\n Fiber(function () {\n WebAppInternals.staticFilesMiddleware(staticFiles, req, res, next);\n }).run();\n });\n\n // Packages and apps can add handlers to this via WebApp.connectHandlers.\n // They are inserted before our default handler.\n var packageAndAppHandlers = connect();\n app.use(packageAndAppHandlers);\n\n var suppressConnectErrors = false;\n // connect knows it is an error handler because it has 4 arguments instead of\n // 3. go figure. (It is not smart enough to find such a thing if it's hidden\n // inside packageAndAppHandlers.)\n app.use(function (err, req, res, next) {\n if (!err || !suppressConnectErrors || !req.headers['x-suppress-error']) {\n next(err);\n return;\n }\n res.writeHead(err.status, { 'Content-Type': 'text/plain' });\n res.end(\"An error message\");\n });\n\n app.use(function (req, res, next) {\n if (! appUrl(req.url))\n return next();\n\n var headers = {\n 'Content-Type': 'text/html; charset=utf-8'\n };\n if (shuttingDown)\n headers['Connection'] = 'Close';\n\n var request = WebApp.categorizeRequest(req);\n\n if (request.url.query && request.url.query['meteor_css_resource']) {\n // In this case, we're requesting a CSS resource in the meteor-specific\n // way, but we don't have it. Serve a static css file that indicates that\n // we didn't have it, so we can detect that and refresh.\n headers['Content-Type'] = 'text/css; charset=utf-8';\n res.writeHead(200, headers);\n res.write(\".meteor-css-not-found-error { width: 0px;}\");\n res.end();\n return undefined;\n }\n\n // /packages/asdfsad ... /__cordova/dafsdf.js\n var pathname = connect.utils.parseUrl(req).pathname;\n var archKey = pathname.split('/')[1];\n var archKeyCleaned = 'web.' + archKey.replace(/^__/, '');\n\n if (! /^__/.test(archKey) || ! _.has(archPath, archKeyCleaned)) {\n archKey = WebApp.defaultArch;\n } else {\n archKey = archKeyCleaned;\n }\n\n var boilerplate;\n try {\n boilerplate = getBoilerplate(request, archKey);\n } catch (e) {\n Log.error(\"Error running template: \" + e);\n res.writeHead(500, headers);\n res.end();\n return undefined;\n }\n\n res.writeHead(200, headers);\n res.write(boilerplate);\n res.end();\n return undefined;\n });\n\n // Return 404 by default, if no other handlers serve this URL.\n app.use(function (req, res) {\n res.writeHead(404);\n res.end();\n });\n\n\n var httpServer = http.createServer(app);\n var onListeningCallbacks = [];\n\n // After 5 seconds w/o data on a socket, kill it. On the other hand, if\n // there's an outstanding request, give it a higher timeout instead (to avoid\n // killing long-polling requests)\n httpServer.setTimeout(SHORT_SOCKET_TIMEOUT);\n\n // Do this here, and then also in livedata/stream_server.js, because\n // stream_server.js kills all the current request handlers when installing its\n // own.\n httpServer.on('request', WebApp._timeoutAdjustmentRequestCallback);\n\n\n // start up app\n _.extend(WebApp, {\n connectHandlers: packageAndAppHandlers,\n rawConnectHandlers: rawConnectHandlers,\n httpServer: httpServer,\n // For testing.\n suppressConnectErrors: function () {\n suppressConnectErrors = true;\n },\n onListening: function (f) {\n if (onListeningCallbacks)\n onListeningCallbacks.push(f);\n else\n f();\n }\n });\n\n // Let the rest of the packages (and Meteor.startup hooks) insert connect\n // middlewares and update __meteor_runtime_config__, then keep going to set up\n // actually serving HTML.\n main = function (argv) {\n WebAppInternals.generateBoilerplate();\n\n // only start listening after all the startup code has run.\n var localPort = parseInt(process.env.PORT) || 0;\n var host = process.env.BIND_IP;\n var localIp = host || '0.0.0.0';\n httpServer.listen(localPort, localIp, Meteor.bindEnvironment(function() {\n if (process.env.METEOR_PRINT_ON_LISTEN)\n console.log(\"LISTENING\"); // must match run-app.js\n\n var callbacks = onListeningCallbacks;\n onListeningCallbacks = null;\n _.each(callbacks, function (x) { x(); });\n\n }, function (e) {\n console.error(\"Error listening:\", e);\n console.error(e && e.stack);\n }));\n\n return 'DAEMON';\n };\n};\n\n\nrunWebAppServer();\n\n\nvar inlineScriptsAllowed = true;\n\nWebAppInternals.inlineScriptsAllowed = function () {\n return inlineScriptsAllowed;\n};\n\nWebAppInternals.setInlineScriptsAllowed = function (value) {\n inlineScriptsAllowed = value;\n WebAppInternals.generateBoilerplate();\n};\n\nWebAppInternals.setBundledJsCssPrefix = function (prefix) {\n bundledJsCssPrefix = prefix;\n WebAppInternals.generateBoilerplate();\n};\n\n// Packages can call `WebAppInternals.addStaticJs` to specify static\n// JavaScript to be included in the app. This static JS will be inlined,\n// unless inline scripts have been disabled, in which case it will be\n// served under `/`.\nvar additionalStaticJs = {};\nWebAppInternals.addStaticJs = function (contents) {\n additionalStaticJs[\"/\" + sha1(contents) + \".js\"] = contents;\n};\n\n// Exported for tests\nWebAppInternals.getBoilerplate = getBoilerplate;\nWebAppInternals.additionalStaticJs = additionalStaticJs;\n"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/program.json b/web-app/.meteor/local/build/programs/server/program.json
deleted file mode 100644
index 38b9368..0000000
--- a/web-app/.meteor/local/build/programs/server/program.json
+++ /dev/null
@@ -1,256 +0,0 @@
-{
- "format": "javascript-image-pre1",
- "arch": "os.osx.x86_64",
- "load": [
- {
- "sourceMap": "packages/underscore.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/underscore.js"
- },
- {
- "node_modules": "npm/meteor/node_modules",
- "sourceMap": "packages/meteor.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/meteor.js"
- },
- {
- "sourceMap": "packages/reload.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/reload.js"
- },
- {
- "sourceMap": "packages/json.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/json.js"
- },
- {
- "sourceMap": "packages/base64.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/base64.js"
- },
- {
- "sourceMap": "packages/ejson.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/ejson.js"
- },
- {
- "node_modules": "npm/logging/node_modules",
- "sourceMap": "packages/logging.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/logging.js"
- },
- {
- "sourceMap": "packages/routepolicy.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/routepolicy.js"
- },
- {
- "sourceMap": "packages/tracker.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/tracker.js"
- },
- {
- "sourceMap": "packages/deps.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/deps.js"
- },
- {
- "sourceMap": "packages/htmljs.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/htmljs.js"
- },
- {
- "sourceMap": "packages/html-tools.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/html-tools.js"
- },
- {
- "sourceMap": "packages/blaze-tools.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/blaze-tools.js"
- },
- {
- "sourceMap": "packages/spacebars-compiler.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/spacebars-compiler.js"
- },
- {
- "sourceMap": "packages/jquery.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/jquery.js"
- },
- {
- "sourceMap": "packages/id-map.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/id-map.js"
- },
- {
- "sourceMap": "packages/ordered-dict.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/ordered-dict.js"
- },
- {
- "sourceMap": "packages/random.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/random.js"
- },
- {
- "sourceMap": "packages/geojson-utils.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/geojson-utils.js"
- },
- {
- "sourceMap": "packages/minimongo.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/minimongo.js"
- },
- {
- "sourceMap": "packages/observe-sequence.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/observe-sequence.js"
- },
- {
- "sourceMap": "packages/reactive-var.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/reactive-var.js"
- },
- {
- "sourceMap": "packages/blaze.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/blaze.js"
- },
- {
- "sourceMap": "packages/templating.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/templating.js"
- },
- {
- "sourceMap": "packages/spacebars.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/spacebars.js"
- },
- {
- "sourceMap": "packages/ui.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/ui.js"
- },
- {
- "sourceMap": "packages/boilerplate-generator.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/boilerplate-generator.js",
- "assets": {
- "boilerplate_web.browser.html": "assets/packages/boilerplate-generator/boilerplate_web.browser.html",
- "boilerplate_web.cordova.html": "assets/packages/boilerplate-generator/boilerplate_web.cordova.html"
- }
- },
- {
- "sourceMap": "packages/webapp-hashing.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/webapp-hashing.js"
- },
- {
- "node_modules": "npm/webapp/node_modules",
- "sourceMap": "packages/webapp.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/webapp.js"
- },
- {
- "sourceMap": "packages/check.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/check.js"
- },
- {
- "sourceMap": "packages/retry.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/retry.js"
- },
- {
- "sourceMap": "packages/autopublish.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/autopublish.js"
- },
- {
- "sourceMap": "packages/callback-hook.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/callback-hook.js"
- },
- {
- "node_modules": "npm/ddp/node_modules",
- "sourceMap": "packages/ddp.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/ddp.js"
- },
- {
- "sourceMap": "packages/binary-heap.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/binary-heap.js"
- },
- {
- "sourceMap": "packages/insecure.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/insecure.js"
- },
- {
- "node_modules": "npm/mongo/node_modules",
- "sourceMap": "packages/mongo.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/mongo.js"
- },
- {
- "sourceMap": "packages/autoupdate.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/autoupdate.js"
- },
- {
- "sourceMap": "packages/meteor-platform.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/meteor-platform.js"
- },
- {
- "sourceMap": "packages/mquandalle_jade.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/mquandalle_jade.js"
- },
- {
- "sourceMap": "packages/momentjs_moment.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/momentjs_moment.js"
- },
- {
- "node_modules": "npm/stevezhu_lodash/node_modules",
- "sourceMap": "packages/stevezhu_lodash.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/stevezhu_lodash.js"
- },
- {
- "node_modules": "npm/numeral_numeral/node_modules",
- "sourceMap": "packages/numeral_numeral.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/numeral_numeral.js"
- },
- {
- "node_modules": "npm/mrt_topojson/node_modules",
- "sourceMap": "packages/mrt_topojson.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/mrt_topojson.js"
- },
- {
- "sourceMap": "packages/d3js_d3.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/d3js_d3.js"
- },
- {
- "sourceMap": "packages/session.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/session.js"
- },
- {
- "sourceMap": "packages/livedata.js.map",
- "sourceMapRoot": "packages",
- "path": "packages/livedata.js"
- },
- {
- "path": "packages/global-imports.js"
- }
- ]
-}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/server/shell-server.js b/web-app/.meteor/local/build/programs/server/shell-server.js
deleted file mode 100644
index dda2fe5..0000000
--- a/web-app/.meteor/local/build/programs/server/shell-server.js
+++ /dev/null
@@ -1,290 +0,0 @@
-var assert = require("assert");
-var path = require("path");
-var stream = require("stream");
-var fs = require("fs");
-var net = require("net");
-var tty = require("tty");
-var vm = require("vm");
-var Fiber = require("fibers");
-var _ = require("underscore");
-var INFO_FILE_MODE = 0600; // Only the owner can read or write.
-var EXITING_MESSAGE =
- // Exported so that ./client.js can know what to expect.
- exports.EXITING_MESSAGE = "Shell exiting...";
-
-// Invoked by the server process to listen for incoming connections from
-// shell clients. Each connection gets its own REPL instance.
-exports.listen = function listen(shellDir) {
- new Server(shellDir).listen();
-};
-
-// Disabling the shell causes all attached clients to disconnect and exit.
-exports.disable = function disable(shellDir) {
- try {
- // Replace info.json with a file that says the shell server is
- // disabled, so that any connected shell clients will fail to
- // reconnect after the server process closes their sockets.
- fs.writeFileSync(
- getInfoFile(shellDir),
- JSON.stringify({
- status: "disabled",
- reason: "Shell server has shut down."
- }) + "\n",
- { mode: INFO_FILE_MODE }
- );
- } catch (ignored) {}
-};
-
-function Server(shellDir) {
- var self = this;
- assert.ok(self instanceof Server);
-
- self.shellDir = shellDir;
- self.key = Math.random().toString(36).slice(2);
-
- self.server = net.createServer(function(socket) {
- self.onConnection(socket);
- }).on("error", function(err) {
- console.error(err.stack);
- });
-}
-
-var Sp = Server.prototype;
-
-Sp.listen = function listen() {
- var self = this;
- var infoFile = getInfoFile(self.shellDir);
-
- fs.unlink(infoFile, function() {
- self.server.listen(0, "127.0.0.1", function() {
- fs.writeFileSync(infoFile, JSON.stringify({
- status: "enabled",
- port: self.server.address().port,
- key: self.key
- }) + "\n", {
- mode: INFO_FILE_MODE
- });
- });
- });
-};
-
-Sp.onConnection = function onConnection(socket) {
- var self = this;
- var dataSoFar = "";
-
- // Make sure this function doesn't try to write anything to the socket
- // after it has been closed.
- socket.on("close", function() {
- socket = null;
- });
-
- // If communication is not established within 1000ms of the first
- // connection, forcibly close the socket.
- var timeout = setTimeout(function() {
- if (socket) {
- socket.removeAllListeners("data");
- socket.end(EXITING_MESSAGE + "\n");
- }
- }, 1000);
-
- // Let connecting clients configure certain REPL options by sending a
- // JSON object over the socket. For example, only the client knows
- // whether it's running a TTY or an Emacs subshell or some other kind of
- // terminal, so the client must decide the value of options.terminal.
- socket.on("data", function onData(buffer) {
- // Just in case the options JSON comes in fragments.
- dataSoFar += buffer.toString("utf8");
-
- try {
- var options = JSON.parse(dataSoFar);
- } finally {
- if (! _.isObject(options)) {
- return; // Silence any parsing exceptions.
- }
- }
-
- if (socket) {
- socket.removeListener("data", onData);
- }
-
- if (options.key !== self.key) {
- if (socket) {
- socket.end(EXITING_MESSAGE + "\n");
- }
- return;
- }
- delete options.key;
-
- clearTimeout(timeout);
-
- // Immutable options.
- _.extend(options, {
- input: socket,
- output: socket,
- eval: evalCommand
- });
-
- // Overridable options.
- _.defaults(options, {
- prompt: "> ",
- terminal: true,
- useColors: true,
- useGlobal: true,
- ignoreUndefined: true,
- });
-
- self.startREPL(options);
- });
-};
-
-Sp.startREPL = function startREPL(options) {
- var self = this;
-
- if (! options.output.columns) {
- // The REPL's tab completion logic assumes process.stdout is a TTY,
- // and while that isn't technically true here, we can get tab
- // completion to behave correctly if we fake the .columns property.
- options.output.columns = getTerminalWidth();
- }
-
- // Make sure this function doesn't try to write anything to the output
- // stream after it has been closed.
- options.output.on("close", function() {
- options.output = null;
- });
-
- var repl = self.repl = require("repl").start(options);
-
- // History persists across shell sessions!
- self.initializeHistory();
-
- Object.defineProperty(repl.context, "_", {
- // Force the global _ variable to remain bound to underscore.
- get: function () { return _; },
-
- // Expose the last REPL result as __ instead of _.
- set: function(lastResult) {
- repl.context.__ = lastResult;
- },
-
- enumerable: true,
-
- // Allow this property to be (re)defined more than once (e.g. each
- // time the server restarts).
- configurable: true
- });
-
- // Use the same `require` function and `module` object visible to the
- // shell.js module.
- repl.context.require = require;
- repl.context.module = module;
- repl.context.repl = repl;
-
- // Some improvements to the existing help messages.
- repl.commands[".break"].help =
- "Terminate current command input and display new prompt";
- repl.commands[".exit"].help = "Disconnect from server and leave shell";
- repl.commands[".help"].help = "Show this help information";
-
- // When the REPL exits, signal the attached client to exit by sending it
- // the special EXITING_MESSAGE.
- repl.on("exit", function() {
- if (options.output) {
- options.output.write(EXITING_MESSAGE + "\n");
- options.output.end();
- }
- });
-
- // When the server process exits, end the output stream but do not
- // signal the attached client to exit.
- process.on("exit", function() {
- if (options.output) {
- options.output.end();
- }
- });
-
- // This Meteor-specific shell command rebuilds the application as if a
- // change was made to server code.
- repl.defineCommand("reload", {
- help: "Restart the server and the shell",
- action: function() {
- process.exit(0);
- }
- });
-};
-
-function getInfoFile(shellDir) {
- return path.join(shellDir, "info.json");
-}
-exports.getInfoFile = getInfoFile;
-
-function getHistoryFile(shellDir) {
- return path.join(shellDir, "history");
-}
-
-function getTerminalWidth() {
- try {
- // Inspired by https://github.com/TooTallNate/ttys/blob/master/index.js
- var fd = fs.openSync("/dev/tty", "r");
- assert.ok(tty.isatty(fd));
- var ws = new tty.WriteStream(fd);
- ws.end();
- return ws.columns;
- } catch (fancyApproachWasTooFancy) {
- return 80;
- }
-}
-
-// Shell commands need to be executed in fibers in case they call into
-// code that yields.
-function evalCommand(command, context, filename, callback) {
- Fiber(function() {
- try {
- var result = vm.runInThisContext(command, filename);
- } catch (error) {
- if (process.domain) {
- process.domain.emit("error", error);
- process.domain.exit();
- } else {
- callback(error);
- }
- return;
- }
- callback(null, result);
- }).run();
-}
-
-// This function allows a persistent history of shell commands to be saved
-// to and loaded from .meteor/local/shell-history.
-Sp.initializeHistory = function initializeHistory() {
- var self = this;
- var rli = self.repl.rli;
- var historyFile = getHistoryFile(self.shellDir);
- var historyFd = fs.openSync(historyFile, "a+");
- var historyLines = fs.readFileSync(historyFile, "utf8").split("\n");
- var seenLines = Object.create(null);
-
- if (! rli.history) {
- rli.history = [];
- rli.historyIndex = -1;
- }
-
- while (rli.history && historyLines.length > 0) {
- var line = historyLines.pop();
- if (line && /\S/.test(line) && ! seenLines[line]) {
- rli.history.push(line);
- seenLines[line] = true;
- }
- }
-
- rli.addListener("line", function(line) {
- if (historyFd >= 0 && /\S/.test(line)) {
- fs.writeSync(historyFd, line + "\n");
- }
- });
-
- self.repl.on("exit", function() {
- fs.closeSync(historyFd);
- historyFd = -1;
- });
-};
diff --git a/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css b/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css
deleted file mode 100644
index b04af51..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css
+++ /dev/null
@@ -1,7780 +0,0 @@
-/*
- Animation example, for spinners
-*/
-
-/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*!
- * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cf8e15f9354657212a08)
- * Config saved to config.json and https://gist.github.com/cf8e15f9354657212a08
- */
-
-/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
-
-.animate-spin {
- -moz-animation: spin 2s infinite linear;
- -o-animation: spin 2s infinite linear;
- -webkit-animation: spin 2s infinite linear;
- animation: spin 2s infinite linear;
- display: inline-block;
-}
-
-@-moz-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@-webkit-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@-o-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@-ms-keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-@keyframes spin {
- 0% {
- -moz-transform: rotate(0deg);
- -o-transform: rotate(0deg);
- -webkit-transform: rotate(0deg);
- transform: rotate(0deg);
- }
-
- 100% {
- -moz-transform: rotate(359deg);
- -o-transform: rotate(359deg);
- -webkit-transform: rotate(359deg);
- transform: rotate(359deg);
- }
-}
-
-html {
- font-family: sans-serif;
- -ms-text-size-adjust: 100%;
- -webkit-text-size-adjust: 100%;
-}
-
-body {
- margin: 0;
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
- display: block;
-}
-
-audio,
-canvas,
-progress,
-video {
- display: inline-block;
- vertical-align: baseline;
-}
-
-audio:not([controls]) {
- display: none;
- height: 0;
-}
-
-[hidden],
-template {
- display: none;
-}
-
-a {
- background-color: transparent;
-}
-
-a:active,
-a:hover {
- outline: 0;
-}
-
-abbr[title] {
- border-bottom: 1px dotted;
-}
-
-b,
-strong {
- font-weight: bold;
-}
-
-dfn {
- font-style: italic;
-}
-
-h1 {
- font-size: 2em;
- margin: 0.67em 0;
-}
-
-mark {
- background: #ff0;
- color: #000;
-}
-
-small {
- font-size: 80%;
-}
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sup {
- top: -0.5em;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-img {
- border: 0;
-}
-
-svg:not(:root) {
- overflow: hidden;
-}
-
-figure {
- margin: 1em 40px;
-}
-
-hr {
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
-}
-
-pre {
- overflow: auto;
-}
-
-code,
-kbd,
-pre,
-samp {
- font-family: monospace, monospace;
- font-size: 1em;
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
- color: inherit;
- font: inherit;
- margin: 0;
-}
-
-button {
- overflow: visible;
-}
-
-button,
-select {
- text-transform: none;
-}
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] {
- -webkit-appearance: button;
- cursor: pointer;
-}
-
-button[disabled],
-html input[disabled] {
- cursor: default;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
- border: 0;
- padding: 0;
-}
-
-input {
- line-height: normal;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0;
-}
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
- height: auto;
-}
-
-input[type="search"] {
- -webkit-appearance: textfield;
- -moz-box-sizing: content-box;
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
-}
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-fieldset {
- border: 1px solid #c0c0c0;
- margin: 0 2px;
- padding: 0.35em 0.625em 0.75em;
-}
-
-legend {
- border: 0;
- padding: 0;
-}
-
-textarea {
- overflow: auto;
-}
-
-optgroup {
- font-weight: bold;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-td,
-th {
- padding: 0;
-}
-
-/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
-
-@media print {
- *,
- *:before,
- *:after {
- background: transparent !important;
- color: #000 !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important;
- text-shadow: none !important;
- }
-
- a,
- a:visited {
- text-decoration: underline;
- }
-
- a[href]:after {
- content: " (" attr(href) ")";
- }
-
- abbr[title]:after {
- content: " (" attr(title) ")";
- }
-
- a[href^="#"]:after,
- a[href^="javascript:"]: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;
- }
-
- p,
- h2,
- h3 {
- orphans: 3;
- widows: 3;
- }
-
- h2,
- h3 {
- page-break-after: avoid;
- }
-
- select {
- background: #fff !important;
- }
-
- .navbar {
- display: none;
- }
-
- .btn>.caret,
- .dropup>.btn>.caret {
- border-top-color: #000 !important;
- }
-
- .label {
- border: 1px solid #000;
- }
-
- .table {
- border-collapse: collapse !important;
- }
-
- .table td,
- .table th {
- background-color: #fff !important;
- }
-
- .table-bordered th,
- .table-bordered td {
- border: 1px solid #ddd !important;
- }
-}
-
-* {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-*:before,
-*:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-html {
- font-size: 10px;
- -webkit-tap-highlight-color: rgba(0,0,0,0);
-}
-
-body {
- font-family: "Source Sans Pro",sans-serif;
- font-size: 16px;
- line-height: 1.42857143;
- color: #fff;
- background-color: #000;
-}
-
-input,
-button,
-select,
-textarea {
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
-}
-
-a {
- color: #337ab7;
- text-decoration: none;
-}
-
-a:hover,
-a:focus {
- color: #23527c;
- text-decoration: underline;
-}
-
-a:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-figure {
- margin: 0;
-}
-
-img {
- vertical-align: middle;
-}
-
-.img-responsive,
-.carousel-inner>.item>img,
-.carousel-inner>.item>a>img {
- display: block;
- max-width: 100%;
- height: auto;
-}
-
-.img-rounded {
- border-radius: 6px;
-}
-
-.img-thumbnail {
- padding: 4px;
- line-height: 1.42857143;
- background-color: #000;
- border: 1px solid #ddd;
- border-radius: 4px;
- -webkit-transition: all .2s ease-in-out;
- -o-transition: all .2s ease-in-out;
- transition: all .2s ease-in-out;
- display: inline-block;
- max-width: 100%;
- height: auto;
-}
-
-.img-circle {
- border-radius: 50%;
-}
-
-hr {
- margin-top: 22px;
- margin-bottom: 22px;
- border: 0;
- border-top: 1px solid #fff;
-}
-
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- margin: -1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- border: 0;
-}
-
-.sr-only-focusable:active,
-.sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- margin: 0;
- overflow: visible;
- clip: auto;
-}
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
- font-family: inherit;
- font-weight: 200;
- line-height: 1.1;
- color: inherit;
-}
-
-h1 small,
-h2 small,
-h3 small,
-h4 small,
-h5 small,
-h6 small,
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-.h5 small,
-.h6 small,
-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: #fff;
-}
-
-h1,
-.h1,
-h2,
-.h2,
-h3,
-.h3 {
- margin-top: 22px;
- margin-bottom: 11px;
-}
-
-h1 small,
-.h1 small,
-h2 small,
-.h2 small,
-h3 small,
-.h3 small,
-h1 .small,
-.h1 .small,
-h2 .small,
-.h2 .small,
-h3 .small,
-.h3 .small {
- font-size: 65%;
-}
-
-h4,
-.h4,
-h5,
-.h5,
-h6,
-.h6 {
- margin-top: 11px;
- margin-bottom: 11px;
-}
-
-h4 small,
-.h4 small,
-h5 small,
-.h5 small,
-h6 small,
-.h6 small,
-h4 .small,
-.h4 .small,
-h5 .small,
-.h5 .small,
-h6 .small,
-.h6 .small {
- font-size: 75%;
-}
-
-h1,
-.h1 {
- font-size: 41px;
-}
-
-h2,
-.h2 {
- font-size: 34px;
-}
-
-h3,
-.h3 {
- font-size: 28px;
-}
-
-h4,
-.h4 {
- font-size: 20px;
-}
-
-h5,
-.h5 {
- font-size: 16px;
-}
-
-h6,
-.h6 {
- font-size: 14px;
-}
-
-p {
- margin: 0 0 11px;
-}
-
-.lead {
- margin-bottom: 22px;
- font-size: 18px;
- font-weight: 300;
- line-height: 1.4;
-}
-
-@media (min-width:768px) {
- .lead {
- font-size: 24px;
- }
-}
-
-small,
-.small {
- font-size: 87%;
-}
-
-mark,
-.mark {
- background-color: #fcf8e3;
- padding: .2em;
-}
-
-.text-left {
- text-align: left;
-}
-
-.text-right {
- text-align: right;
-}
-
-.text-center {
- text-align: center;
-}
-
-.text-justify {
- text-align: justify;
-}
-
-.text-nowrap {
- white-space: nowrap;
-}
-
-.text-lowercase {
- text-transform: lowercase;
-}
-
-.text-uppercase {
- text-transform: uppercase;
-}
-
-.text-capitalize {
- text-transform: capitalize;
-}
-
-.text-muted {
- color: #fff;
-}
-
-.text-primary {
- color: #337ab7;
-}
-
-a.text-primary:hover {
- color: #286090;
-}
-
-.text-success {
- color: #7bcc3a;
-}
-
-a.text-success:hover {
- color: #63a82b;
-}
-
-.text-info {
- color: #10a0de;
-}
-
-a.text-info:hover {
- color: #0d7eae;
-}
-
-.text-warning {
- color: #ffd162;
-}
-
-a.text-warning:hover {
- color: #ffc22f;
-}
-
-.text-danger {
- color: #f74b4b;
-}
-
-a.text-danger:hover {
- color: #f51a1a;
-}
-
-.bg-primary {
- color: #fff;
- background-color: #337ab7;
-}
-
-a.bg-primary:hover {
- background-color: #286090;
-}
-
-.bg-success {
- background-color: #dff0d8;
-}
-
-a.bg-success:hover {
- background-color: #c1e2b3;
-}
-
-.bg-info {
- background-color: #d9edf7;
-}
-
-a.bg-info:hover {
- background-color: #afd9ee;
-}
-
-.bg-warning {
- background-color: #fcf8e3;
-}
-
-a.bg-warning:hover {
- background-color: #f7ecb5;
-}
-
-.bg-danger {
- background-color: #f2dede;
-}
-
-a.bg-danger:hover {
- background-color: #e4b9b9;
-}
-
-.page-header {
- padding-bottom: 10px;
- margin: 44px 0 22px;
- border-bottom: 1px solid #fff;
-}
-
-ul,
-ol {
- margin-top: 0;
- margin-bottom: 11px;
-}
-
-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;
- margin-left: -5px;
-}
-
-.list-inline>li {
- display: inline-block;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-dl {
- margin-top: 0;
- margin-bottom: 22px;
-}
-
-dt,
-dd {
- line-height: 1.42857143;
-}
-
-dt {
- font-weight: bold;
-}
-
-dd {
- margin-left: 0;
-}
-
-@media (min-width:768px) {
- .dl-horizontal dt {
- float: left;
- width: 160px;
- clear: left;
- text-align: right;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
-
- .dl-horizontal dd {
- margin-left: 180px;
- }
-}
-
-abbr[title],
-abbr[data-original-title] {
- cursor: help;
- border-bottom: 1px dotted #fff;
-}
-
-.initialism {
- font-size: 90%;
- text-transform: uppercase;
-}
-
-blockquote {
- padding: 11px 22px;
- margin: 0 0 22px;
- font-size: 20px;
- border-left: 5px solid #fff;
-}
-
-blockquote p:last-child,
-blockquote ul:last-child,
-blockquote ol:last-child {
- margin-bottom: 0;
-}
-
-blockquote footer,
-blockquote small,
-blockquote .small {
- display: block;
- font-size: 80%;
- line-height: 1.42857143;
- color: #fff;
-}
-
-blockquote footer:before,
-blockquote small:before,
-blockquote .small:before {
- content: '\2014 \00A0';
-}
-
-.blockquote-reverse,
-blockquote.pull-right {
- padding-right: 15px;
- padding-left: 0;
- border-right: 5px solid #fff;
- border-left: 0;
- text-align: right;
-}
-
-.blockquote-reverse footer:before,
-blockquote.pull-right footer:before,
-.blockquote-reverse small:before,
-blockquote.pull-right small:before,
-.blockquote-reverse .small:before,
-blockquote.pull-right .small:before {
- content: '';
-}
-
-.blockquote-reverse footer:after,
-blockquote.pull-right footer:after,
-.blockquote-reverse small:after,
-blockquote.pull-right small:after,
-.blockquote-reverse .small:after,
-blockquote.pull-right .small:after {
- content: '\00A0 \2014';
-}
-
-address {
- margin-bottom: 22px;
- font-style: normal;
- line-height: 1.42857143;
-}
-
-.container {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-@media (min-width:768px) {
- .container {
- width: 750px;
- }
-}
-
-@media (min-width:992px) {
- .container {
- width: 970px;
- }
-}
-
-@media (min-width:1200px) {
- .container {
- width: 1170px;
- }
-}
-
-.container-fluid {
- margin-right: auto;
- margin-left: auto;
- padding-left: 15px;
- padding-right: 15px;
-}
-
-.row {
- margin-left: -15px;
- margin-right: -15px;
-}
-
-.col-xs-1,
-.col-sm-1,
-.col-md-1,
-.col-lg-1,
-.col-xs-2,
-.col-sm-2,
-.col-md-2,
-.col-lg-2,
-.col-xs-3,
-.col-sm-3,
-.col-md-3,
-.col-lg-3,
-.col-xs-4,
-.col-sm-4,
-.col-md-4,
-.col-lg-4,
-.col-xs-5,
-.col-sm-5,
-.col-md-5,
-.col-lg-5,
-.col-xs-6,
-.col-sm-6,
-.col-md-6,
-.col-lg-6,
-.col-xs-7,
-.col-sm-7,
-.col-md-7,
-.col-lg-7,
-.col-xs-8,
-.col-sm-8,
-.col-md-8,
-.col-lg-8,
-.col-xs-9,
-.col-sm-9,
-.col-md-9,
-.col-lg-9,
-.col-xs-10,
-.col-sm-10,
-.col-md-10,
-.col-lg-10,
-.col-xs-11,
-.col-sm-11,
-.col-md-11,
-.col-lg-11,
-.col-xs-12,
-.col-sm-12,
-.col-md-12,
-.col-lg-12 {
- position: relative;
- min-height: 1px;
- padding-left: 15px;
- padding-right: 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,
-.col-xs-12 {
- float: left;
-}
-
-.col-xs-12 {
- width: 100%;
-}
-
-.col-xs-11 {
- width: 91.66666667%;
-}
-
-.col-xs-10 {
- width: 83.33333333%;
-}
-
-.col-xs-9 {
- width: 75%;
-}
-
-.col-xs-8 {
- width: 66.66666667%;
-}
-
-.col-xs-7 {
- width: 58.33333333%;
-}
-
-.col-xs-6 {
- width: 50%;
-}
-
-.col-xs-5 {
- width: 41.66666667%;
-}
-
-.col-xs-4 {
- width: 33.33333333%;
-}
-
-.col-xs-3 {
- width: 25%;
-}
-
-.col-xs-2 {
- width: 16.66666667%;
-}
-
-.col-xs-1 {
- width: 8.33333333%;
-}
-
-.col-xs-pull-12 {
- right: 100%;
-}
-
-.col-xs-pull-11 {
- right: 91.66666667%;
-}
-
-.col-xs-pull-10 {
- right: 83.33333333%;
-}
-
-.col-xs-pull-9 {
- right: 75%;
-}
-
-.col-xs-pull-8 {
- right: 66.66666667%;
-}
-
-.col-xs-pull-7 {
- right: 58.33333333%;
-}
-
-.col-xs-pull-6 {
- right: 50%;
-}
-
-.col-xs-pull-5 {
- right: 41.66666667%;
-}
-
-.col-xs-pull-4 {
- right: 33.33333333%;
-}
-
-.col-xs-pull-3 {
- right: 25%;
-}
-
-.col-xs-pull-2 {
- right: 16.66666667%;
-}
-
-.col-xs-pull-1 {
- right: 8.33333333%;
-}
-
-.col-xs-pull-0 {
- right: auto;
-}
-
-.col-xs-push-12 {
- left: 100%;
-}
-
-.col-xs-push-11 {
- left: 91.66666667%;
-}
-
-.col-xs-push-10 {
- left: 83.33333333%;
-}
-
-.col-xs-push-9 {
- left: 75%;
-}
-
-.col-xs-push-8 {
- left: 66.66666667%;
-}
-
-.col-xs-push-7 {
- left: 58.33333333%;
-}
-
-.col-xs-push-6 {
- left: 50%;
-}
-
-.col-xs-push-5 {
- left: 41.66666667%;
-}
-
-.col-xs-push-4 {
- left: 33.33333333%;
-}
-
-.col-xs-push-3 {
- left: 25%;
-}
-
-.col-xs-push-2 {
- left: 16.66666667%;
-}
-
-.col-xs-push-1 {
- left: 8.33333333%;
-}
-
-.col-xs-push-0 {
- left: auto;
-}
-
-.col-xs-offset-12 {
- margin-left: 100%;
-}
-
-.col-xs-offset-11 {
- margin-left: 91.66666667%;
-}
-
-.col-xs-offset-10 {
- margin-left: 83.33333333%;
-}
-
-.col-xs-offset-9 {
- margin-left: 75%;
-}
-
-.col-xs-offset-8 {
- margin-left: 66.66666667%;
-}
-
-.col-xs-offset-7 {
- margin-left: 58.33333333%;
-}
-
-.col-xs-offset-6 {
- margin-left: 50%;
-}
-
-.col-xs-offset-5 {
- margin-left: 41.66666667%;
-}
-
-.col-xs-offset-4 {
- margin-left: 33.33333333%;
-}
-
-.col-xs-offset-3 {
- margin-left: 25%;
-}
-
-.col-xs-offset-2 {
- margin-left: 16.66666667%;
-}
-
-.col-xs-offset-1 {
- margin-left: 8.33333333%;
-}
-
-.col-xs-offset-0 {
- margin-left: 0;
-}
-
-@media (min-width:768px) {
- .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 {
- float: left;
- }
-
- .col-sm-12 {
- width: 100%;
- }
-
- .col-sm-11 {
- width: 91.66666667%;
- }
-
- .col-sm-10 {
- width: 83.33333333%;
- }
-
- .col-sm-9 {
- width: 75%;
- }
-
- .col-sm-8 {
- width: 66.66666667%;
- }
-
- .col-sm-7 {
- width: 58.33333333%;
- }
-
- .col-sm-6 {
- width: 50%;
- }
-
- .col-sm-5 {
- width: 41.66666667%;
- }
-
- .col-sm-4 {
- width: 33.33333333%;
- }
-
- .col-sm-3 {
- width: 25%;
- }
-
- .col-sm-2 {
- width: 16.66666667%;
- }
-
- .col-sm-1 {
- width: 8.33333333%;
- }
-
- .col-sm-pull-12 {
- right: 100%;
- }
-
- .col-sm-pull-11 {
- right: 91.66666667%;
- }
-
- .col-sm-pull-10 {
- right: 83.33333333%;
- }
-
- .col-sm-pull-9 {
- right: 75%;
- }
-
- .col-sm-pull-8 {
- right: 66.66666667%;
- }
-
- .col-sm-pull-7 {
- right: 58.33333333%;
- }
-
- .col-sm-pull-6 {
- right: 50%;
- }
-
- .col-sm-pull-5 {
- right: 41.66666667%;
- }
-
- .col-sm-pull-4 {
- right: 33.33333333%;
- }
-
- .col-sm-pull-3 {
- right: 25%;
- }
-
- .col-sm-pull-2 {
- right: 16.66666667%;
- }
-
- .col-sm-pull-1 {
- right: 8.33333333%;
- }
-
- .col-sm-pull-0 {
- right: auto;
- }
-
- .col-sm-push-12 {
- left: 100%;
- }
-
- .col-sm-push-11 {
- left: 91.66666667%;
- }
-
- .col-sm-push-10 {
- left: 83.33333333%;
- }
-
- .col-sm-push-9 {
- left: 75%;
- }
-
- .col-sm-push-8 {
- left: 66.66666667%;
- }
-
- .col-sm-push-7 {
- left: 58.33333333%;
- }
-
- .col-sm-push-6 {
- left: 50%;
- }
-
- .col-sm-push-5 {
- left: 41.66666667%;
- }
-
- .col-sm-push-4 {
- left: 33.33333333%;
- }
-
- .col-sm-push-3 {
- left: 25%;
- }
-
- .col-sm-push-2 {
- left: 16.66666667%;
- }
-
- .col-sm-push-1 {
- left: 8.33333333%;
- }
-
- .col-sm-push-0 {
- left: auto;
- }
-
- .col-sm-offset-12 {
- margin-left: 100%;
- }
-
- .col-sm-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-sm-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-sm-offset-9 {
- margin-left: 75%;
- }
-
- .col-sm-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-sm-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-sm-offset-6 {
- margin-left: 50%;
- }
-
- .col-sm-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-sm-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-sm-offset-3 {
- margin-left: 25%;
- }
-
- .col-sm-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-sm-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-sm-offset-0 {
- margin-left: 0;
- }
-}
-
-@media (min-width:992px) {
- .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 {
- float: left;
- }
-
- .col-md-12 {
- width: 100%;
- }
-
- .col-md-11 {
- width: 91.66666667%;
- }
-
- .col-md-10 {
- width: 83.33333333%;
- }
-
- .col-md-9 {
- width: 75%;
- }
-
- .col-md-8 {
- width: 66.66666667%;
- }
-
- .col-md-7 {
- width: 58.33333333%;
- }
-
- .col-md-6 {
- width: 50%;
- }
-
- .col-md-5 {
- width: 41.66666667%;
- }
-
- .col-md-4 {
- width: 33.33333333%;
- }
-
- .col-md-3 {
- width: 25%;
- }
-
- .col-md-2 {
- width: 16.66666667%;
- }
-
- .col-md-1 {
- width: 8.33333333%;
- }
-
- .col-md-pull-12 {
- right: 100%;
- }
-
- .col-md-pull-11 {
- right: 91.66666667%;
- }
-
- .col-md-pull-10 {
- right: 83.33333333%;
- }
-
- .col-md-pull-9 {
- right: 75%;
- }
-
- .col-md-pull-8 {
- right: 66.66666667%;
- }
-
- .col-md-pull-7 {
- right: 58.33333333%;
- }
-
- .col-md-pull-6 {
- right: 50%;
- }
-
- .col-md-pull-5 {
- right: 41.66666667%;
- }
-
- .col-md-pull-4 {
- right: 33.33333333%;
- }
-
- .col-md-pull-3 {
- right: 25%;
- }
-
- .col-md-pull-2 {
- right: 16.66666667%;
- }
-
- .col-md-pull-1 {
- right: 8.33333333%;
- }
-
- .col-md-pull-0 {
- right: auto;
- }
-
- .col-md-push-12 {
- left: 100%;
- }
-
- .col-md-push-11 {
- left: 91.66666667%;
- }
-
- .col-md-push-10 {
- left: 83.33333333%;
- }
-
- .col-md-push-9 {
- left: 75%;
- }
-
- .col-md-push-8 {
- left: 66.66666667%;
- }
-
- .col-md-push-7 {
- left: 58.33333333%;
- }
-
- .col-md-push-6 {
- left: 50%;
- }
-
- .col-md-push-5 {
- left: 41.66666667%;
- }
-
- .col-md-push-4 {
- left: 33.33333333%;
- }
-
- .col-md-push-3 {
- left: 25%;
- }
-
- .col-md-push-2 {
- left: 16.66666667%;
- }
-
- .col-md-push-1 {
- left: 8.33333333%;
- }
-
- .col-md-push-0 {
- left: auto;
- }
-
- .col-md-offset-12 {
- margin-left: 100%;
- }
-
- .col-md-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-md-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-md-offset-9 {
- margin-left: 75%;
- }
-
- .col-md-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-md-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-md-offset-6 {
- margin-left: 50%;
- }
-
- .col-md-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-md-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-md-offset-3 {
- margin-left: 25%;
- }
-
- .col-md-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-md-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-md-offset-0 {
- margin-left: 0;
- }
-}
-
-@media (min-width:1200px) {
- .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 {
- float: left;
- }
-
- .col-lg-12 {
- width: 100%;
- }
-
- .col-lg-11 {
- width: 91.66666667%;
- }
-
- .col-lg-10 {
- width: 83.33333333%;
- }
-
- .col-lg-9 {
- width: 75%;
- }
-
- .col-lg-8 {
- width: 66.66666667%;
- }
-
- .col-lg-7 {
- width: 58.33333333%;
- }
-
- .col-lg-6 {
- width: 50%;
- }
-
- .col-lg-5 {
- width: 41.66666667%;
- }
-
- .col-lg-4 {
- width: 33.33333333%;
- }
-
- .col-lg-3 {
- width: 25%;
- }
-
- .col-lg-2 {
- width: 16.66666667%;
- }
-
- .col-lg-1 {
- width: 8.33333333%;
- }
-
- .col-lg-pull-12 {
- right: 100%;
- }
-
- .col-lg-pull-11 {
- right: 91.66666667%;
- }
-
- .col-lg-pull-10 {
- right: 83.33333333%;
- }
-
- .col-lg-pull-9 {
- right: 75%;
- }
-
- .col-lg-pull-8 {
- right: 66.66666667%;
- }
-
- .col-lg-pull-7 {
- right: 58.33333333%;
- }
-
- .col-lg-pull-6 {
- right: 50%;
- }
-
- .col-lg-pull-5 {
- right: 41.66666667%;
- }
-
- .col-lg-pull-4 {
- right: 33.33333333%;
- }
-
- .col-lg-pull-3 {
- right: 25%;
- }
-
- .col-lg-pull-2 {
- right: 16.66666667%;
- }
-
- .col-lg-pull-1 {
- right: 8.33333333%;
- }
-
- .col-lg-pull-0 {
- right: auto;
- }
-
- .col-lg-push-12 {
- left: 100%;
- }
-
- .col-lg-push-11 {
- left: 91.66666667%;
- }
-
- .col-lg-push-10 {
- left: 83.33333333%;
- }
-
- .col-lg-push-9 {
- left: 75%;
- }
-
- .col-lg-push-8 {
- left: 66.66666667%;
- }
-
- .col-lg-push-7 {
- left: 58.33333333%;
- }
-
- .col-lg-push-6 {
- left: 50%;
- }
-
- .col-lg-push-5 {
- left: 41.66666667%;
- }
-
- .col-lg-push-4 {
- left: 33.33333333%;
- }
-
- .col-lg-push-3 {
- left: 25%;
- }
-
- .col-lg-push-2 {
- left: 16.66666667%;
- }
-
- .col-lg-push-1 {
- left: 8.33333333%;
- }
-
- .col-lg-push-0 {
- left: auto;
- }
-
- .col-lg-offset-12 {
- margin-left: 100%;
- }
-
- .col-lg-offset-11 {
- margin-left: 91.66666667%;
- }
-
- .col-lg-offset-10 {
- margin-left: 83.33333333%;
- }
-
- .col-lg-offset-9 {
- margin-left: 75%;
- }
-
- .col-lg-offset-8 {
- margin-left: 66.66666667%;
- }
-
- .col-lg-offset-7 {
- margin-left: 58.33333333%;
- }
-
- .col-lg-offset-6 {
- margin-left: 50%;
- }
-
- .col-lg-offset-5 {
- margin-left: 41.66666667%;
- }
-
- .col-lg-offset-4 {
- margin-left: 33.33333333%;
- }
-
- .col-lg-offset-3 {
- margin-left: 25%;
- }
-
- .col-lg-offset-2 {
- margin-left: 16.66666667%;
- }
-
- .col-lg-offset-1 {
- margin-left: 8.33333333%;
- }
-
- .col-lg-offset-0 {
- margin-left: 0;
- }
-}
-
-table {
- background-color: transparent;
-}
-
-caption {
- padding-top: 8px;
- padding-bottom: 8px;
- color: #fff;
- text-align: left;
-}
-
-th {
- text-align: left;
-}
-
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 22px;
-}
-
-.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.42857143;
- vertical-align: top;
- border-top: 1px solid #333;
-}
-
-.table>thead>tr>th {
- vertical-align: bottom;
- border-bottom: 2px solid #333;
-}
-
-.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 #333;
-}
-
-.table .table {
- background-color: #000;
-}
-
-.table-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 #333;
-}
-
-.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 #333;
-}
-
-.table-bordered>thead>tr>th,
-.table-bordered>thead>tr>td {
- border-bottom-width: 2px;
-}
-
-.table-striped>tbody>tr:nth-child(odd) {
- background-color: #050505;
-}
-
-.table-hover>tbody>tr:hover {
- background-color: #0a0a0a;
-}
-
-table col[class*="col-"] {
- position: static;
- float: none;
- display: table-column;
-}
-
-table td[class*="col-"],
-table th[class*="col-"] {
- position: static;
- float: none;
- display: table-cell;
-}
-
-.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.active>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: #0a0a0a;
-}
-
-.table-hover>tbody>tr>td.active:hover,
-.table-hover>tbody>tr>th.active:hover,
-.table-hover>tbody>tr.active:hover>td,
-.table-hover>tbody>tr:hover>.active,
-.table-hover>tbody>tr.active:hover>th {
- background-color: #000;
-}
-
-.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;
-}
-
-.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:hover>.success,
-.table-hover>tbody>tr.success:hover>th {
- background-color: #d0e9c6;
-}
-
-.table>thead>tr>td.info,
-.table>tbody>tr>td.info,
-.table>tfoot>tr>td.info,
-.table>thead>tr>th.info,
-.table>tbody>tr>th.info,
-.table>tfoot>tr>th.info,
-.table>thead>tr.info>td,
-.table>tbody>tr.info>td,
-.table>tfoot>tr.info>td,
-.table>thead>tr.info>th,
-.table>tbody>tr.info>th,
-.table>tfoot>tr.info>th {
- background-color: #d9edf7;
-}
-
-.table-hover>tbody>tr>td.info:hover,
-.table-hover>tbody>tr>th.info:hover,
-.table-hover>tbody>tr.info:hover>td,
-.table-hover>tbody>tr:hover>.info,
-.table-hover>tbody>tr.info:hover>th {
- background-color: #c4e3f3;
-}
-
-.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;
-}
-
-.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:hover>.warning,
-.table-hover>tbody>tr.warning:hover>th {
- background-color: #faf2cc;
-}
-
-.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,
-.table>tbody>tr.danger>th,
-.table>tfoot>tr.danger>th {
- background-color: #f2dede;
-}
-
-.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:hover>.danger,
-.table-hover>tbody>tr.danger:hover>th {
- background-color: #ebcccc;
-}
-
-.table-responsive {
- overflow-x: auto;
- min-height: 0.01%;
-}
-
-@media screen and (max-width:767px) {
- .table-responsive {
- width: 100%;
- margin-bottom: 16.5px;
- overflow-y: hidden;
- -ms-overflow-style: -ms-autohiding-scrollbar;
- border: 1px solid #333;
- }
-
- .table-responsive>.table {
- margin-bottom: 0;
- }
-
- .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>td: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>tbody>tr:last-child>th,
- .table-responsive>.table-bordered>tfoot>tr:last-child>th,
- .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;
- min-width: 0;
-}
-
-legend {
- display: block;
- width: 100%;
- padding: 0;
- margin-bottom: 22px;
- font-size: 24px;
- line-height: inherit;
- color: #fff;
- border: 0;
- border-bottom: 1px solid #e5e5e5;
-}
-
-label {
- display: inline-block;
- max-width: 100%;
- 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;
-}
-
-input[type="range"] {
- display: block;
- width: 100%;
-}
-
-select[multiple],
-select[size] {
- height: auto;
-}
-
-input[type="file"]:focus,
-input[type="radio"]:focus,
-input[type="checkbox"]:focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-output {
- display: block;
- padding-top: 7px;
- font-size: 16px;
- line-height: 1.42857143;
- color: #fff;
-}
-
-.form-control {
- display: block;
- width: 100%;
- height: 36px;
- padding: 6px 12px;
- font-size: 16px;
- line-height: 1.42857143;
- color: #fff;
- background-color: #fff;
- background-image: none;
- 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 ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
- -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
- transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
-}
-
-.form-control:focus {
- border-color: #66afe9;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
- box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
-}
-
-.form-control::-moz-placeholder {
- color: #999;
- opacity: 1;
-}
-
-.form-control:-ms-input-placeholder {
- color: #999;
-}
-
-.form-control::-webkit-input-placeholder {
- color: #999;
-}
-
-.form-control[disabled],
-.form-control[readonly],
-fieldset[disabled] .form-control {
- cursor: not-allowed;
- background-color: #fff;
- opacity: 1;
-}
-
-textarea.form-control {
- height: auto;
-}
-
-input[type="search"] {
- -webkit-appearance: none;
-}
-
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- input[type="date"],
- input[type="time"],
- input[type="datetime-local"],
- input[type="month"] {
- line-height: 36px;
- }
-
- input[type="date"].input-sm,
- input[type="time"].input-sm,
- input[type="datetime-local"].input-sm,
- input[type="month"].input-sm {
- line-height: 33px;
- }
-
- input[type="date"].input-lg,
- input[type="time"].input-lg,
- input[type="datetime-local"].input-lg,
- input[type="month"].input-lg {
- line-height: 49px;
- }
-}
-
-.form-group {
- margin-bottom: 15px;
-}
-
-.radio,
-.checkbox {
- position: relative;
- display: block;
- margin-top: 10px;
- margin-bottom: 10px;
-}
-
-.radio label,
-.checkbox label {
- min-height: 22px;
- padding-left: 20px;
- 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"] {
- position: absolute;
- margin-left: -20px;
- margin-top: 4px \9;
-}
-
-.radio+.radio,
-.checkbox+.checkbox {
- margin-top: -5px;
-}
-
-.radio-inline,
-.checkbox-inline {
- display: inline-block;
- padding-left: 20px;
- margin-bottom: 0;
- vertical-align: middle;
- font-weight: normal;
- cursor: pointer;
-}
-
-.radio-inline+.radio-inline,
-.checkbox-inline+.checkbox-inline {
- margin-top: 0;
- margin-left: 10px;
-}
-
-input[type="radio"][disabled],
-input[type="checkbox"][disabled],
-input[type="radio"].disabled,
-input[type="checkbox"].disabled,
-fieldset[disabled] input[type="radio"],
-fieldset[disabled] input[type="checkbox"] {
- cursor: not-allowed;
-}
-
-.radio-inline.disabled,
-.checkbox-inline.disabled,
-fieldset[disabled] .radio-inline,
-fieldset[disabled] .checkbox-inline {
- cursor: not-allowed;
-}
-
-.radio.disabled label,
-.checkbox.disabled label,
-fieldset[disabled] .radio label,
-fieldset[disabled] .checkbox label {
- cursor: not-allowed;
-}
-
-.form-control-static {
- padding-top: 7px;
- padding-bottom: 7px;
- margin-bottom: 0;
-}
-
-.form-control-static.input-lg,
-.form-control-static.input-sm {
- padding-left: 0;
- padding-right: 0;
-}
-
-.input-sm,
-.form-group-sm .form-control {
- height: 33px;
- padding: 5px 10px;
- font-size: 14px;
- line-height: 1.5;
- border-radius: 3px;
-}
-
-select.input-sm,
-select.form-group-sm .form-control {
- height: 33px;
- line-height: 33px;
-}
-
-textarea.input-sm,
-textarea.form-group-sm .form-control,
-select[multiple].input-sm,
-select[multiple].form-group-sm .form-control {
- height: auto;
-}
-
-.input-lg,
-.form-group-lg .form-control {
- height: 49px;
- padding: 10px 16px;
- font-size: 20px;
- line-height: 1.33;
- border-radius: 6px;
-}
-
-select.input-lg,
-select.form-group-lg .form-control {
- height: 49px;
- line-height: 49px;
-}
-
-textarea.input-lg,
-textarea.form-group-lg .form-control,
-select[multiple].input-lg,
-select[multiple].form-group-lg .form-control {
- height: auto;
-}
-
-.has-feedback {
- position: relative;
-}
-
-.has-feedback .form-control {
- padding-right: 45px;
-}
-
-.form-control-feedback {
- position: absolute;
- top: 0;
- right: 0;
- z-index: 2;
- display: block;
- width: 36px;
- height: 36px;
- line-height: 36px;
- text-align: center;
- pointer-events: none;
-}
-
-.input-lg+.form-control-feedback {
- width: 49px;
- height: 49px;
- line-height: 49px;
-}
-
-.input-sm+.form-control-feedback {
- width: 33px;
- height: 33px;
- line-height: 33px;
-}
-
-.has-success .help-block,
-.has-success .control-label,
-.has-success .radio,
-.has-success .checkbox,
-.has-success .radio-inline,
-.has-success .checkbox-inline,
-.has-success.radio label,
-.has-success.checkbox label,
-.has-success.radio-inline label,
-.has-success.checkbox-inline label {
- color: #7bcc3a;
-}
-
-.has-success .form-control {
- border-color: #7bcc3a;
- -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: #63a82b;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b1e18b;
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b1e18b;
-}
-
-.has-success .input-group-addon {
- color: #7bcc3a;
- border-color: #7bcc3a;
- background-color: #dff0d8;
-}
-
-.has-success .form-control-feedback {
- color: #7bcc3a;
-}
-
-.has-warning .help-block,
-.has-warning .control-label,
-.has-warning .radio,
-.has-warning .checkbox,
-.has-warning .radio-inline,
-.has-warning .checkbox-inline,
-.has-warning.radio label,
-.has-warning.checkbox label,
-.has-warning.radio-inline label,
-.has-warning.checkbox-inline label {
- color: #ffd162;
-}
-
-.has-warning .form-control {
- border-color: #ffd162;
- -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-warning .form-control:focus {
- border-color: #ffc22f;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefc8;
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefc8;
-}
-
-.has-warning .input-group-addon {
- color: #ffd162;
- border-color: #ffd162;
- background-color: #fcf8e3;
-}
-
-.has-warning .form-control-feedback {
- color: #ffd162;
-}
-
-.has-error .help-block,
-.has-error .control-label,
-.has-error .radio,
-.has-error .checkbox,
-.has-error .radio-inline,
-.has-error .checkbox-inline,
-.has-error.radio label,
-.has-error.checkbox label,
-.has-error.radio-inline label,
-.has-error.checkbox-inline label {
- color: #f74b4b;
-}
-
-.has-error .form-control {
- border-color: #f74b4b;
- -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: #f51a1a;
- -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fbadad;
- box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fbadad;
-}
-
-.has-error .input-group-addon {
- color: #f74b4b;
- border-color: #f74b4b;
- background-color: #f2dede;
-}
-
-.has-error .form-control-feedback {
- color: #f74b4b;
-}
-
-.has-feedback label~.form-control-feedback {
- top: 27px;
-}
-
-.has-feedback label.sr-only~.form-control-feedback {
- top: 0;
-}
-
-.help-block {
- display: block;
- margin-top: 5px;
- margin-bottom: 10px;
- color: #fff;
-}
-
-@media (min-width:768px) {
- .form-inline .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
-
- .form-inline .form-control-static {
- display: inline-block;
- }
-
- .form-inline .input-group {
- display: inline-table;
- vertical-align: middle;
- }
-
- .form-inline .input-group .input-group-addon,
- .form-inline .input-group .input-group-btn,
- .form-inline .input-group .form-control {
- width: auto;
- }
-
- .form-inline .input-group>.form-control {
- width: 100%;
- }
-
- .form-inline .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .form-inline .radio,
- .form-inline .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .form-inline .radio label,
- .form-inline .checkbox label {
- padding-left: 0;
- }
-
- .form-inline .radio input[type="radio"],
- .form-inline .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
-
- .form-inline .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-
-.form-horizontal .radio,
-.form-horizontal .checkbox,
-.form-horizontal .radio-inline,
-.form-horizontal .checkbox-inline {
- margin-top: 0;
- margin-bottom: 0;
- padding-top: 7px;
-}
-
-.form-horizontal .radio,
-.form-horizontal .checkbox {
- min-height: 29px;
-}
-
-.form-horizontal .form-group {
- margin-left: -15px;
- margin-right: -15px;
-}
-
-@media (min-width:768px) {
- .form-horizontal .control-label {
- text-align: right;
- margin-bottom: 0;
- padding-top: 7px;
- }
-}
-
-.form-horizontal .has-feedback .form-control-feedback {
- right: 15px;
-}
-
-@media (min-width:768px) {
- .form-horizontal .form-group-lg .control-label {
- padding-top: 14.3px;
- }
-}
-
-@media (min-width:768px) {
- .form-horizontal .form-group-sm .control-label {
- padding-top: 6px;
- }
-}
-
-.btn {
- display: inline-block;
- margin-bottom: 0;
- font-weight: normal;
- text-align: center;
- vertical-align: middle;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- cursor: pointer;
- background-image: none;
- border: 1px solid transparent;
- white-space: nowrap;
- padding: 6px 12px;
- font-size: 16px;
- line-height: 1.42857143;
- border-radius: 4px;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.btn:focus,
-.btn:active:focus,
-.btn.active:focus,
-.btn.focus,
-.btn:active.focus,
-.btn.active.focus {
- outline: thin dotted;
- outline: 5px auto -webkit-focus-ring-color;
- outline-offset: -2px;
-}
-
-.btn:hover,
-.btn:focus,
-.btn.focus {
- color: #333;
- text-decoration: none;
-}
-
-.btn:active,
-.btn.active {
- outline: 0;
- background-image: none;
- -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 {
- cursor: not-allowed;
- pointer-events: none;
- 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.focus,
-.btn-default:active,
-.btn-default.active,
-.open>.dropdown-toggle.btn-default {
- color: #333;
- background-color: #e6e6e6;
- 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.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.disabled.active,
-.btn-default[disabled].active,
-fieldset[disabled] .btn-default.active {
- background-color: #fff;
- border-color: #ccc;
-}
-
-.btn-default .badge {
- color: #fff;
- background-color: #333;
-}
-
-.btn-primary {
- color: #fff;
- background-color: #337ab7;
- border-color: #2e6da4;
-}
-
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary.focus,
-.btn-primary:active,
-.btn-primary.active,
-.open>.dropdown-toggle.btn-primary {
- color: #fff;
- background-color: #286090;
- border-color: #204d74;
-}
-
-.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.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: #337ab7;
- border-color: #2e6da4;
-}
-
-.btn-primary .badge {
- color: #337ab7;
- background-color: #fff;
-}
-
-.btn-success {
- color: #fff;
- background-color: #7bcc3a;
- border-color: #6fbc31;
-}
-
-.btn-success:hover,
-.btn-success:focus,
-.btn-success.focus,
-.btn-success:active,
-.btn-success.active,
-.open>.dropdown-toggle.btn-success {
- color: #fff;
- background-color: #63a82b;
- border-color: #528b24;
-}
-
-.btn-success:active,
-.btn-success.active,
-.open>.dropdown-toggle.btn-success {
- background-image: none;
-}
-
-.btn-success.disabled,
-.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.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: #7bcc3a;
- border-color: #6fbc31;
-}
-
-.btn-success .badge {
- color: #7bcc3a;
- background-color: #fff;
-}
-
-.btn-info {
- color: #fff;
- background-color: #10a0de;
- border-color: #0e8fc6;
-}
-
-.btn-info:hover,
-.btn-info:focus,
-.btn-info.focus,
-.btn-info:active,
-.btn-info.active,
-.open>.dropdown-toggle.btn-info {
- color: #fff;
- background-color: #0d7eae;
- border-color: #0a668d;
-}
-
-.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[disabled]:focus,
-fieldset[disabled] .btn-info:focus,
-.btn-info.disabled.focus,
-.btn-info[disabled].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: #10a0de;
- border-color: #0e8fc6;
-}
-
-.btn-info .badge {
- color: #10a0de;
- background-color: #fff;
-}
-
-.btn-warning {
- color: #fff;
- background-color: #ffd162;
- border-color: #ffca48;
-}
-
-.btn-warning:hover,
-.btn-warning:focus,
-.btn-warning.focus,
-.btn-warning:active,
-.btn-warning.active,
-.open>.dropdown-toggle.btn-warning {
- color: #fff;
- background-color: #ffc22f;
- border-color: #ffb80b;
-}
-
-.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.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: #ffd162;
- border-color: #ffca48;
-}
-
-.btn-warning .badge {
- color: #ffd162;
- background-color: #fff;
-}
-
-.btn-danger {
- color: #fff;
- background-color: #f74b4b;
- border-color: #f63333;
-}
-
-.btn-danger:hover,
-.btn-danger:focus,
-.btn-danger.focus,
-.btn-danger:active,
-.btn-danger.active,
-.open>.dropdown-toggle.btn-danger {
- color: #fff;
- background-color: #f51a1a;
- border-color: #e10a0a;
-}
-
-.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.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: #f74b4b;
- border-color: #f63333;
-}
-
-.btn-danger .badge {
- color: #f74b4b;
- background-color: #fff;
-}
-
-.btn-link {
- color: #337ab7;
- font-weight: normal;
- border-radius: 0;
-}
-
-.btn-link,
-.btn-link:active,
-.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: #23527c;
- 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: #fff;
- text-decoration: none;
-}
-
-.btn-lg,
-.btn-group-lg>.btn {
- padding: 10px 16px;
- font-size: 20px;
- line-height: 1.33;
- border-radius: 6px;
-}
-
-.btn-sm,
-.btn-group-sm>.btn {
- padding: 5px 10px;
- font-size: 14px;
- line-height: 1.5;
- border-radius: 3px;
-}
-
-.btn-xs,
-.btn-group-xs>.btn {
- padding: 1px 5px;
- font-size: 14px;
- line-height: 1.5;
- border-radius: 3px;
-}
-
-.btn-block {
- display: block;
- width: 100%;
-}
-
-.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;
- -o-transition: opacity .15s linear;
- transition: opacity .15s linear;
-}
-
-.fade.in {
- opacity: 1;
-}
-
-.collapse {
- display: none;
- visibility: hidden;
-}
-
-.collapse.in {
- display: block;
- visibility: visible;
-}
-
-tr.collapse.in {
- display: table-row;
-}
-
-tbody.collapse.in {
- display: table-row-group;
-}
-
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition-property: height, visibility;
- -o-transition-property: height, visibility;
- transition-property: height, visibility;
- -webkit-transition-duration: .35s;
- -o-transition-duration: .35s;
- transition-duration: .35s;
- -webkit-transition-timing-function: ease;
- -o-transition-timing-function: ease;
- transition-timing-function: ease;
-}
-
-.caret {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 2px;
- vertical-align: middle;
- border-top: 4px solid;
- border-right: 4px solid transparent;
- border-left: 4px solid transparent;
-}
-
-.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;
- list-style: none;
- font-size: 16px;
- text-align: left;
- 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);
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
-}
-
-.dropdown-menu.pull-right {
- right: 0;
- left: auto;
-}
-
-.dropdown-menu .divider {
- height: 1px;
- margin: 10px 0;
- overflow: hidden;
- background-color: #e5e5e5;
-}
-
-.dropdown-menu>li>a {
- display: block;
- padding: 3px 20px;
- clear: both;
- font-weight: normal;
- line-height: 1.42857143;
- color: #fff;
- white-space: nowrap;
-}
-
-.dropdown-menu>li>a:hover,
-.dropdown-menu>li>a:focus {
- text-decoration: none;
- color: #f2f2f2;
- background-color: #f5f5f5;
-}
-
-.dropdown-menu>.active>a,
-.dropdown-menu>.active>a:hover,
-.dropdown-menu>.active>a:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- background-color: #337ab7;
-}
-
-.dropdown-menu>.disabled>a,
-.dropdown-menu>.disabled>a:hover,
-.dropdown-menu>.disabled>a:focus {
- color: #fff;
-}
-
-.dropdown-menu>.disabled>a:hover,
-.dropdown-menu>.disabled>a:focus {
- text-decoration: none;
- background-color: transparent;
- background-image: none;
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- cursor: not-allowed;
-}
-
-.open>.dropdown-menu {
- display: block;
-}
-
-.open>a {
- outline: 0;
-}
-
-.dropdown-menu-right {
- left: auto;
- right: 0;
-}
-
-.dropdown-menu-left {
- left: 0;
- right: auto;
-}
-
-.dropdown-header {
- display: block;
- padding: 3px 20px;
- font-size: 14px;
- line-height: 1.42857143;
- color: #fff;
- white-space: nowrap;
-}
-
-.dropdown-backdrop {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- z-index: 990;
-}
-
-.pull-right>.dropdown-menu {
- right: 0;
- left: auto;
-}
-
-.dropup .caret,
-.navbar-fixed-bottom .dropdown .caret {
- border-top: 0;
- border-bottom: 4px solid;
- 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 {
- left: auto;
- right: 0;
- }
-
- .navbar-right .dropdown-menu-left {
- left: 0;
- right: auto;
- }
-}
-
-.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+.btn,
-.btn-group .btn+.btn-group,
-.btn-group .btn-group+.btn,
-.btn-group .btn-group+.btn-group {
- margin-left: -1px;
-}
-
-.btn-toolbar {
- margin-left: -5px;
-}
-
-.btn-toolbar .btn-group,
-.btn-toolbar .input-group {
- float: left;
-}
-
-.btn-toolbar>.btn,
-.btn-toolbar>.btn-group,
-.btn-toolbar>.input-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-bottom-right-radius: 0;
- border-top-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-bottom-right-radius: 0;
- border-top-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>.btn+.dropdown-toggle {
- padding-left: 8px;
- padding-right: 8px;
-}
-
-.btn-group>.btn-lg+.dropdown-toggle {
- padding-left: 12px;
- padding-right: 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-group.open .dropdown-toggle.btn-link {
- -webkit-box-shadow: none;
- box-shadow: none;
-}
-
-.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,
-.btn-group-vertical>.btn-group>.btn {
- display: block;
- float: none;
- width: 100%;
- max-width: 100%;
-}
-
-.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-bottom-left-radius: 4px;
- border-top-right-radius: 0;
- 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:not(:last-child)>.btn:last-child,
-.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child {
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-
-.btn-group-justified {
- display: table;
- width: 100%;
- table-layout: fixed;
- border-collapse: separate;
-}
-
-.btn-group-justified>.btn,
-.btn-group-justified>.btn-group {
- float: none;
- display: table-cell;
- width: 1%;
-}
-
-.btn-group-justified>.btn-group .btn {
- width: 100%;
-}
-
-.btn-group-justified>.btn-group .dropdown-menu {
- left: auto;
-}
-
-[data-toggle="buttons"]>.btn input[type="radio"],
-[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],
-[data-toggle="buttons"]>.btn input[type="checkbox"],
-[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none;
-}
-
-.input-group {
- position: relative;
- display: table;
- border-collapse: separate;
-}
-
-.input-group[class*="col-"] {
- float: none;
- padding-left: 0;
- padding-right: 0;
-}
-
-.input-group .form-control {
- position: relative;
- z-index: 2;
- float: left;
- width: 100%;
- margin-bottom: 0;
-}
-
-.input-group-lg>.form-control,
-.input-group-lg>.input-group-addon,
-.input-group-lg>.input-group-btn>.btn {
- height: 49px;
- padding: 10px 16px;
- font-size: 20px;
- 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: 49px;
- line-height: 49px;
-}
-
-textarea.input-group-lg>.form-control,
-textarea.input-group-lg>.input-group-addon,
-textarea.input-group-lg>.input-group-btn>.btn,
-select[multiple].input-group-lg>.form-control,
-select[multiple].input-group-lg>.input-group-addon,
-select[multiple].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: 33px;
- padding: 5px 10px;
- font-size: 14px;
- 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: 33px;
- line-height: 33px;
-}
-
-textarea.input-group-sm>.form-control,
-textarea.input-group-sm>.input-group-addon,
-textarea.input-group-sm>.input-group-btn>.btn,
-select[multiple].input-group-sm>.form-control,
-select[multiple].input-group-sm>.input-group-addon,
-select[multiple].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: 16px;
- font-weight: normal;
- line-height: 1;
- color: #fff;
- text-align: center;
- background-color: #fff;
- border: 1px solid #ccc;
- border-radius: 4px;
-}
-
-.input-group-addon.input-sm {
- padding: 5px 10px;
- font-size: 14px;
- border-radius: 3px;
-}
-
-.input-group-addon.input-lg {
- padding: 10px 16px;
- font-size: 20px;
- 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>.btn-group>.btn,
-.input-group-btn:first-child>.dropdown-toggle,
-.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),
-.input-group-btn:last-child>.btn-group:not(:last-child)>.btn {
- border-bottom-right-radius: 0;
- border-top-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>.btn-group>.btn,
-.input-group-btn:last-child>.dropdown-toggle,
-.input-group-btn:first-child>.btn:not(:first-child),
-.input-group-btn:first-child>.btn-group:not(:first-child)>.btn {
- border-bottom-left-radius: 0;
- border-top-left-radius: 0;
-}
-
-.input-group-addon:last-child {
- border-left: 0;
-}
-
-.input-group-btn {
- position: relative;
- font-size: 0;
- white-space: nowrap;
-}
-
-.input-group-btn>.btn {
- position: relative;
-}
-
-.input-group-btn>.btn+.btn {
- margin-left: -1px;
-}
-
-.input-group-btn>.btn:hover,
-.input-group-btn>.btn:focus,
-.input-group-btn>.btn:active {
- z-index: 2;
-}
-
-.input-group-btn:first-child>.btn,
-.input-group-btn:first-child>.btn-group {
- margin-right: -1px;
-}
-
-.input-group-btn:last-child>.btn,
-.input-group-btn:last-child>.btn-group {
- margin-left: -1px;
-}
-
-.nav {
- margin-bottom: 0;
- padding-left: 0;
- list-style: none;
-}
-
-.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: #fff;
-}
-
-.nav>li.disabled>a {
- color: #fff;
-}
-
-.nav>li.disabled>a:hover,
-.nav>li.disabled>a:focus {
- color: #fff;
- text-decoration: none;
- background-color: transparent;
- cursor: not-allowed;
-}
-
-.nav .open>a,
-.nav .open>a:hover,
-.nav .open>a:focus {
- background-color: #fff;
- border-color: #337ab7;
-}
-
-.nav .nav-divider {
- height: 1px;
- margin: 10px 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.42857143;
- border: 1px solid transparent;
- border-radius: 4px 4px 0 0;
-}
-
-.nav-tabs>li>a:hover {
- border-color: #fff #fff #ddd;
-}
-
-.nav-tabs>li.active>a,
-.nav-tabs>li.active>a:hover,
-.nav-tabs>li.active>a:focus {
- color: #fff;
- background-color: #000;
- border: 1px solid #ddd;
- border-bottom-color: transparent;
- cursor: default;
-}
-
-.nav-tabs.nav-justified {
- width: 100%;
- border-bottom: 0;
-}
-
-.nav-tabs.nav-justified>li {
- float: none;
-}
-
-.nav-tabs.nav-justified>li>a {
- text-align: center;
- margin-bottom: 5px;
-}
-
-.nav-tabs.nav-justified>.dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-
-@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: #000;
- }
-}
-
-.nav-pills>li {
- float: left;
-}
-
-.nav-pills>li>a {
- border-radius: 4px;
-}
-
-.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: #337ab7;
-}
-
-.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 {
- text-align: center;
- margin-bottom: 5px;
-}
-
-.nav-justified>.dropdown .dropdown-menu {
- top: auto;
- left: auto;
-}
-
-@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: #000;
- }
-}
-
-.tab-content>.tab-pane {
- display: none;
- visibility: hidden;
-}
-
-.tab-content>.active {
- display: block;
- visibility: visible;
-}
-
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-right-radius: 0;
- border-top-left-radius: 0;
-}
-
-.navbar {
- position: relative;
- min-height: 50px;
- margin-bottom: 22px;
- border: 1px solid transparent;
-}
-
-@media (min-width:768px) {
- .navbar {
- border-radius: 4px;
- }
-}
-
-@media (min-width:768px) {
- .navbar-header {
- float: left;
- }
-}
-
-.navbar-collapse {
- overflow-x: visible;
- padding-right: 15px;
- padding-left: 15px;
- border-top: 1px solid transparent;
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
- -webkit-overflow-scrolling: touch;
-}
-
-.navbar-collapse.in {
- overflow-y: auto;
-}
-
-@media (min-width:768px) {
- .navbar-collapse {
- width: auto;
- border-top: 0;
- -webkit-box-shadow: none;
- box-shadow: none;
- }
-
- .navbar-collapse.collapse {
- display: block !important;
- visibility: visible !important;
- height: auto !important;
- padding-bottom: 0;
- overflow: visible !important;
- }
-
- .navbar-collapse.in {
- overflow-y: visible;
- }
-
- .navbar-fixed-top .navbar-collapse,
- .navbar-static-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- padding-left: 0;
- padding-right: 0;
- }
-}
-
-.navbar-fixed-top .navbar-collapse,
-.navbar-fixed-bottom .navbar-collapse {
- max-height: 340px;
-}
-
-@media (max-device-width:480px) and (orientation:landscape) {
- .navbar-fixed-top .navbar-collapse,
- .navbar-fixed-bottom .navbar-collapse {
- max-height: 200px;
- }
-}
-
-.container>.navbar-header,
-.container-fluid>.navbar-header,
-.container>.navbar-collapse,
-.container-fluid>.navbar-collapse {
- margin-right: -15px;
- margin-left: -15px;
-}
-
-@media (min-width:768px) {
- .container>.navbar-header,
- .container-fluid>.navbar-header,
- .container>.navbar-collapse,
- .container-fluid>.navbar-collapse {
- margin-right: 0;
- margin-left: 0;
- }
-}
-
-.navbar-static-top {
- z-index: 1000;
- 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;
- z-index: 1030;
-}
-
-@media (min-width:768px) {
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
-}
-
-.navbar-fixed-top {
- top: 0;
- border-width: 0 0 1px;
-}
-
-.navbar-fixed-bottom {
- bottom: 0;
- margin-bottom: 0;
- border-width: 1px 0 0;
-}
-
-.navbar-brand {
- float: left;
- padding: 14px 15px;
- font-size: 20px;
- line-height: 22px;
- height: 50px;
-}
-
-.navbar-brand:hover,
-.navbar-brand:focus {
- text-decoration: none;
-}
-
-.navbar-brand>img {
- display: block;
-}
-
-@media (min-width:768px) {
- .navbar>.container .navbar-brand,
- .navbar>.container-fluid .navbar-brand {
- margin-left: -15px;
- }
-}
-
-.navbar-toggle {
- position: relative;
- float: right;
- margin-right: 15px;
- padding: 9px 10px;
- margin-top: 8px;
- margin-bottom: 8px;
- background-color: transparent;
- background-image: none;
- border: 1px solid transparent;
- border-radius: 4px;
-}
-
-.navbar-toggle:focus {
- outline: 0;
-}
-
-.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: 7px -15px;
-}
-
-.navbar-nav>li>a {
- padding-top: 10px;
- padding-bottom: 10px;
- line-height: 22px;
-}
-
-@media (max-width:767px) {
- .navbar-nav .open .dropdown-menu {
- position: static;
- float: none;
- width: auto;
- margin-top: 0;
- background-color: transparent;
- border: 0;
- -webkit-box-shadow: none;
- 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: 22px;
- }
-
- .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: 14px;
- padding-bottom: 14px;
- }
-}
-
-.navbar-form {
- margin-left: -15px;
- margin-right: -15px;
- padding: 10px 15px;
- border-top: 1px solid transparent;
- border-bottom: 1px solid transparent;
- -webkit-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);
- margin-top: 7px;
- margin-bottom: 7px;
-}
-
-@media (min-width:768px) {
- .navbar-form .form-group {
- display: inline-block;
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .navbar-form .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle;
- }
-
- .navbar-form .form-control-static {
- display: inline-block;
- }
-
- .navbar-form .input-group {
- display: inline-table;
- vertical-align: middle;
- }
-
- .navbar-form .input-group .input-group-addon,
- .navbar-form .input-group .input-group-btn,
- .navbar-form .input-group .form-control {
- width: auto;
- }
-
- .navbar-form .input-group>.form-control {
- width: 100%;
- }
-
- .navbar-form .control-label {
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .navbar-form .radio,
- .navbar-form .checkbox {
- display: inline-block;
- margin-top: 0;
- margin-bottom: 0;
- vertical-align: middle;
- }
-
- .navbar-form .radio label,
- .navbar-form .checkbox label {
- padding-left: 0;
- }
-
- .navbar-form .radio input[type="radio"],
- .navbar-form .checkbox input[type="checkbox"] {
- position: relative;
- margin-left: 0;
- }
-
- .navbar-form .has-feedback .form-control-feedback {
- top: 0;
- }
-}
-
-@media (max-width:767px) {
- .navbar-form .form-group {
- margin-bottom: 5px;
- }
-
- .navbar-form .form-group:last-child {
- margin-bottom: 0;
- }
-}
-
-@media (min-width:768px) {
- .navbar-form {
- width: auto;
- border: 0;
- margin-left: 0;
- margin-right: 0;
- padding-top: 0;
- padding-bottom: 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-top-right-radius: 4px;
- border-top-left-radius: 4px;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0;
-}
-
-.navbar-btn {
- margin-top: 7px;
- margin-bottom: 7px;
-}
-
-.navbar-btn.btn-sm {
- margin-top: 8.5px;
- margin-bottom: 8.5px;
-}
-
-.navbar-btn.btn-xs {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-
-.navbar-text {
- margin-top: 14px;
- margin-bottom: 14px;
-}
-
-@media (min-width:768px) {
- .navbar-text {
- float: left;
- margin-left: 15px;
- margin-right: 15px;
- }
-}
-
-@media (min-width:768px) {
- .navbar-left {
- float: left !important;
- }
-
- .navbar-right {
- float: right !important;
- margin-right: -15px;
- }
-
- .navbar-right~.navbar-right {
- margin-right: 0;
- }
-}
-
-.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;
-}
-
-.navbar-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: #888;
-}
-
-.navbar-default .navbar-collapse,
-.navbar-default .navbar-form {
- border-color: #e7e7e7;
-}
-
-.navbar-default .navbar-nav>.open>a,
-.navbar-default .navbar-nav>.open>a:hover,
-.navbar-default .navbar-nav>.open>a:focus {
- background-color: #e7e7e7;
- color: #555;
-}
-
-@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-default .btn-link {
- color: #777;
-}
-
-.navbar-default .btn-link:hover,
-.navbar-default .btn-link:focus {
- color: #333;
-}
-
-.navbar-default .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-default .btn-link:hover,
-.navbar-default .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-default .btn-link:focus {
- color: #ccc;
-}
-
-.navbar-inverse {
- background-color: #222;
- border-color: #080808;
-}
-
-.navbar-inverse .navbar-brand {
- color: #fff;
-}
-
-.navbar-inverse .navbar-brand:hover,
-.navbar-inverse .navbar-brand:focus {
- color: #fff;
- background-color: transparent;
-}
-
-.navbar-inverse .navbar-text {
- color: #fff;
-}
-
-.navbar-inverse .navbar-nav>li>a {
- color: #fff;
-}
-
-.navbar-inverse .navbar-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 {
- background-color: #080808;
- 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 .divider {
- background-color: #080808;
- }
-
- .navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
- color: #fff;
- }
-
- .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-menu>.disabled>a:focus {
- color: #444;
- background-color: transparent;
- }
-}
-
-.navbar-inverse .navbar-link {
- color: #fff;
-}
-
-.navbar-inverse .navbar-link:hover {
- color: #fff;
-}
-
-.navbar-inverse .btn-link {
- color: #fff;
-}
-
-.navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link:focus {
- color: #fff;
-}
-
-.navbar-inverse .btn-link[disabled]:hover,
-fieldset[disabled] .navbar-inverse .btn-link:hover,
-.navbar-inverse .btn-link[disabled]:focus,
-fieldset[disabled] .navbar-inverse .btn-link:focus {
- color: #444;
-}
-
-.pager {
- padding-left: 0;
- margin: 22px 0;
- list-style: none;
- text-align: center;
-}
-
-.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: #fff;
-}
-
-.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: #fff;
- background-color: #fff;
- cursor: not-allowed;
-}
-
-.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;
-}
-
-a.label:hover,
-a.label:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-
-.label:empty {
- display: none;
-}
-
-.btn .label {
- position: relative;
- top: -1px;
-}
-
-.label-default {
- background-color: #fff;
-}
-
-.label-default[href]:hover,
-.label-default[href]:focus {
- background-color: #e6e6e6;
-}
-
-.label-primary {
- background-color: #337ab7;
-}
-
-.label-primary[href]:hover,
-.label-primary[href]:focus {
- background-color: #286090;
-}
-
-.label-success {
- background-color: #7bcc3a;
-}
-
-.label-success[href]:hover,
-.label-success[href]:focus {
- background-color: #63a82b;
-}
-
-.label-info {
- background-color: #10a0de;
-}
-
-.label-info[href]:hover,
-.label-info[href]:focus {
- background-color: #0d7eae;
-}
-
-.label-warning {
- background-color: #ffd162;
-}
-
-.label-warning[href]:hover,
-.label-warning[href]:focus {
- background-color: #ffc22f;
-}
-
-.label-danger {
- background-color: #f74b4b;
-}
-
-.label-danger[href]:hover,
-.label-danger[href]:focus {
- background-color: #f51a1a;
-}
-
-.badge {
- display: inline-block;
- min-width: 10px;
- padding: 3px 7px;
- font-size: 14px;
- font-weight: bold;
- color: #fff;
- line-height: 1;
- vertical-align: baseline;
- white-space: nowrap;
- text-align: center;
- background-color: #fff;
- border-radius: 10px;
-}
-
-.badge:empty {
- display: none;
-}
-
-.btn .badge {
- position: relative;
- top: -1px;
-}
-
-.btn-xs .badge {
- top: 0;
- padding: 1px 5px;
-}
-
-a.badge:hover,
-a.badge:focus {
- color: #fff;
- text-decoration: none;
- cursor: pointer;
-}
-
-.list-group-item.active>.badge,
-.nav-pills>.active>a>.badge {
- color: #337ab7;
- background-color: #fff;
-}
-
-.list-group-item>.badge {
- float: right;
-}
-
-.list-group-item>.badge+.badge {
- margin-right: 5px;
-}
-
-.nav-pills>li>a>.badge {
- margin-left: 3px;
-}
-
-.jumbotron {
- padding: 30px 15px;
- margin-bottom: 30px;
- color: inherit;
- background-color: #fff;
-}
-
-.jumbotron h1,
-.jumbotron .h1 {
- color: inherit;
-}
-
-.jumbotron p {
- margin-bottom: 15px;
- font-size: 24px;
- font-weight: 200;
-}
-
-.jumbotron>hr {
- border-top-color: #e6e6e6;
-}
-
-.container .jumbotron,
-.container-fluid .jumbotron {
- border-radius: 6px;
-}
-
-.jumbotron .container {
- max-width: 100%;
-}
-
-@media screen and (min-width:768px) {
- .jumbotron {
- padding: 48px 0;
- }
-
- .container .jumbotron,
- .container-fluid .jumbotron {
- padding-left: 60px;
- padding-right: 60px;
- }
-
- .jumbotron h1,
- .jumbotron .h1 {
- font-size: 72px;
- }
-}
-
-.alert {
- padding: 15px;
- margin-bottom: 22px;
- 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,
-.alert-dismissible {
- padding-right: 35px;
-}
-
-.alert-dismissable .close,
-.alert-dismissible .close {
- position: relative;
- top: -2px;
- right: -21px;
- color: inherit;
-}
-
-.alert-success {
- background-color: #dff0d8;
- border-color: #d6e9c6;
- color: #7bcc3a;
-}
-
-.alert-success hr {
- border-top-color: #c9e2b3;
-}
-
-.alert-success .alert-link {
- color: #63a82b;
-}
-
-.alert-info {
- background-color: #d9edf7;
- border-color: #bce8f1;
- color: #10a0de;
-}
-
-.alert-info hr {
- border-top-color: #a6e1ec;
-}
-
-.alert-info .alert-link {
- color: #0d7eae;
-}
-
-.alert-warning {
- background-color: #fcf8e3;
- border-color: #faebcc;
- color: #ffd162;
-}
-
-.alert-warning hr {
- border-top-color: #f7e1b5;
-}
-
-.alert-warning .alert-link {
- color: #ffc22f;
-}
-
-.alert-danger {
- background-color: #f2dede;
- border-color: #ebccd1;
- color: #f74b4b;
-}
-
-.alert-danger hr {
- border-top-color: #e4b9c0;
-}
-
-.alert-danger .alert-link {
- color: #f51a1a;
-}
-
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-@-o-keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-@keyframes progress-bar-stripes {
- from {
- background-position: 40px 0;
- }
-
- to {
- background-position: 0 0;
- }
-}
-
-.progress {
- overflow: hidden;
- height: 22px;
- margin-bottom: 22px;
- 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: 14px;
- line-height: 22px;
- color: #fff;
- text-align: center;
- background-color: #337ab7;
- -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;
- -o-transition: width .6s ease;
- transition: width .6s ease;
-}
-
-.progress-striped .progress-bar,
-.progress-bar-striped {
- 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: -o-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);
- -webkit-background-size: 40px 40px;
- background-size: 40px 40px;
-}
-
-.progress.active .progress-bar,
-.progress-bar.active {
- -webkit-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: #7bcc3a;
-}
-
-.progress-striped .progress-bar-success {
- 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: -o-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: #10a0de;
-}
-
-.progress-striped .progress-bar-info {
- 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: -o-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-warning {
- background-color: #ffd162;
-}
-
-.progress-striped .progress-bar-warning {
- 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: -o-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: #f74b4b;
-}
-
-.progress-striped .progress-bar-danger {
- 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: -o-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 {
- margin-top: 15px;
-}
-
-.media:first-child {
- margin-top: 0;
-}
-
-.media-right,
-.media>.pull-right {
- padding-left: 10px;
-}
-
-.media-left,
-.media>.pull-left {
- padding-right: 10px;
-}
-
-.media-left,
-.media-right,
-.media-body {
- display: table-cell;
- vertical-align: top;
-}
-
-.media-middle {
- vertical-align: middle;
-}
-
-.media-bottom {
- vertical-align: bottom;
-}
-
-.media-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-
-.media-list {
- padding-left: 0;
- list-style: none;
-}
-
-.list-group {
- margin-bottom: 20px;
- padding-left: 0;
-}
-
-.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;
-}
-
-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;
- color: #555;
- background-color: #f5f5f5;
-}
-
-.list-group-item.disabled,
-.list-group-item.disabled:hover,
-.list-group-item.disabled:focus {
- background-color: #fff;
- color: #fff;
- cursor: not-allowed;
-}
-
-.list-group-item.disabled .list-group-item-heading,
-.list-group-item.disabled:hover .list-group-item-heading,
-.list-group-item.disabled:focus .list-group-item-heading {
- color: inherit;
-}
-
-.list-group-item.disabled .list-group-item-text,
-.list-group-item.disabled:hover .list-group-item-text,
-.list-group-item.disabled:focus .list-group-item-text {
- color: #fff;
-}
-
-.list-group-item.active,
-.list-group-item.active:hover,
-.list-group-item.active:focus {
- z-index: 2;
- color: #fff;
- background-color: #337ab7;
- border-color: #337ab7;
-}
-
-.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,
-.list-group-item.active .list-group-item-heading>small,
-.list-group-item.active:hover .list-group-item-heading>small,
-.list-group-item.active:focus .list-group-item-heading>small,
-.list-group-item.active .list-group-item-heading>.small,
-.list-group-item.active:hover .list-group-item-heading>.small,
-.list-group-item.active:focus .list-group-item-heading>.small {
- 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: #c7ddef;
-}
-
-.list-group-item-success {
- color: #7bcc3a;
- background-color: #dff0d8;
-}
-
-a.list-group-item-success {
- color: #7bcc3a;
-}
-
-a.list-group-item-success .list-group-item-heading {
- color: inherit;
-}
-
-a.list-group-item-success:hover,
-a.list-group-item-success:focus {
- color: #7bcc3a;
- background-color: #d0e9c6;
-}
-
-a.list-group-item-success.active,
-a.list-group-item-success.active:hover,
-a.list-group-item-success.active:focus {
- color: #fff;
- background-color: #7bcc3a;
- border-color: #7bcc3a;
-}
-
-.list-group-item-info {
- color: #10a0de;
- background-color: #d9edf7;
-}
-
-a.list-group-item-info {
- color: #10a0de;
-}
-
-a.list-group-item-info .list-group-item-heading {
- color: inherit;
-}
-
-a.list-group-item-info:hover,
-a.list-group-item-info:focus {
- color: #10a0de;
- background-color: #c4e3f3;
-}
-
-a.list-group-item-info.active,
-a.list-group-item-info.active:hover,
-a.list-group-item-info.active:focus {
- color: #fff;
- background-color: #10a0de;
- border-color: #10a0de;
-}
-
-.list-group-item-warning {
- color: #ffd162;
- background-color: #fcf8e3;
-}
-
-a.list-group-item-warning {
- color: #ffd162;
-}
-
-a.list-group-item-warning .list-group-item-heading {
- color: inherit;
-}
-
-a.list-group-item-warning:hover,
-a.list-group-item-warning:focus {
- color: #ffd162;
- background-color: #faf2cc;
-}
-
-a.list-group-item-warning.active,
-a.list-group-item-warning.active:hover,
-a.list-group-item-warning.active:focus {
- color: #fff;
- background-color: #ffd162;
- border-color: #ffd162;
-}
-
-.list-group-item-danger {
- color: #f74b4b;
- background-color: #f2dede;
-}
-
-a.list-group-item-danger {
- color: #f74b4b;
-}
-
-a.list-group-item-danger .list-group-item-heading {
- color: inherit;
-}
-
-a.list-group-item-danger:hover,
-a.list-group-item-danger:focus {
- color: #f74b4b;
- background-color: #ebcccc;
-}
-
-a.list-group-item-danger.active,
-a.list-group-item-danger.active:hover,
-a.list-group-item-danger.active:focus {
- color: #fff;
- background-color: #f74b4b;
- border-color: #f74b4b;
-}
-
-.list-group-item-heading {
- margin-top: 0;
- margin-bottom: 5px;
-}
-
-.list-group-item-text {
- margin-bottom: 0;
- line-height: 1.3;
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-}
-
-.embed-responsive .embed-responsive-item,
-.embed-responsive iframe,
-.embed-responsive embed,
-.embed-responsive object,
-.embed-responsive video {
- position: absolute;
- top: 0;
- left: 0;
- bottom: 0;
- height: 100%;
- width: 100%;
- border: 0;
-}
-
-.embed-responsive.embed-responsive-16by9 {
- padding-bottom: 56.25%;
-}
-
-.embed-responsive.embed-responsive-4by3 {
- padding-bottom: 75%;
-}
-
-.close {
- float: right;
- font-size: 24px;
- 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;
-}
-
-.modal {
- display: none;
- overflow: hidden;
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- -webkit-overflow-scrolling: touch;
- outline: 0;
-}
-
-.modal.fade .modal-dialog {
- -webkit-transform: translate(0, -25%);
- -ms-transform: translate(0, -25%);
- -o-transform: translate(0, -25%);
- transform: translate(0, -25%);
- -webkit-transition: -webkit-transform 0.3s ease-out;
- -o-transition: -o-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
-}
-
-.modal.in .modal-dialog {
- -webkit-transform: translate(0, 0);
- -ms-transform: translate(0, 0);
- -o-transform: translate(0, 0);
- transform: translate(0, 0);
-}
-
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto;
-}
-
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 10px;
-}
-
-.modal-content {
- position: relative;
- background-color: #fff;
- border: 1px solid #999;
- border: 1px solid rgba(0,0,0,0.2);
- border-radius: 6px;
- -webkit-box-shadow: 0 3px 9px rgba(0,0,0,0.5);
- box-shadow: 0 3px 9px rgba(0,0,0,0.5);
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- outline: 0;
-}
-
-.modal-backdrop {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- background-color: #000;
-}
-
-.modal-backdrop.fade {
- opacity: 0;
- filter: alpha(opacity=0);
-}
-
-.modal-backdrop.in {
- opacity: .5;
- filter: alpha(opacity=50);
-}
-
-.modal-header {
- padding: 15px;
- border-bottom: 1px solid #e5e5e5;
- min-height: 16.42857143px;
-}
-
-.modal-header .close {
- margin-top: -2px;
-}
-
-.modal-title {
- margin: 0;
- line-height: 1.42857143;
-}
-
-.modal-body {
- position: relative;
- padding: 15px;
-}
-
-.modal-footer {
- padding: 15px;
- text-align: right;
- border-top: 1px solid #e5e5e5;
-}
-
-.modal-footer .btn+.btn {
- margin-left: 5px;
- margin-bottom: 0;
-}
-
-.modal-footer .btn-group .btn+.btn {
- margin-left: -1px;
-}
-
-.modal-footer .btn-block+.btn-block {
- margin-left: 0;
-}
-
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll;
-}
-
-@media (min-width:768px) {
- .modal-dialog {
- width: 600px;
- margin: 30px auto;
- }
-
- .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);
- }
-
- .modal-sm {
- width: 300px;
- }
-}
-
-@media (min-width:992px) {
- .modal-lg {
- width: 900px;
- }
-}
-
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- visibility: visible;
- font-family: "Source Sans Pro",sans-serif;
- font-size: 14px;
- font-weight: normal;
- line-height: 1.4;
- opacity: 0;
- filter: alpha(opacity=0);
-}
-
-.tooltip.in {
- opacity: .9;
- filter: alpha(opacity=90);
-}
-
-.tooltip.top {
- margin-top: -3px;
- padding: 5px 0;
-}
-
-.tooltip.right {
- margin-left: 3px;
- padding: 0 5px;
-}
-
-.tooltip.bottom {
- margin-top: 3px;
- padding: 5px 0;
-}
-
-.tooltip.left {
- margin-left: -3px;
- padding: 0 5px;
-}
-
-.tooltip-inner {
- max-width: 200px;
- padding: 3px 8px;
- color: #000;
- text-align: center;
- text-decoration: none;
- background-color: #fff;
- border-radius: 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-width: 5px 5px 0;
- border-top-color: #fff;
-}
-
-.tooltip.top-left .tooltip-arrow {
- bottom: 0;
- right: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #fff;
-}
-
-.tooltip.top-right .tooltip-arrow {
- bottom: 0;
- left: 5px;
- margin-bottom: -5px;
- border-width: 5px 5px 0;
- border-top-color: #fff;
-}
-
-.tooltip.right .tooltip-arrow {
- top: 50%;
- left: 0;
- margin-top: -5px;
- border-width: 5px 5px 5px 0;
- border-right-color: #fff;
-}
-
-.tooltip.left .tooltip-arrow {
- top: 50%;
- right: 0;
- margin-top: -5px;
- border-width: 5px 0 5px 5px;
- border-left-color: #fff;
-}
-
-.tooltip.bottom .tooltip-arrow {
- top: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #fff;
-}
-
-.tooltip.bottom-left .tooltip-arrow {
- top: 0;
- right: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #fff;
-}
-
-.tooltip.bottom-right .tooltip-arrow {
- top: 0;
- left: 5px;
- margin-top: -5px;
- border-width: 0 5px 5px;
- border-bottom-color: #fff;
-}
-
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: none;
- max-width: 276px;
- padding: 1px;
- font-family: "Source Sans Pro",sans-serif;
- font-size: 16px;
- font-weight: normal;
- line-height: 1.42857143;
- text-align: left;
- background-color: #fff;
- -webkit-background-clip: padding-box;
- background-clip: padding-box;
- 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);
- white-space: normal;
-}
-
-.popover.top {
- margin-top: -10px;
-}
-
-.popover.right {
- margin-left: 10px;
-}
-
-.popover.bottom {
- margin-top: 10px;
-}
-
-.popover.left {
- margin-left: -10px;
-}
-
-.popover-title {
- margin: 0;
- padding: 8px 14px;
- font-size: 16px;
- 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 {
- left: 50%;
- margin-left: -11px;
- border-bottom-width: 0;
- border-top-color: #999;
- border-top-color: rgba(0,0,0,0.25);
- bottom: -11px;
-}
-
-.popover.top>.arrow:after {
- content: " ";
- bottom: 1px;
- margin-left: -10px;
- border-bottom-width: 0;
- border-top-color: #fff;
-}
-
-.popover.right>.arrow {
- top: 50%;
- left: -11px;
- margin-top: -11px;
- border-left-width: 0;
- border-right-color: #999;
- border-right-color: rgba(0,0,0,0.25);
-}
-
-.popover.right>.arrow:after {
- content: " ";
- left: 1px;
- bottom: -10px;
- border-left-width: 0;
- border-right-color: #fff;
-}
-
-.popover.bottom>.arrow {
- left: 50%;
- margin-left: -11px;
- border-top-width: 0;
- border-bottom-color: #999;
- border-bottom-color: rgba(0,0,0,0.25);
- top: -11px;
-}
-
-.popover.bottom>.arrow:after {
- content: " ";
- top: 1px;
- margin-left: -10px;
- border-top-width: 0;
- border-bottom-color: #fff;
-}
-
-.popover.left>.arrow {
- top: 50%;
- right: -11px;
- margin-top: -11px;
- border-right-width: 0;
- border-left-color: #999;
- border-left-color: rgba(0,0,0,0.25);
-}
-
-.popover.left>.arrow:after {
- content: " ";
- right: 1px;
- border-right-width: 0;
- border-left-color: #fff;
- bottom: -10px;
-}
-
-.carousel {
- position: relative;
-}
-
-.carousel-inner {
- position: relative;
- overflow: hidden;
- width: 100%;
-}
-
-.carousel-inner>.item {
- display: none;
- position: relative;
- -webkit-transition: .6s ease-in-out left;
- -o-transition: .6s ease-in-out left;
- transition: .6s ease-in-out left;
-}
-
-.carousel-inner>.item>img,
-.carousel-inner>.item>a>img {
- line-height: 1;
-}
-
-@media all and (transform-3d),(-webkit-transform-3d) {
- .carousel-inner>.item {
- -webkit-transition: -webkit-transform .6s ease-in-out;
- -o-transition: -o-transform .6s ease-in-out;
- transition: transform .6s ease-in-out;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000;
- perspective: 1000;
- }
-
- .carousel-inner>.item.next,
- .carousel-inner>.item.active.right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0);
- left: 0;
- }
-
- .carousel-inner>.item.prev,
- .carousel-inner>.item.active.left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0);
- left: 0;
- }
-
- .carousel-inner>.item.next.left,
- .carousel-inner>.item.prev.right,
- .carousel-inner>.item.active {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
- left: 0;
- }
-}
-
-.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;
- left: 0;
- bottom: 0;
- width: 15%;
- opacity: .5;
- filter: alpha(opacity=50);
- font-size: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0,0,0,0.6);
-}
-
-.carousel-control.left {
- background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);
- background-image: -o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);
- background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));
- 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 {
- left: auto;
- right: 0;
- background-image: -webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);
- background-image: -o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);
- background-image: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));
- 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 {
- outline: 0;
- 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-right {
- position: absolute;
- top: 50%;
- z-index: 5;
- display: inline-block;
-}
-
-.carousel-control .icon-prev,
-.carousel-control .glyphicon-chevron-left {
- left: 50%;
- margin-left: -10px;
-}
-
-.carousel-control .icon-next,
-.carousel-control .glyphicon-chevron-right {
- right: 50%;
- margin-right: -10px;
-}
-
-.carousel-control .icon-prev,
-.carousel-control .icon-next {
- width: 20px;
- height: 20px;
- margin-top: -10px;
- font-family: serif;
-}
-
-.carousel-control .icon-prev:before {
- content: '\2039';
-}
-
-.carousel-control .icon-next:before {
- content: '\203a';
-}
-
-.carousel-indicators {
- position: absolute;
- bottom: 10px;
- left: 50%;
- z-index: 15;
- width: 60%;
- margin-left: -30%;
- padding-left: 0;
- list-style: none;
- text-align: center;
-}
-
-.carousel-indicators li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 1px;
- text-indent: -999px;
- border: 1px solid #fff;
- border-radius: 10px;
- cursor: pointer;
- background-color: #000 \9;
- background-color: rgba(0,0,0,0);
-}
-
-.carousel-indicators .active {
- margin: 0;
- width: 12px;
- height: 12px;
- background-color: #fff;
-}
-
-.carousel-caption {
- position: absolute;
- left: 15%;
- right: 15%;
- bottom: 20px;
- z-index: 10;
- padding-top: 20px;
- padding-bottom: 20px;
- color: #fff;
- text-align: center;
- text-shadow: 0 1px 2px rgba(0,0,0,0.6);
-}
-
-.carousel-caption .btn {
- text-shadow: none;
-}
-
-@media screen and (min-width:768px) {
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-prev,
- .carousel-control .icon-next {
- width: 30px;
- height: 30px;
- margin-top: -15px;
- font-size: 30px;
- }
-
- .carousel-control .glyphicon-chevron-left,
- .carousel-control .icon-prev {
- margin-left: -15px;
- }
-
- .carousel-control .glyphicon-chevron-right,
- .carousel-control .icon-next {
- margin-right: -15px;
- }
-
- .carousel-caption {
- left: 20%;
- right: 20%;
- padding-bottom: 30px;
- }
-
- .carousel-indicators {
- bottom: 20px;
- }
-}
-
-.clearfix:before,
-.clearfix:after,
-.dl-horizontal dd:before,
-.dl-horizontal dd:after,
-.container:before,
-.container:after,
-.container-fluid:before,
-.container-fluid:after,
-.row:before,
-.row:after,
-.form-horizontal .form-group:before,
-.form-horizontal .form-group:after,
-.btn-toolbar:before,
-.btn-toolbar:after,
-.btn-group-vertical>.btn-group:before,
-.btn-group-vertical>.btn-group:after,
-.nav:before,
-.nav:after,
-.navbar:before,
-.navbar:after,
-.navbar-header:before,
-.navbar-header:after,
-.navbar-collapse:before,
-.navbar-collapse:after,
-.pager:before,
-.pager:after,
-.modal-footer:before,
-.modal-footer:after {
- content: " ";
- display: table;
-}
-
-.clearfix:after,
-.dl-horizontal dd:after,
-.container:after,
-.container-fluid:after,
-.row:after,
-.form-horizontal .form-group:after,
-.btn-toolbar:after,
-.btn-group-vertical>.btn-group:after,
-.nav:after,
-.navbar:after,
-.navbar-header:after,
-.navbar-collapse:after,
-.pager:after,
-.modal-footer:after {
- clear: both;
-}
-
-.center-block {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.pull-right {
- float: right !important;
-}
-
-.pull-left {
- float: left !important;
-}
-
-.hide {
- display: none !important;
-}
-
-.show {
- display: block !important;
-}
-
-.invisible {
- visibility: hidden;
-}
-
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.hidden {
- display: none !important;
- visibility: hidden !important;
-}
-
-.affix {
- position: fixed;
-}
-
-@-ms-viewport {
- width: device-width;
-}
-
-.visible-xs,
-.visible-sm,
-.visible-md,
-.visible-lg {
- display: none !important;
-}
-
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block {
- display: none !important;
-}
-
-@media (max-width:767px) {
- .visible-xs {
- display: block !important;
- }
-
- table.visible-xs {
- display: table;
- }
-
- tr.visible-xs {
- display: table-row !important;
- }
-
- th.visible-xs,
- td.visible-xs {
- display: table-cell !important;
- }
-}
-
-@media (max-width:767px) {
- .visible-xs-block {
- display: block !important;
- }
-}
-
-@media (max-width:767px) {
- .visible-xs-inline {
- display: inline !important;
- }
-}
-
-@media (max-width:767px) {
- .visible-xs-inline-block {
- display: inline-block !important;
- }
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .visible-sm {
- display: block !important;
- }
-
- table.visible-sm {
- display: table;
- }
-
- tr.visible-sm {
- display: table-row !important;
- }
-
- th.visible-sm,
- td.visible-sm {
- display: table-cell !important;
- }
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .visible-sm-block {
- display: block !important;
- }
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .visible-sm-inline {
- display: inline !important;
- }
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .visible-sm-inline-block {
- display: inline-block !important;
- }
-}
-
-@media (min-width:992px) and (max-width:1199px) {
- .visible-md {
- display: block !important;
- }
-
- table.visible-md {
- display: table;
- }
-
- tr.visible-md {
- display: table-row !important;
- }
-
- th.visible-md,
- td.visible-md {
- display: table-cell !important;
- }
-}
-
-@media (min-width:992px) and (max-width:1199px) {
- .visible-md-block {
- display: block !important;
- }
-}
-
-@media (min-width:992px) and (max-width:1199px) {
- .visible-md-inline {
- display: inline !important;
- }
-}
-
-@media (min-width:992px) and (max-width:1199px) {
- .visible-md-inline-block {
- display: inline-block !important;
- }
-}
-
-@media (min-width:1200px) {
- .visible-lg {
- display: block !important;
- }
-
- table.visible-lg {
- display: table;
- }
-
- tr.visible-lg {
- display: table-row !important;
- }
-
- th.visible-lg,
- td.visible-lg {
- display: table-cell !important;
- }
-}
-
-@media (min-width:1200px) {
- .visible-lg-block {
- display: block !important;
- }
-}
-
-@media (min-width:1200px) {
- .visible-lg-inline {
- display: inline !important;
- }
-}
-
-@media (min-width:1200px) {
- .visible-lg-inline-block {
- display: inline-block !important;
- }
-}
-
-@media (max-width:767px) {
- .hidden-xs {
- display: none !important;
- }
-}
-
-@media (min-width:768px) and (max-width:991px) {
- .hidden-sm {
- display: none !important;
- }
-}
-
-@media (min-width:992px) and (max-width:1199px) {
- .hidden-md {
- display: none !important;
- }
-}
-
-@media (min-width:1200px) {
- .hidden-lg {
- display: none !important;
- }
-}
-
-.visible-print {
- display: none !important;
-}
-
-@media print {
- .visible-print {
- display: block !important;
- }
-
- table.visible-print {
- display: table;
- }
-
- tr.visible-print {
- display: table-row !important;
- }
-
- th.visible-print,
- td.visible-print {
- display: table-cell !important;
- }
-}
-
-.visible-print-block {
- display: none !important;
-}
-
-@media print {
- .visible-print-block {
- display: block !important;
- }
-}
-
-.visible-print-inline {
- display: none !important;
-}
-
-@media print {
- .visible-print-inline {
- display: inline !important;
- }
-}
-
-.visible-print-inline-block {
- display: none !important;
-}
-
-@media print {
- .visible-print-inline-block {
- display: inline-block !important;
- }
-}
-
-@media print {
- .hidden-print {
- display: none !important;
- }
-}
-
-.icon-truck:before {
- content: '\e800';
-}
-
-/* '' */
-
-.icon-database:before {
- content: '\e801';
-}
-
-/* '' */
-
-.icon-mining:before {
- content: '\e802';
-}
-
-/* '' */
-
-.icon-check:before {
- content: '\e803';
-}
-
-/* '' */
-
-.icon-cancel:before {
- content: '\e804';
-}
-
-/* '' */
-
-.icon-loader:before {
- content: '\e805';
-}
-
-/* '' */
-
-.icon-check-o:before {
- content: '\e806';
-}
-
-/* '' */
-
-.icon-cancel-o:before {
- content: '\e807';
-}
-
-/* '' */
-
-.icon-warning-o:before {
- content: '\e808';
-}
-
-/* '' */
-
-.icon-network:before {
- content: '\e809';
-}
-
-/* '' */
-
-.icon-block:before {
- content: '\e80a';
-}
-
-/* '' */
-
-.icon-bulb:before {
- content: '\e80b';
-}
-
-/* '' */
-
-.icon-node:before {
- content: '\e80c';
-}
-
-/* '' */
-
-.icon-laptop:before {
- content: '\e80d';
-}
-
-/* '' */
-
-.icon-time:before {
- content: '\e80e';
-}
-
-/* '' */
-
-.icon-clock:before {
- content: '\e80f';
-}
-
-/* '' */
-
-.icon-group:before {
- content: '\e810';
-}
-
-/* '' */
-
-.icon-gas:before {
- content: '\e811';
-}
-
-/* '' */
-
-.icon-difficulty:before {
- content: '\e812';
-}
-
-/* '' */
-
-.icon-uncle:before {
- content: '\e813';
-}
-
-/* '' */
-
-.icon-hashrate:before {
- content: '\e814';
-}
-
-/* '' */
-
-.icon-gasprice:before {
- content: '\e815';
-}
-
-/* '' */
-
-@font-face {
- font-family: 'minimal-icons';
- src: url('/fonts/minimal-icons.eot?59779169');
- src: url('/fonts/minimal-icons.eot?59779169') format('embedded-opentype'),
- url('/fonts/minimal-icons.svg?59779169') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
-@font-face {
- font-family: 'minimal-icons';
- src: url('data:application/octet-stream;base64,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') format('woff'),
- url('data:application/octet-stream;base64,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ABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype');
-}
-
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'minimal-icons';
- src: url('../fonts/minimal-icons.svg?59779169#minimal-icons') format('svg');
- }
-}
-*/
-
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
- font-family: "minimal-icons";
- font-style: normal;
- font-weight: normal;
- speak: none;
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-truck:before {
- content: '\e800';
-}
-
-/* '' */
-
-.icon-database:before {
- content: '\e801';
-}
-
-/* '' */
-
-.icon-mining:before {
- content: '\e802';
-}
-
-/* '' */
-
-.icon-check:before {
- content: '\e803';
-}
-
-/* '' */
-
-.icon-cancel:before {
- content: '\e804';
-}
-
-/* '' */
-
-.icon-loader:before {
- content: '\e805';
-}
-
-/* '' */
-
-.icon-check-o:before {
- content: '\e806';
-}
-
-/* '' */
-
-.icon-cancel-o:before {
- content: '\e807';
-}
-
-/* '' */
-
-.icon-warning-o:before {
- content: '\e808';
-}
-
-/* '' */
-
-.icon-network:before {
- content: '\e809';
-}
-
-/* '' */
-
-.icon-block:before {
- content: '\e80a';
-}
-
-/* '' */
-
-.icon-bulb:before {
- content: '\e80b';
-}
-
-/* '' */
-
-.icon-node:before {
- content: '\e80c';
-}
-
-/* '' */
-
-.icon-laptop:before {
- content: '\e80d';
-}
-
-/* '' */
-
-.icon-time:before {
- content: '\e80e';
-}
-
-/* '' */
-
-.icon-clock:before {
- content: '\e80f';
-}
-
-/* '' */
-
-.icon-group:before {
- content: '\e810';
-}
-
-/* '' */
-
-.icon-gas:before {
- content: '\e811';
-}
-
-/* '' */
-
-.icon-difficulty:before {
- content: '\e812';
-}
-
-/* '' */
-
-.icon-uncle:before {
- content: '\e813';
-}
-
-/* '' */
-
-.icon-hashrate:before {
- content: '\e814';
-}
-
-/* '' */
-
-.icon-gasprice:before {
- content: '\e815';
-}
-
-/* '' */
-
-.icon-truck {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-database {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-mining {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-check {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-cancel {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-loader {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-check-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-cancel-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-warning-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-network {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-block {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-bulb {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-node {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-laptop {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-time {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-clock {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-group {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-gas {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-difficulty {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-uncle {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-hashrate {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-gasprice {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-[class^="icon-"],
-[class*=" icon-"] {
- font-family: 'minimal-icons';
- font-style: normal;
- font-weight: normal;
- /* fix buttons height */
- line-height: 1em;
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
-}
-
-.icon-truck {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-database {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-mining {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-check {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-cancel {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-loader {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-check-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-cancel-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-warning-o {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-network {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-block {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-bulb {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-node {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-laptop {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-time {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-clock {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-group {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-gas {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-difficulty {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-uncle {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-hashrate {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-.icon-gasprice {
- *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' ');
-}
-
-@font-face {
- font-family: 'minimal-icons';
- src: url('/fonts/minimal-icons.eot?7541141');
- src: url('/fonts/minimal-icons.eot?7541141') format('embedded-opentype'),
- url('/fonts/minimal-icons.woff?7541141') format('woff'),
- url('/fonts/minimal-icons.ttf?7541141') format('truetype'),
- url('/fonts/minimal-icons.svg?7541141') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
-/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
-
-/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
-
-/*
-@media screen and (-webkit-min-device-pixel-ratio:0) {
- @font-face {
- font-family: 'minimal-icons';
- src: url('../fonts/minimal-icons.svg?7541141#minimal-icons') format('svg');
- }
-}
-*/
-
-[class^="icon-"]:before,
-[class*=" icon-"]:before {
- font-family: "minimal-icons";
- font-style: normal;
- font-weight: normal;
- speak: none;
- display: inline-block;
- text-decoration: inherit;
- width: 1em;
- margin-right: .2em;
- text-align: center;
- /* opacity: .8; */
- /* For safety - reset parent styles, that can break glyph codes*/
- font-variant: normal;
- text-transform: none;
- /* fix buttons height, for twitter bootstrap */
- line-height: 1em;
- /* Animation center compensation - margins should be symmetric */
- /* remove if not needed */
- margin-left: .2em;
- /* you can be more comfortable with increased icons size */
- /* font-size: 120%; */
- /* Font smoothing. That was taken from TWBS */
- /*-webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;*/
- /* Uncomment for 3D effect */
- /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
-}
-
-.icon-truck:before {
- content: '\e800';
-}
-
-/* '' */
-
-.icon-database:before {
- content: '\e801';
-}
-
-/* '' */
-
-.icon-mining:before {
- content: '\e802';
-}
-
-/* '' */
-
-.icon-check:before {
- content: '\e803';
-}
-
-/* '' */
-
-.icon-cancel:before {
- content: '\e804';
-}
-
-/* '' */
-
-.icon-loader:before {
- content: '\e805';
-}
-
-/* '' */
-
-.icon-check-o:before {
- content: '\e806';
-}
-
-/* '' */
-
-.icon-cancel-o:before {
- content: '\e807';
-}
-
-/* '' */
-
-.icon-warning-o:before {
- content: '\e808';
-}
-
-/* '' */
-
-.icon-network:before {
- content: '\e809';
-}
-
-/* '' */
-
-.icon-block:before {
- content: '\e80a';
-}
-
-/* '' */
-
-.icon-bulb:before {
- content: '\e80b';
-}
-
-/* '' */
-
-.icon-node:before {
- content: '\e80c';
-}
-
-/* '' */
-
-.icon-laptop:before {
- content: '\e80d';
-}
-
-/* '' */
-
-.icon-time:before {
- content: '\e80e';
-}
-
-/* '' */
-
-.icon-clock:before {
- content: '\e80f';
-}
-
-/* '' */
-
-.icon-group:before {
- content: '\e810';
-}
-
-/* '' */
-
-.icon-gas:before {
- content: '\e811';
-}
-
-/* '' */
-
-.icon-difficulty:before {
- content: '\e812';
-}
-
-/* '' */
-
-.icon-uncle:before {
- content: '\e813';
-}
-
-/* '' */
-
-.icon-hashrate:before {
- content: '\e814';
-}
-
-/* '' */
-
-.icon-gasprice:before {
- content: '\e815';
-}
-
-/* '' */
-
-html {
- width: 100%;
-}
-
-body {
- width: 100%;
- min-width: 1900px;
- font-smooth: auto;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
-}
-
-table td {
- font-size: 14px;
- white-space: nowrap !important;
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
-}
-
-.propagationBox {
- position: relative;
- width: 8px;
- height: 8px;
- float: left;
- top: 5px;
- margin-right: 5px;
- -webkit-border-radius: 2px;
- border-radius: 2px;
-}
-
-.bg-success,
-.text-success .propagationBox {
- background: #7bcc3a;
-}
-
-.bg-info,
-.text-info .propagationBox {
- background: #10a0de;
-}
-
-.bg-warning,
-.text-warning .propagationBox {
- background: #FFD162;
-}
-
-.bg-orange,
-.text-orange .propagationBox {
- background: #ff8a00;
-}
-
-.bg-danger,
-.text-danger .propagationBox {
- background: #F74B4B;
-}
-
-.text-gray .propagationBox {
- background: none !important;
- border: 1px solid #777;
-}
-
-.bg-success,
-.bg-info,
-.bg-warning,
-.bg-orange,
-.bg-danger {
- color: #000;
-}
-
-.text-gray {
- color: #777 !important;
-}
-
-.text-orange {
- color: #ff8a00;
-}
-
-.container-fluid {
- padding-left: 30px;
- padding-right: 30px;
-}
-
-.stat-holder {
- background: #090909;
- border: 1px solid rgba(255,255,255,0.05);
-}
-
-.big-info {
- padding-top: 15px;
- padding-bottom: 15px;
-}
-
-.big-info .icon-full-width i {
- display: block;
- width: 85px;
- height: 70px;
- font-size: 70px;
- line-height: 70px;
- margin-right: 15px;
- margin-left: -15px;
-}
-
-.big-info span.small-title,
-.big-info div.small-title-miner {
- display: block;
-}
-
-span.small-title,
-div.small-title-miner {
- font-weight: 700;
- font-size: 14px;
- line-height: 20px;
- letter-spacing: 1px;
- text-transform: uppercase;
- color: #aaa;
-}
-
-span.small-title span.small {
- font-size: 11px;
- font-weight: 600;
- line-height: 16px;
- letter-spacing: 0px;
- color: #666;
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
-}
-
-.big-info .big-details {
- display: block;
- font-weight: 200;
- font-size: 50px;
- line-height: 55px;
- letter-spacing: -4px;
- word-spacing: nowrap !important;
-}
-
-.big-info .big-details .small-hash {
- font-size: 87%;
-}
-
-.big-info .big-details-holder {
- position: absolute;
- top: 15px;
- left: 99px;
-}
-
-.big-info.chart {
- padding-top: 12px;
-}
-
-.big-info.chart .big-details {
- display: block;
- position: absolute;
- top: 40px;
-}
-
-.big-info.chart {
- height: 120px;
- -webkit-box-sizing: border-box
- box-sizing: border-box;
-}
-
-.big-info.chart.double-chart {
- height: 242px;
-}
-
-.blocks-holder {
- width: 288px;
- padding-top: 6px;
- margin-left: -2px;
-}
-
-.blocks-holder {
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
-}
-
-.blocks-holder div.small-title-miner {
- font-family: "Lucida Console", "Courier New", Courier, monospace;
- font-size: 11px;
- letter-spacing: -0.1px;
- text-transform: none;
- white-space: nowrap;
- color: #777;
-}
-
-.blocks-holder .block-count {
- font-family: 'Lucida Console', "Courier New", Courier, monospace;
- font-weight: bold;
- font-size: 10px;
- padding-top: 3px;
- float: right;
-}
-
-.blocks-holder .block {
- width: 6px;
- height: 6px;
- margin: 2px 1px 6px 0px;
- float: left;
- -webkit-border-radius: 1px;
- border-radius: 1px;
- opacity: .8;
-}
-
-.blocks-holder .block:first-child {
- margin-left: 0px;
-}
-
-.blocks-holder .block:last-child {
- margin-right: 0px;
-}
-
-.second-row .box {
- height: 40px;
- line-height: 24px !important;
- padding: 5px 15px;
-}
-
-.second-row .box i,
-.big-info.chart i {
- position: relative;
- top: 2px;
- left: -3px;
- font-size: 24px;
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
- margin-right: 7px;
- float: left;
-}
-
-.big-info.chart i {
- font-size: 24px;
- top: -2px;
-}
-
-.small-value {
- font-weight: 300;
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
- float: right;
-}
-
-.second-row .box .small-value {
- float: right;
-}
-
-.big-info .small-value {
- position: absolute;
- right: 14px;
- top: 10px;
-}
-
-table i {
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
-}
-
-table th,
-table td {
- border-color: #222 !important;
-}
-
-table td {
- line-height: 18px !important;
-}
-
-table th {
- color: #888;
-}
-
-table th i {
- line-height: 1em;
- font-size: 20px;
-}
-
-table td i {
- position: relative;
- top: 2px;
- left: 2px;
-}
-
-table td.peerPropagationChart {
- padding: 4px 5px !important;
-}
-
-nodepropagchart {
- display: inline-block;
- width: 107px;
- height: 20px;
- vertical-align: top;
-}
-
-.table>tbody>tr>td,
-.table>thead>tr>th {
- padding: 5px;
-}
-
-.th-nodecheck,
-.td-nodecheck {
- width: 38px;
- text-align: center;
-}
-
-.td-nodecheck i {
- left: 0px;
-}
-
-.th-nodename {
- width: 300px;
- text-overflow: ellipsis;
-}
-
-.th-nodetype {
- width: 220px;
-}
-
-.th-latency {
- width: 100px;
-}
-
-.th-blockhash {
- width: 150px;
-}
-
-.th-blocktime {
- width: 110px;
-}
-
-.th-peerPropagationTime {
- width: 120px;
-}
-
-.th-peerPropagationChart {
- width: 140px;
-}
-
-.nodeInfo .tooltip .tooltip-inner {
- max-width: 400px;
- text-align: left;
- font-size: 12px;
-}
-
-.map-holder {
- padding: 0;
-}
-
-#mapHolder {
- position: relative;
- display: block;
- width: 100%;
- height: 282px;
- overflow: hidden;
-}
-
-#mapHolder > svg {
- right: 0;
- bottom: 0;
- width: 100%;
- height: 100%;
- display: inline-block;
- position: absolute;
- top: 0;
- left: 0;
-}
-
-.jqsfield {
- position: relative;
- padding: 5px 0;
- width: auto;
- left: -50%;
- word-wrap: wrap;
- text-align: center;
-}
-
-.d3-tip {
- padding: 5px 0;
-}
-
-.jqsfield .tooltip-arrow {
- position: absolute;
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- border-width: 5px 5px 0;
- border-top-color: #fff;
-}
-
-.datamaps-hoverover .tooltip-arrow,
-.d3-tip .tooltip-arrow {
- position: absolute;
- top: -5px;
- left: 0px;
- margin-left: -5px;
- border-width: 0px 5px 5px 5px;
- border-bottom-color: #fff;
-}
-
-.d3-tip .tooltip-arrow {
- top: 0px;
- left: 50%;
-}
-
-.hoverinfo {
- position: relative;
- width: auto;
- left: -50%;
- text-align: center;
- color: #333;
- border: none !important;
- box-shadow: none !important;
- border-radius: 3px !important;
- padding: 5px !important;
- line-height: 14px !important;
-}
-
-.hoverinfo .propagationBox {
- top: 3px;
-}
-
-svg {
- overflow: visible !important;
-}
-
-svg .bars .bar {
- opacity: 1;
- shape-rendering: auto;
-}
-
-svg .bars .handle {
- opacity: 0;
-}
-
-svg .bars .highlight {
- opacity: 0;
-}
-
-svg .bars g:hover .highlight {
- opacity: 1;
-}
-
-svg .line {
- fill: none;
- stroke: #ff0000;
- stroke-width: 1.3px;
- stroke-linejoin: round;
- stroke-linecap: round;
- shape-rendering: geometric-precision;
- /*-webkit-svg-shadow: 0 0 7px #fff;*/
-}
-
-svg .bar text {
- text-anchor: end;
- font-size: 12px;
-}
-
-svg .axis path,
-svg .axis line {
- fill: none;
- stroke: rgba(255,255,255,0.15);
- shape-rendering: crispEdges;
-}
-
-svg .axis text {
- fill: #777;
- font-size: 10px;
- letter-spacing: 0px;
- font-family: "Source Sans Pro";
- font-weight: 700;
- -webkit-font-smoothing: subpixel-antialiased;
- -moz-osx-font-smoothing: auto;
-}
-
-svg .y.axis .tick:first-child text {
- opacity: 0;
-}
-
-.toast-title {
- font-weight: 700;
-}
-
-.toast-message {
- -ms-word-wrap: break-word;
- word-wrap: break-word;
-}
-
-.toast-message a,
-.toast-message label {
- color: #fff;
-}
-
-.toast-message a:hover {
- color: #ccc;
- text-decoration: none;
-}
-
-.toast-close-button {
- position: relative;
- right: -.3em;
- top: -.3em;
- float: right;
- font-size: 20px;
- font-weight: 700;
- color: #fff;
- -webkit-text-shadow: 0 1px 0 #fff;
- text-shadow: 0 1px 0 #fff;
- opacity: .8;
- -ms-filter: alpha(Opacity=80);
- filter: alpha(opacity=80);
-}
-
-.toast-close-button:focus,
-.toast-close-button:hover {
- color: #000;
- text-decoration: none;
- cursor: pointer;
- opacity: .4;
- -ms-filter: alpha(Opacity=40);
- filter: alpha(opacity=40);
-}
-
-button.toast-close-button {
- padding: 0;
- cursor: pointer;
- background: 0 0;
- border: 0;
- -webkit-appearance: none;
-}
-
-.toast-top-center {
- top: 0;
- right: 0;
- width: 100%;
-}
-
-.toast-bottom-center {
- bottom: 0;
- right: 0;
- width: 100%;
-}
-
-.toast-top-full-width {
- top: 0;
- right: 0;
- width: 100%;
-}
-
-.toast-bottom-full-width {
- bottom: 0;
- right: 0;
- width: 100%;
-}
-
-.toast-top-left {
- top: 12px;
- left: 12px;
-}
-
-.toast-top-right {
- top: 12px;
- right: 12px;
-}
-
-.toast-bottom-right {
- right: 12px;
- bottom: 12px;
-}
-
-.toast-bottom-left {
- bottom: 12px;
- left: 12px;
-}
-
-#toast-container {
- position: fixed;
- z-index: 999999;
-}
-
-#toast-container * {
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
-}
-
-#toast-container>div {
- position: relative;
- overflow: hidden;
- margin: 0 0 6px;
- padding: 15px 15px 15px 50px;
- width: 300px;
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
- background-position: 15px center;
- background-repeat: no-repeat;
- -moz-box-shadow: 0 0 12px #999;
- -webkit-box-shadow: 0 0 12px #999;
- box-shadow: 0 0 12px #999;
- color: #fff;
- opacity: .8;
- -ms-filter: alpha(Opacity=80);
- filter: alpha(opacity=80);
-}
-
-#toast-container>:hover {
- -moz-box-shadow: 0 0 12px #000;
- -webkit-box-shadow: 0 0 12px #000;
- box-shadow: 0 0 12px #000;
- opacity: 1;
- -ms-filter: alpha(Opacity=100);
- filter: alpha(opacity=100);
- cursor: pointer;
-}
-
-#toast-container>.toast-info {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important;
-}
-
-#toast-container>.toast-error {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important;
-}
-
-#toast-container>.toast-success {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important;
-}
-
-#toast-container>.toast-warning {
- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important;
-}
-
-#toast-container.toast-bottom-center>div,
-#toast-container.toast-top-center>div {
- width: 300px;
- margin: auto;
-}
-
-#toast-container.toast-bottom-full-width>div,
-#toast-container.toast-top-full-width>div {
- width: 96%;
- margin: auto;
-}
-
-.toast {
- background-color: #030303;
-}
-
-.toast-success {
- background-color: #51a351;
-}
-
-.toast-error {
- background-color: #bd362f;
-}
-
-.toast-info {
- background-color: #2f96b4;
-}
-
-.toast-warning {
- background-color: #f89406;
-}
-
-.toast-progress {
- position: absolute;
- left: 0;
- bottom: 0;
- height: 4px;
- background-color: #000;
- opacity: .4;
- -ms-filter: alpha(Opacity=40);
- filter: alpha(opacity=40);
-}
-
-@media all and (max-width:240px) {
- #toast-container>div {
- padding: 8px 8px 8px 50px;
- width: 11em;
- }
-
- #toast-container .toast-close-button {
- right: -.2em;
- top: -.2em;
- }
-}
-
-@media all and (min-width:241px) and (max-width:480px) {
- #toast-container>div {
- padding: 8px 8px 8px 50px;
- width: 18em;
- }
-
- #toast-container .toast-close-button {
- right: -.2em;
- top: -.2em;
- }
-}
-
-@media all and (min-width:481px) and (max-width:768px) {
- #toast-container>div {
- padding: 15px 15px 15px 50px;
- width: 25em;
- }
-}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css.map b/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css.map
deleted file mode 100644
index 477da92..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/76a7bab845d191184a9124b7dd8a3472c9b4aa7e.css.map
+++ /dev/null
@@ -1,2 +0,0 @@
-)]}'
-{"version":3,"sources":["client/css/animation.css","client/css/bootstrap.min.css","client/css/minimal-icons-codes.css","client/css/minimal-icons-embedded.css","client/css/minimal-icons-ie7-codes.css","client/css/minimal-icons-ie7.css","client/css/minimal-icons.css","client/css/style.css","client/css/toastr.min.css"],"names":[],"mappings":"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","file":"generated.css","sourcesContent":["/*\n Animation example, for spinners\n*/\n.animate-spin {\n -moz-animation: spin 2s infinite linear;\n -o-animation: spin 2s infinite linear;\n -webkit-animation: spin 2s infinite linear;\n animation: spin 2s infinite linear;\n display: inline-block;\n}\n@-moz-keyframes spin {\n 0% {\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -moz-transform: rotate(359deg);\n -o-transform: rotate(359deg);\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@-webkit-keyframes spin {\n 0% {\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -moz-transform: rotate(359deg);\n -o-transform: rotate(359deg);\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@-o-keyframes spin {\n 0% {\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -moz-transform: rotate(359deg);\n -o-transform: rotate(359deg);\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@-ms-keyframes spin {\n 0% {\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -moz-transform: rotate(359deg);\n -o-transform: rotate(359deg);\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n@keyframes spin {\n 0% {\n -moz-transform: rotate(0deg);\n -o-transform: rotate(0deg);\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n\n 100% {\n -moz-transform: rotate(359deg);\n -o-transform: rotate(359deg);\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n","/*!\n * Bootstrap v3.3.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*!\n * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cf8e15f9354657212a08)\n * Config saved to config.json and https://gist.github.com/cf8e15f9354657212a08\n *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=\"button\"],input[type=\"reset\"],input[type=\"submit\"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=\"checkbox\"],input[type=\"radio\"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=\"number\"]::-webkit-inner-spin-button,input[type=\"number\"]::-webkit-outer-spin-button{height:auto}input[type=\"search\"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=\"search\"]::-webkit-search-cancel-button,input[type=\"search\"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"#\"]:after,a[href^=\"javascript:\"]: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}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff !important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:\"Source Sans Pro\",sans-serif;font-size:16px;line-height:1.42857143;color:#fff;background-color:#000}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#000;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border:0;border-top:1px solid #fff}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:200;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,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:#fff}h1,.h1,h2,.h2,h3,.h3{margin-top:22px;margin-bottom:11px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:11px;margin-bottom:11px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:41px}h2,.h2{font-size:34px}h3,.h3{font-size:28px}h4,.h4{font-size:20px}h5,.h5{font-size:16px}h6,.h6{font-size:14px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:18px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:24px}}small,.small{font-size:87%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#fff}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#7bcc3a}a.text-success:hover{color:#63a82b}.text-info{color:#10a0de}a.text-info:hover{color:#0d7eae}.text-warning{color:#ffd162}a.text-warning:hover{color:#ffc22f}.text-danger{color:#f74b4b}a.text-danger:hover{color:#f51a1a}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #fff}ul,ol{margin-top:0;margin-bottom:11px}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;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:22px}dt,dd{line-height:1.42857143}dt{font-weight:bold}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #fff}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:11px 22px;margin:0 0 22px;font-size:20px;border-left:5px solid #fff}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#fff}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\\2014 \\00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #fff;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\\00A0 \\2014'}address{margin-bottom:22px;font-style:normal;line-height:1.42857143}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right: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, .col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#fff;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:22px}.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.42857143;vertical-align:top;border-top:1px solid #333}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #333}.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 #333}.table .table{background-color:#000}.table-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 #333}.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 #333}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd){background-color:#050505}.table-hover>tbody>tr:hover{background-color:#0a0a0a}table col[class*=\"col-\"]{position:static;float:none;display:table-column}table td[class*=\"col-\"],table th[class*=\"col-\"]{position:static;float:none;display:table-cell}.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.active>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:#0a0a0a}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#000}.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}.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:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.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}.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:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.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,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.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:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #333}.table-responsive>.table{margin-bottom:0}.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>td: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>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.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;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:22px;font-size:24px;line-height:inherit;color:#fff;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;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}input[type=\"range\"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=\"file\"]:focus,input[type=\"radio\"]:focus,input[type=\"checkbox\"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:16px;line-height:1.42857143;color:#fff}.form-control{display:block;width:100%;height:36px;padding:6px 12px;font-size:16px;line-height:1.42857143;color:#fff;background-color:#fff;background-image:none;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 ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s, box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#fff;opacity:1}textarea.form-control{height:auto}input[type=\"search\"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=\"date\"],input[type=\"time\"],input[type=\"datetime-local\"],input[type=\"month\"]{line-height:36px}input[type=\"date\"].input-sm,input[type=\"time\"].input-sm,input[type=\"datetime-local\"].input-sm,input[type=\"month\"].input-sm{line-height:33px}input[type=\"date\"].input-lg,input[type=\"time\"].input-lg,input[type=\"datetime-local\"].input-lg,input[type=\"month\"].input-lg{line-height:49px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:22px;padding-left:20px;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\"]{position:absolute;margin-left:-20px;margin-top:4px \\9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=\"radio\"][disabled],input[type=\"checkbox\"][disabled],input[type=\"radio\"].disabled,input[type=\"checkbox\"].disabled,fieldset[disabled] input[type=\"radio\"],fieldset[disabled] input[type=\"checkbox\"]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm,.form-group-sm .form-control{height:33px;padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}select.input-sm,select.form-group-sm .form-control{height:33px;line-height:33px}textarea.input-sm,textarea.form-group-sm .form-control,select[multiple].input-sm,select[multiple].form-group-sm .form-control{height:auto}.input-lg,.form-group-lg .form-control{height:49px;padding:10px 16px;font-size:20px;line-height:1.33;border-radius:6px}select.input-lg,select.form-group-lg .form-control{height:49px;line-height:49px}textarea.input-lg,textarea.form-group-lg .form-control,select[multiple].input-lg,select[multiple].form-group-lg .form-control{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:49px;height:49px;line-height:49px}.input-sm+.form-control-feedback{width:33px;height:33px;line-height:33px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#7bcc3a}.has-success .form-control{border-color:#7bcc3a;-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:#63a82b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b1e18b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #b1e18b}.has-success .input-group-addon{color:#7bcc3a;border-color:#7bcc3a;background-color:#dff0d8}.has-success .form-control-feedback{color:#7bcc3a}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#ffd162}.has-warning .form-control{border-color:#ffd162;-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-warning .form-control:focus{border-color:#ffc22f;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefc8;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ffefc8}.has-warning .input-group-addon{color:#ffd162;border-color:#ffd162;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#ffd162}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#f74b4b}.has-error .form-control{border-color:#f74b4b;-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:#f51a1a;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fbadad;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #fbadad}.has-error .input-group-addon{color:#f74b4b;border-color:#f74b4b;background-color:#f2dede}.has-error .form-control-feedback{color:#f74b4b}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#fff}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=\"radio\"],.form-inline .checkbox input[type=\"checkbox\"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:16px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-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{cursor:not-allowed;pointer-events:none;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.focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;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.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.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:hover,.btn-primary:focus,.btn-primary.focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.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.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:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#7bcc3a;border-color:#6fbc31}.btn-success:hover,.btn-success:focus,.btn-success.focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#63a82b;border-color:#528b24}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.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.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:#7bcc3a;border-color:#6fbc31}.btn-success .badge{color:#7bcc3a;background-color:#fff}.btn-info{color:#fff;background-color:#10a0de;border-color:#0e8fc6}.btn-info:hover,.btn-info:focus,.btn-info.focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#0d7eae;border-color:#0a668d}.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[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].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:#10a0de;border-color:#0e8fc6}.btn-info .badge{color:#10a0de;background-color:#fff}.btn-warning{color:#fff;background-color:#ffd162;border-color:#ffca48}.btn-warning:hover,.btn-warning:focus,.btn-warning.focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ffc22f;border-color:#ffb80b}.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.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:#ffd162;border-color:#ffca48}.btn-warning .badge{color:#ffd162;background-color:#fff}.btn-danger{color:#fff;background-color:#f74b4b;border-color:#f63333}.btn-danger:hover,.btn-danger:focus,.btn-danger.focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#f51a1a;border-color:#e10a0a}.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.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:#f74b4b;border-color:#f63333}.btn-danger .badge{color:#f74b4b;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.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:#23527c;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:#fff;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:20px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:14px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:14px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.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;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none;visibility:hidden}.collapse.in{display:block;visibility:visible}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height, visibility;-o-transition-property:height, visibility;transition-property:height, visibility;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.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;list-style:none;font-size:16px;text-align:left;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);-webkit-background-clip:padding-box;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#fff;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#f2f2f2;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#fff}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:14px;line-height:1.42857143;color:#fff;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;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{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.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+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-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-bottom-right-radius:0;border-top-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-bottom-right-radius:0;border-top-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>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.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,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.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-bottom-left-radius:4px;border-top-right-radius:0;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:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=\"buttons\"]>.btn input[type=\"radio\"],[data-toggle=\"buttons\"]>.btn-group>.btn input[type=\"radio\"],[data-toggle=\"buttons\"]>.btn input[type=\"checkbox\"],[data-toggle=\"buttons\"]>.btn-group>.btn input[type=\"checkbox\"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=\"col-\"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:49px;padding:10px 16px;font-size:20px;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:49px;line-height:49px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].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:33px;padding:5px 10px;font-size:14px;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:33px;line-height:33px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].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:16px;font-weight:normal;line-height:1;color:#fff;text-align:center;background-color:#fff;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:14px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:20px;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>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-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>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.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:#fff}.nav>li.disabled>a{color:#fff}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#fff;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#fff;border-color:#337ab7}.nav .nav-divider{height:1px;margin:10px 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.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#fff #fff #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#fff;background-color:#000;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@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:#000}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.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:#337ab7}.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{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@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:#000}}.tab-content>.tab-pane{display:none;visibility:hidden}.tab-content>.active{display:block;visibility:visible}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block !important;visibility:visible !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;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;z-index:1030}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:20px;line-height:22px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.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:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;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:22px}.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:14px;padding-bottom:14px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-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);margin-top:7px;margin-bottom:7px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=\"radio\"],.navbar-form .checkbox input[type=\"checkbox\"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom: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-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:7px;margin-bottom:7px}.navbar-btn.btn-sm{margin-top:8.5px;margin-bottom:8.5px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.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}.navbar-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:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@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-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#fff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#fff}.navbar-inverse .navbar-nav>li>a{color:#fff}.navbar-inverse .navbar-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{background-color:#080808;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 .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#fff}.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-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#fff}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#fff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.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:#fff}.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:#fff;background-color:#fff;cursor:not-allowed}.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}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#fff}.label-default[href]:hover,.label-default[href]:focus{background-color:#e6e6e6}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#7bcc3a}.label-success[href]:hover,.label-success[href]:focus{background-color:#63a82b}.label-info{background-color:#10a0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#0d7eae}.label-warning{background-color:#ffd162}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ffc22f}.label-danger{background-color:#f74b4b}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#f51a1a}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:14px;font-weight:bold;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#fff;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#fff}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:24px;font-weight:200}.jumbotron>hr{border-top-color:#e6e6e6}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:72px}}.alert{padding:15px;margin-bottom:22px;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,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#7bcc3a}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#63a82b}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#10a0de}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#0d7eae}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#ffd162}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#ffc22f}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#f74b4b}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#f51a1a}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:22px;margin-bottom:22px;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:14px;line-height:22px;color:#fff;text-align:center;background-color:#337ab7;-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;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{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:-o-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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-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:#7bcc3a}.progress-striped .progress-bar-success{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:-o-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:#10a0de}.progress-striped .progress-bar-info{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:-o-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-warning{background-color:#ffd162}.progress-striped .progress-bar-warning{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:-o-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:#f74b4b}.progress-striped .progress-bar-danger{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:-o-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{margin-top:15px}.media:first-child{margin-top:0}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.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}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;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#fff;color:#fff;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#fff}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.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,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{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:#c7ddef}.list-group-item-success{color:#7bcc3a;background-color:#dff0d8}a.list-group-item-success{color:#7bcc3a}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#7bcc3a;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#7bcc3a;border-color:#7bcc3a}.list-group-item-info{color:#10a0de;background-color:#d9edf7}a.list-group-item-info{color:#10a0de}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#10a0de;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#10a0de;border-color:#10a0de}.list-group-item-warning{color:#ffd162;background-color:#fcf8e3}a.list-group-item-warning{color:#ffd162}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#ffd162;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#ffd162;border-color:#ffd162}.list-group-item-danger{color:#f74b4b;background-color:#f2dede}a.list-group-item-danger{color:#f74b4b}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#f74b4b;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#f74b4b;border-color:#f74b4b}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.close{float:right;font-size:24px;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}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);-webkit-background-clip:padding-box;background-clip:padding-box;outline:0}.modal-backdrop{position:absolute;top:0;right:0;left:0;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.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)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;visibility:visible;font-family:\"Source Sans Pro\",sans-serif;font-size:14px;font-weight:normal;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#000;text-align:center;text-decoration:none;background-color:#fff;border-radius: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-width:5px 5px 0;border-top-color:#fff}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#fff}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#fff}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#fff}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#fff}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#fff}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#fff}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#fff}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:\"Source Sans Pro\",sans-serif;font-size:16px;font-weight:normal;line-height:1.42857143;text-align:left;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:16px;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{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:\" \";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:\" \";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:\" \";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:\" \";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.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;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));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{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);background-image:-webkit-gradient(linear, left top, right top, color-stop(0, rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));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{outline:0;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-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\\2039'}.carousel-control .icon-next:before{content:'\\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \\9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.modal-footer:before,.modal-footer:after{content:\" \";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.modal-footer:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}","\n.icon-truck:before { content: '\\e800'; } /* '' */\n.icon-database:before { content: '\\e801'; } /* '' */\n.icon-mining:before { content: '\\e802'; } /* '' */\n.icon-check:before { content: '\\e803'; } /* '' */\n.icon-cancel:before { content: '\\e804'; } /* '' */\n.icon-loader:before { content: '\\e805'; } /* '' */\n.icon-check-o:before { content: '\\e806'; } /* '' */\n.icon-cancel-o:before { content: '\\e807'; } /* '' */\n.icon-warning-o:before { content: '\\e808'; } /* '' */\n.icon-network:before { content: '\\e809'; } /* '' */\n.icon-block:before { content: '\\e80a'; } /* '' */\n.icon-bulb:before { content: '\\e80b'; } /* '' */\n.icon-node:before { content: '\\e80c'; } /* '' */\n.icon-laptop:before { content: '\\e80d'; } /* '' */\n.icon-time:before { content: '\\e80e'; } /* '' */\n.icon-clock:before { content: '\\e80f'; } /* '' */\n.icon-group:before { content: '\\e810'; } /* '' */\n.icon-gas:before { content: '\\e811'; } /* '' */\n.icon-difficulty:before { content: '\\e812'; } /* '' */\n.icon-uncle:before { content: '\\e813'; } /* '' */\n.icon-hashrate:before { content: '\\e814'; } /* '' */\n.icon-gasprice:before { content: '\\e815'; } /* '' */","@font-face {\n font-family: 'minimal-icons';\n src: url('../fonts/minimal-icons.eot?59779169');\n src: url('../fonts/minimal-icons.eot?59779169#iefix') format('embedded-opentype'),\n url('../fonts/minimal-icons.svg?59779169#minimal-icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n@font-face {\n font-family: 'minimal-icons';\n src: url('data:application/octet-stream;base64,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') format('woff'),\n url('data:application/octet-stream;base64,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ABawBCWwBCYgLkcjRyNhsAlDKyMgPCAuIzixKwEUKy2wQSyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAJQysgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwAmIgsABQWLBAYFlmsAFjYCCwASsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsAJiILAAUFiwQGBZZrABY2GwAiVGYTgjIDwjOBshICBGI0ewASsjYTghWbErARQrLbBCLLA1Ky6xKwEUKy2wQyywNishIyAgPLAEI0IjOLErARQrsARDLrArKy2wRCywABUgR7AAI0KyAAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKxAAAqsQAFQrEACCqxAAVCsQAIKrEABUK5AAAACSqxAAVCuQAAAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbEADCq4Af+FsASNsQIARAA=') format('truetype');\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n/*\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n @font-face {\n font-family: 'minimal-icons';\n src: url('../fonts/minimal-icons.svg?59779169#minimal-icons') format('svg');\n }\n}\n*/\n\n [class^=\"icon-\"]:before, [class*=\" icon-\"]:before {\n font-family: \"minimal-icons\";\n font-style: normal;\n font-weight: normal;\n speak: none;\n\n display: inline-block;\n text-decoration: inherit;\n width: 1em;\n margin-right: .2em;\n text-align: center;\n /* opacity: .8; */\n\n /* For safety - reset parent styles, that can break glyph codes*/\n font-variant: normal;\n text-transform: none;\n\n /* fix buttons height, for twitter bootstrap */\n line-height: 1em;\n\n /* Animation center compensation - margins should be symmetric */\n /* remove if not needed */\n margin-left: .2em;\n\n /* you can be more comfortable with increased icons size */\n /* font-size: 120%; */\n\n /* Uncomment for 3D effect */\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n}\n.icon-truck:before { content: '\\e800'; } /* '' */\n.icon-database:before { content: '\\e801'; } /* '' */\n.icon-mining:before { content: '\\e802'; } /* '' */\n.icon-check:before { content: '\\e803'; } /* '' */\n.icon-cancel:before { content: '\\e804'; } /* '' */\n.icon-loader:before { content: '\\e805'; } /* '' */\n.icon-check-o:before { content: '\\e806'; } /* '' */\n.icon-cancel-o:before { content: '\\e807'; } /* '' */\n.icon-warning-o:before { content: '\\e808'; } /* '' */\n.icon-network:before { content: '\\e809'; } /* '' */\n.icon-block:before { content: '\\e80a'; } /* '' */\n.icon-bulb:before { content: '\\e80b'; } /* '' */\n.icon-node:before { content: '\\e80c'; } /* '' */\n.icon-laptop:before { content: '\\e80d'; } /* '' */\n.icon-time:before { content: '\\e80e'; } /* '' */\n.icon-clock:before { content: '\\e80f'; } /* '' */\n.icon-group:before { content: '\\e810'; } /* '' */\n.icon-gas:before { content: '\\e811'; } /* '' */\n.icon-difficulty:before { content: '\\e812'; } /* '' */\n.icon-uncle:before { content: '\\e813'; } /* '' */\n.icon-hashrate:before { content: '\\e814'; } /* '' */\n.icon-gasprice:before { content: '\\e815'; } /* '' */","\n.icon-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-database { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-mining { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-loader { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-check-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-cancel-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-warning-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-bulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-node { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-gas { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-difficulty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-uncle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-hashrate { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-gasprice { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }","[class^=\"icon-\"], [class*=\" icon-\"] {\n font-family: 'minimal-icons';\n font-style: normal;\n font-weight: normal;\n \n /* fix buttons height */\n line-height: 1em;\n \n /* you can be more comfortable with increased icons size */\n /* font-size: 120%; */\n}\n \n.icon-truck { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-database { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-mining { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-loader { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-check-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-cancel-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-warning-o { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-bulb { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-node { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-laptop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-time { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-gas { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-difficulty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-uncle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-hashrate { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }\n.icon-gasprice { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); }","@font-face {\n font-family: 'minimal-icons';\n src: url('../fonts/minimal-icons.eot?7541141');\n src: url('../fonts/minimal-icons.eot?7541141#iefix') format('embedded-opentype'),\n url('../fonts/minimal-icons.woff?7541141') format('woff'),\n url('../fonts/minimal-icons.ttf?7541141') format('truetype'),\n url('../fonts/minimal-icons.svg?7541141#minimal-icons') format('svg');\n font-weight: normal;\n font-style: normal;\n}\n/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */\n/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */\n/*\n@media screen and (-webkit-min-device-pixel-ratio:0) {\n @font-face {\n font-family: 'minimal-icons';\n src: url('../fonts/minimal-icons.svg?7541141#minimal-icons') format('svg');\n }\n}\n*/\n\n [class^=\"icon-\"]:before, [class*=\" icon-\"]:before {\n font-family: \"minimal-icons\";\n font-style: normal;\n font-weight: normal;\n speak: none;\n\n display: inline-block;\n text-decoration: inherit;\n width: 1em;\n margin-right: .2em;\n text-align: center;\n /* opacity: .8; */\n\n /* For safety - reset parent styles, that can break glyph codes*/\n font-variant: normal;\n text-transform: none;\n\n /* fix buttons height, for twitter bootstrap */\n line-height: 1em;\n\n /* Animation center compensation - margins should be symmetric */\n /* remove if not needed */\n margin-left: .2em;\n\n /* you can be more comfortable with increased icons size */\n /* font-size: 120%; */\n\n /* Font smoothing. That was taken from TWBS */\n /*-webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;*/\n\n /* Uncomment for 3D effect */\n /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */\n}\n\n.icon-truck:before { content: '\\e800'; } /* '' */\n.icon-database:before { content: '\\e801'; } /* '' */\n.icon-mining:before { content: '\\e802'; } /* '' */\n.icon-check:before { content: '\\e803'; } /* '' */\n.icon-cancel:before { content: '\\e804'; } /* '' */\n.icon-loader:before { content: '\\e805'; } /* '' */\n.icon-check-o:before { content: '\\e806'; } /* '' */\n.icon-cancel-o:before { content: '\\e807'; } /* '' */\n.icon-warning-o:before { content: '\\e808'; } /* '' */\n.icon-network:before { content: '\\e809'; } /* '' */\n.icon-block:before { content: '\\e80a'; } /* '' */\n.icon-bulb:before { content: '\\e80b'; } /* '' */\n.icon-node:before { content: '\\e80c'; } /* '' */\n.icon-laptop:before { content: '\\e80d'; } /* '' */\n.icon-time:before { content: '\\e80e'; } /* '' */\n.icon-clock:before { content: '\\e80f'; } /* '' */\n.icon-group:before { content: '\\e810'; } /* '' */\n.icon-gas:before { content: '\\e811'; } /* '' */\n.icon-difficulty:before { content: '\\e812'; } /* '' */\n.icon-uncle:before { content: '\\e813'; } /* '' */\n.icon-hashrate:before { content: '\\e814'; } /* '' */\n.icon-gasprice:before { content: '\\e815'; } /* '' */","html {\n\twidth: 100%;\n}\n\nbody {\n\twidth: 100%;\n\tmin-width: 1900px;\n\tfont-smooth: auto;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\ntable td {\n\tfont-size: 14px;\n\twhite-space: nowrap !important;\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n}\n\n.propagationBox {\n\tposition: relative;\n\twidth: 8px;\n\theight: 8px;\n\tfloat: left;\n\ttop: 5px;\n\tmargin-right: 5px;\n\t-webkit-border-radius: 2px;\n\tborder-radius: 2px;\n}\n\n.bg-success,\n.text-success .propagationBox {\n\tbackground: #7bcc3a;\n}\n\n.bg-info,\n.text-info .propagationBox {\n\tbackground: #10a0de;\n}\n\n.bg-warning,\n.text-warning .propagationBox {\n\tbackground: #FFD162;\n}\n\n.bg-orange,\n.text-orange .propagationBox {\n\tbackground: #ff8a00;\n}\n\n.bg-danger,\n.text-danger .propagationBox {\n\tbackground: #F74B4B;\n}\n\n.text-gray .propagationBox {\n\tbackground: none !important;\n\tborder: 1px solid #777;\n}\n\n.bg-success,\n.bg-info,\n.bg-warning,\n.bg-orange,\n.bg-danger {\n\tcolor: #000;\n}\n\n.text-gray {\n\tcolor: #777 !important;\n}\n\n.text-orange {\n\tcolor: #ff8a00;\n}\n\n.container-fluid {\n\tpadding-left: 30px;\n\tpadding-right: 30px;\n}\n\n.stat-holder {\n\tbackground: #090909;\n\tborder: 1px solid rgba(255,255,255,0.05);\n}\n\n.big-info {\n\tpadding-top: 15px;\n\tpadding-bottom: 15px;\n}\n\n.big-info .icon-full-width i {\n\tdisplay: block;\n\twidth: 85px;\n\theight: 70px;\n\tfont-size: 70px;\n\tline-height: 70px;\n\tmargin-right: 15px;\n\tmargin-left: -15px;\n}\n\n.big-info span.small-title,\n.big-info div.small-title-miner {\n\tdisplay: block;\n}\n\nspan.small-title,\ndiv.small-title-miner {\n\tfont-weight: 700;\n\tfont-size: 14px;\n\tline-height: 20px;\n\tletter-spacing: 1px;\n\ttext-transform: uppercase;\n\tcolor: #aaa;\n}\n\nspan.small-title span.small {\n\tfont-size: 11px;\n\tfont-weight: 600;\n\tline-height: 16px;\n\tletter-spacing: 0px;\n\tcolor: #666;\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n}\n\n.big-info .big-details {\n\tdisplay: block;\n\tfont-weight: 200;\n\tfont-size: 50px;\n\tline-height: 55px;\n\tletter-spacing: -4px;\n\tword-spacing: nowrap !important;\n}\n\n.big-info .big-details .small-hash {\n\tfont-size: 87%;\n}\n\n.big-info .big-details-holder {\n\tposition: absolute;\n\ttop: 15px;\n\tleft: 99px;\n}\n\n.big-info.chart {\n\tpadding-top: 12px;\n}\n\n.big-info.chart .big-details {\n\tdisplay: block;\n\tposition: absolute;\n\ttop: 40px;\n}\n\n.big-info.chart {\n\theight: 120px;\n\t-webkit-box-sizing: border-box\n\tbox-sizing: border-box;\n}\n\n.big-info.chart.double-chart {\n\theight: 242px;\n}\n\n.blocks-holder {\n\twidth: 288px;\n\tpadding-top: 6px;\n\tmargin-left: -2px;\n}\n\n.blocks-holder {\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n}\n\n.blocks-holder div.small-title-miner {\n\tfont-family: \"Lucida Console\", \"Courier New\", Courier, monospace;\n\tfont-size: 11px;\n\tletter-spacing: -0.1px;\n\ttext-transform: none;\n\twhite-space: nowrap;\n\tcolor: #777;\n}\n\n.blocks-holder .block-count {\n\tfont-family: 'Lucida Console', \"Courier New\", Courier, monospace;\n\tfont-weight: bold;\n\tfont-size: 10px;\n\tpadding-top: 3px;\n\tfloat: right;\n}\n\n.blocks-holder .block {\n\twidth: 6px;\n\theight: 6px;\n\tmargin: 2px 1px 6px 0px;\n\tfloat: left;\n\t-webkit-border-radius: 1px;\n\tborder-radius: 1px;\n\topacity: .8;\n}\n\n.blocks-holder .block:first-child {\n\tmargin-left: 0px;\n}\n\n.blocks-holder .block:last-child {\n\tmargin-right: 0px;\n}\n\n.second-row .box {\n\theight: 40px;\n\tline-height: 24px !important;\n\tpadding: 5px 15px;\n}\n\n.second-row .box i,\n.big-info.chart i {\n\tposition: relative;\n\ttop: 2px;\n\tleft: -3px;\n\tfont-size: 24px;\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n\tmargin-right: 7px;\n\tfloat: left;\n}\n\n.big-info.chart i {\n\tfont-size: 24px;\n\ttop: -2px;\n}\n\n.small-value {\n\tfont-weight: 300;\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n\tfloat: right;\n}\n\n.second-row .box .small-value {\n\tfloat: right;\n}\n.big-info .small-value {\n\tposition: absolute;\n\tright: 14px;\n\ttop: 10px;\n}\n\ntable i {\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n}\n\ntable th,\ntable td {\n\tborder-color: #222 !important;\n}\n\ntable td {\n\tline-height: 18px !important;\n}\n\ntable th {\n\tcolor: #888;\n}\n\ntable th i {\n\tline-height: 1em;\n\tfont-size: 20px;\n}\ntable td i {\n\tposition: relative;\n\ttop: 2px;\n\tleft: 2px;\n}\ntable td.peerPropagationChart {\n\tpadding: 4px 5px !important;\n}\nnodepropagchart {\n\tdisplay: inline-block;\n\twidth: 107px;\n\theight: 20px;\n\tvertical-align: top;\n}\n\n.table>tbody>tr>td,\n.table>thead>tr>th {\n\tpadding: 5px;\n}\n\n.th-nodecheck,\n.td-nodecheck {\n\twidth: 38px;\n\ttext-align: center;\n}\n\n.td-nodecheck i {\n\tleft: 0px;\n}\n\n.th-nodename {\n\twidth: 300px;\n\ttext-overflow: ellipsis;\n}\n\n.th-nodetype {\n\twidth: 220px;\n}\n\n.th-latency {\n\twidth: 100px;\n}\n\n.th-blockhash {\n\twidth: 150px;\n}\n\n.th-blocktime {\n\twidth: 110px;\n}\n\n.th-peerPropagationTime {\n\twidth: 120px;\n}\n\n.th-peerPropagationChart {\n\twidth: 140px;\n}\n\n.nodeInfo .tooltip .tooltip-inner {\n\tmax-width: 400px;\n\ttext-align: left;\n\tfont-size: 12px;\n}\n\n.map-holder {\n\tpadding: 0;\n}\n\n#mapHolder {\n\tposition: relative;\n\tdisplay: block;\n\twidth: 100%;\n\theight: 282px;\n\toverflow: hidden;\n}\n\n#mapHolder > svg {\n\tright: 0;\n\tbottom: 0;\n\twidth: 100%;\n\theight: 100%;\n\tdisplay: inline-block;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n}\n\n.jqsfield {\n\tposition: relative;\n\tpadding: 5px 0;\n\twidth: auto;\n\tleft: -50%;\n\tword-wrap: wrap;\n\ttext-align: center;\n}\n\n.d3-tip {\n\tpadding: 5px 0;\n}\n\n.jqsfield .tooltip-arrow {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 50%;\n\tmargin-left: -5px;\n\tborder-width: 5px 5px 0;\n\tborder-top-color: #fff;\n}\n\n.datamaps-hoverover .tooltip-arrow,\n.d3-tip .tooltip-arrow {\n\tposition: absolute;\n\ttop: -5px;\n\tleft: 0px;\n\tmargin-left: -5px;\n\tborder-width: 0px 5px 5px 5px;\n\tborder-bottom-color: #fff;\n}\n\n.d3-tip .tooltip-arrow {\n\ttop: 0px;\n\tleft: 50%;\n}\n\n.hoverinfo {\n\tposition: relative;\n\twidth: auto;\n\tleft: -50%;\n\ttext-align: center;\n\tcolor: #333;\n\tborder: none !important;\n\tbox-shadow: none !important;\n\tborder-radius: 3px !important;\n\tpadding: 5px !important;\n\tline-height: 14px !important;\n}\n\n.hoverinfo .propagationBox {\n\ttop: 3px;\n}\n\nsvg {\n\toverflow: visible !important;\n}\n\nsvg .bars .bar {\n\topacity: 1;\n\tshape-rendering: auto;\n}\n\nsvg .bars .handle {\n\topacity: 0;\n}\n\nsvg .bars .highlight {\n\topacity: 0;\n}\n\nsvg .bars g:hover .highlight {\n\topacity: 1;\n}\n\nsvg .line {\n\tfill: none;\n\tstroke: #ff0000;\n\tstroke-width: 1.3px;\n\tstroke-linejoin: round;\n\tstroke-linecap: round;\n\tshape-rendering: geometric-precision;\n\t/*-webkit-svg-shadow: 0 0 7px #fff;*/\n}\n\nsvg .bar text {\n\ttext-anchor: end;\n\tfont-size: 12px;\n}\n\nsvg .axis path,\nsvg .axis line {\n\tfill: none;\n\tstroke: rgba(255,255,255,0.15);\n\tshape-rendering: crispEdges;\n}\nsvg .axis text {\n\tfill: #777;\n\tfont-size: 10px;\n\tletter-spacing: 0px;\n\tfont-family: \"Source Sans Pro\";\n\tfont-weight: 700;\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-moz-osx-font-smoothing: auto;\n}\n\nsvg .y.axis .tick:first-child text {\n\topacity: 0;\n}",".toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:alpha(Opacity=80);filter:alpha(opacity=80)}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:alpha(Opacity=40);filter:alpha(opacity=40)}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8;-ms-filter:alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4;-ms-filter:alpha(Opacity=40);filter:alpha(opacity=40)}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}"]}
\ No newline at end of file
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/app.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/app.js
deleted file mode 100644
index 320eb20..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/app.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function(){/* Services */
-
-_ = lodash;
-
-socket = new Primus({url: 'wss://stats.ethdev.com'});
-
-toastr = window.toastr;
-toastr.options = {
- "closeButton": false,
- "debug": false,
- "progressBar": false,
- "newestOnTop": true,
- "positionClass": "toast-top-right",
- "preventDuplicates": false,
- "onclick": null,
- "showDuration": "300",
- "hideDuration": "1000",
- "timeOut": "5000",
- "extendedTimeOut": "1000",
- "showEasing": "swing",
- "hideEasing": "linear",
- "showMethod": "fadeIn",
- "hideMethod": "fadeOut"
-};
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/controllers.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/controllers.js
deleted file mode 100644
index a6683ee..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/controllers.js
+++ /dev/null
@@ -1,670 +0,0 @@
-(function(){// Collections
-
-Blockchain = new Mongo.Collection('blockchain', {connection: null});
-Nodes = new Mongo.Collection('nodes', {connection: null});
-Map = new Mongo.Collection('map', {connection: null});
-
-
-
-/* Controllers */
-
-
-var MAX_BINS = 40;
-
-// Main Stats init
-// ---------------
-
-Blockchain.insert({
- _id: 'meta',
- frontierHash: '0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa',
- nodesTotal: 0,
- nodesActive: 0,
- bestBlock: 0,
- lastBlock: 0,
- lastDifficulty: 0,
- upTimeTotal: 0,
- avgBlockTime: 0,
- blockPropagationAvg: 0,
- avgHashrate: 0,
- uncleCount: 0,
- bestStats: {},
-
- lastBlocksTime: _.fill(Array(MAX_BINS), 2),
- difficultyChart: _.fill(Array(MAX_BINS), 2),
- transactionDensity: _.fill(Array(MAX_BINS), 2),
- gasSpending: _.fill(Array(MAX_BINS), 2),
- miners: [],
-
- map: [],
- blockPropagationChart: [],
- uncleCountChart: _.fill(Array(MAX_BINS), 2),
- coinbases: [],
-
- latency: 0,
-
- currentApiVersion: "0.0.16",
-
- predicate: localStorage.predicate || ['-pinned', '-stats.active', '-stats.block.number', 'stats.block.propagation'],
- reverse: localStorage.reverse || false,
- pinned: localStorage.pinned || [],
-
- prefixPredicate: ['-pinned', '-stats.active'],
- originalPredicate: ['-stats.block.number', 'stats.block.propagation']
-});
-
-
-// $scope.orderTable = function(predicate, reverse)
-// {
-// if(!_.isEqual(predicate, $scope.originalPredicate))
-// {
-// $scope.reverse = reverse;
-// $scope.originalPredicate = predicate;
-// $scope.predicate = _.union($scope.prefixPredicate, predicate);
-// }
-// else
-// {
-// $scope.reverse = !$scope.reverse;
-
-// if($scope.reverse === true){
-// _.forEach(predicate, function (value, key) {
-// predicate[key] = (value[0] === '-' ? value.replace('-', '') : '-' + value);
-// });
-// }
-
-// $scope.predicate = _.union($scope.prefixPredicate, predicate);
-// }
-
-// localStorage.predicate = $scope.predicate;
-// localStorage.reverse = $scope.reverse;
-// }
-
-// $scope.pinNode = function(id)
-// {
-// index = findIndex({id: id});
-
-// if( !_.isUndefined($scope.nodes[index]) )
-// {
-// $scope.nodes[index].pinned = !$scope.nodes[index].pinned;
-
-// if($scope.nodes[index].pinned)
-// {
-// $scope.pinned.push(id);
-// }
-// else
-// {
-// $scope.pinned.splice($scope.pinned.indexOf(id), 1);
-// }
-// }
-
-// localStorage.pinned = $scope.pinned;
-// }
-
-// var timeout = setInterval(function ()
-// {
-// $scope.$apply();
-// }, 300);
-
-// $scope.getNumber = function (num) {
-// return new Array(num);
-// }
-
-// Socket listeners
-// ----------------
-
-socket.on('open', function open() {
- socket.emit('ready');
- console.log('The connection has been opened.');
-})
-.on('end', function end() {
- console.log('Socket connection ended.')
-})
-.on('error', function error(err) {
- console.log(err);
-})
-.on('reconnecting', function reconnecting(opts) {
- console.log('We are scheduling a reconnect operation', opts);
-})
-.on('data', function incoming(data) {
- socketAction(data.action, data.data);
-});
-
-socket.on('init', function(data)
-{
- _.each(data.nodes, function(node){
- Nodes.upsert(node.id, socketAction('init', node));
-
- addToMap(node);
- });
-});
-
-socket.on('client-latency', function(data)
-{
- Blockchain.update('meta', {$set: {
- latency: data.latency
- }});
-})
-
-function socketAction(action, data)
-{
- // console.log('Action: ', action);
- // console.log('Data: ', data);
-
- switch(action)
- {
- case "init":
- var node = data;
-
- // Init hashrate
- if( _.isUndefined(node.stats.hashrate) )
- node.stats.hashrate = 0;
-
- // Init latency
- latencyFilter(node);
-
- // Init history
- if( _.isUndefined(data.history) )
- {
- data.history = new Array(40);
- _.fill(data.history, -1);
- }
-
- // Init or recover pin
- node.pinned = (Blockchain.findOne().pinned.indexOf(node.id) >= 0 ? true : false);
-
- if( Nodes.find().count() > 0 )
- {
- toastr['success']("Got nodes list", "Got nodes!");
-
- updateActiveNodes();
- }
-
- return node;
-
- case "add":
-
- if( addNewNode(data) )
- toastr['success']("New node "+ Nodes.findOne(data.id).info.name +" connected!", "New node!");
- else
- toastr['info']("Node "+ Nodes.findOne(data.id).info.name +" reconnected!", "Node is back!");
-
- break;
-
- // TODO: Remove when everybody updates api client to 0.0.12
- case "update":
- var foundNode = Nodes.findOne(data.id);
-
- if( foundNode && !_.isUndefined(foundNode.stats) )
- {
- if( !_.isUndefined(foundNode.stats.latency) )
- data.stats.latency = foundNode.stats.latency;
-
- if( _.isUndefined(data.stats.hashrate) )
- data.stats.hashrate = 0;
-
- if( foundNode.stats.block.number < data.stats.block.number )
- {
-
- var best = Nodes.findOne({},{sort: {'stats.block.number': -1}});
-
- if(best) {
- if (data.block.number > best.stats.block.number) {
- data.block.arrived = _.now();
- } else {
- data.block.arrived = best.stats.block.arrived;
- }
- }
-
-
- foundNode.history = data.history;
- }
-
- foundNode.stats = data.stats;
- foundNode.stats.block = data.block; // necessary?
-
- if( !_.isUndefined(data.stats.latency) && _.get(foundNode, 'stats.latency', 0) !== data.stats.latency )
- {
- foundNode.stats.latency = data.stats.latency;
-
- latencyFilter(foundNode);
- }
-
- Nodes.update(data.id, foundNode);
-
- updateBestBlock();
- }
-
- break;
-
- case "block":
- var foundNode = Nodes.findOne(data.id);
- if( foundNode && foundNode.stats )
- {
- var set = {};
-
- if( foundNode.stats.block.number < data.block.number )
- {
- var best = Nodes.findOne({},{sort: {'stats.block.number': -1}});
-
- if(best) {
- if (data.block.number > best.stats.block.number) {
- data.block.arrived = _.now();
- } else {
- data.block.arrived = best.stats.block.arrived;
- }
- }
-
- set.history = data.history;
- }
-
- set['stats.block'] = data.block;
- set['stats.propagationAvg'] = data.propagationAvg;
-
- Nodes.update('meta', {$set: set});
-
- updateBestBlock();
- }
-
- break;
-
- case "pending":
- var foundNode = Nodes.findOne(data.id);
-
- if( !_.isUndefined(data.id) && foundNode )
- {
-
- if( !_.isUndefined(foundNode) && !_.isUndefined(foundNode.stats.pending) && !_.isUndefined(data.pending) )
- Nodes.update(data.id, {$set: {
- 'stats.pending': data.pending
- }});
- }
-
- break;
-
- case "stats":
- var foundNode = Nodes.findOne(data.id);
-
- if( !_.isUndefined(data.id) && foundNode )
- {
-
- if( !_.isUndefined(foundNode) && !_.isUndefined(foundNode.stats) )
- {
- Nodes.update(foundNode._id, {$set:{
- 'stats.active': data.stats.active,
- 'stats.mining': data.stats.mining,
- 'stats.hashrate': data.stats.hashrate,
- 'stats.peers': data.stats.peers,
- 'stats.gasPrice': data.stats.gasPrice,
- 'stats.uptime': data.stats.uptime
- }});
-
- if( !_.isUndefined(data.stats.latency) && _.get(foundNode, 'stats.latency', 0) !== data.stats.latency )
- {
- Nodes.update(foundNode._id, {$set:{
- 'stats.latency': data.stats.latency
- }});
-
- latencyFilter(foundNode);
- }
-
- updateActiveNodes();
- }
- }
-
- break;
-
- case "info":
- var foundNode = Nodes.findOne(data.id);
-
- if( foundNode )
- {
- var set = {};
-
- set.info = data.info;
-
- if( _.isUndefined(foundNode.pinned) )
- set.pinned = false;
-
- Nodes.update(data.id, {$set: set});
-
- // Init latency
- latencyFilter(foundNode);
-
- updateActiveNodes();
- }
-
- break;
-
- case "blockPropagationChart":
- Blockchain.update('meta', {$set:{
- blockPropagationChart: data.histogram,
- blockPropagationAvg: data.avg
- }});
-
- break;
-
- case "uncleCount":
- Blockchain.update('meta', {$set:{
- uncleCount: data[0] + data[1],
- uncleCountChart: (function(){
- data.reverse();
- return data;
- })()
- }});
-
- break;
-
- case "charts":
- var meta = Blockchain.findOne('meta');
-
- if( !_.isEqual(meta.avgBlockTime, data.avgBlocktime) )
- meta.avgBlockTime = data.avgBlocktime;
-
- if( !_.isEqual(meta.avgHashrate, data.avgHashrate) )
- meta.avgHashrate = data.avgHashrate;
-
- if( !_.isEqual(meta.lastBlocksTime, data.blocktime) && data.blocktime.length >= MAX_BINS )
- meta.lastBlocksTime = data.blocktime;
-
- if( !_.isEqual(meta.difficultyChart, data.difficulty) && data.difficulty.length >= MAX_BINS )
- meta.difficultyChart = data.difficulty;
-
- if( !_.isEqual(meta.blockPropagationChart, data.propagation.histogram) ) {
- meta.blockPropagationChart = data.propagation.histogram;
- meta.blockPropagationAvg = data.propagation.avg;
- }
-
- data.uncleCount.reverse();
-
- if( !_.isEqual(meta.uncleCountChart, data.uncleCount) && data.uncleCount.length >= MAX_BINS ) {
- meta.uncleCount = data.uncleCount[data.uncleCount.length-2] + data.uncleCount[data.uncleCount.length-1];
- meta.uncleCountChart = data.uncleCount;
- }
-
- if( !_.isEqual(meta.transactionDensity, data.transactions) && data.transactions.length >= MAX_BINS )
- meta.transactionDensity = data.transactions;
-
- if( !_.isEqual(meta.gasSpending, data.gasSpending) && data.gasSpending.length >= MAX_BINS )
- meta.gasSpending = data.gasSpending;
-
- if( !_.isEqual(meta.miners, data.miners) ) {
- meta.miners = data.miners;
- getMinersNames(meta);
- }
-
- // update
- delete meta._id;
- Blockchain.update('meta', {$set: meta});
-
- break;
-
- case "inactive":
- var foundNode = Nodes.findOne(data.id);
-
- if( foundNode )
- {
- if( !_.isUndefined(data.stats) ) {
- Nodes.update(data.id, {$set: {
- stats: data.stats
- }});
- }
-
- toastr['error']("Node "+ foundNode.info.name +" went away!", "Node connection was lost!");
-
- updateActiveNodes();
- }
-
- break;
-
- case "latency":
- if( !_.isUndefined(data.id) && !_.isUndefined(data.latency) )
- {
- var foundNode = Nodes.findOne(data.id);
-
- if( foundNode )
- {
-
- if( !_.isUndefined(foundNode) && !_.isUndefined(foundNode.stats) && !_.isUndefined(foundNode.stats.latency) && foundNode.stats.latency !== data.latency )
- {
- Nodes.update(data.id, {$set: {
- 'stats.latency': data.latency
- }});
-
- latencyFilter(foundNode);
- }
- }
- }
-
- break;
-
- case "client-ping":
- socket.emit('client-pong', {
- serverTime: data.serverTime,
- clientTime: _.now()
- });
-
- break;
- }
-
- // $scope.$apply();
-}
-
-
-function getMinersNames(meta)
-{
- if( meta.miners.length > 0 )
- {
- _.forIn(meta.miners, function (value, key)
- {
- if(value.name !== false)
- return;
-
- if(value.miner === "0x0000000000000000000000000000000000000000")
- return;
-
- if(miner = Nodes.findOne({'info.coinbase': value.miner}))
- var name = miner.info.name;
-
- if( !_.isUndefined(name) ) {
- meta.miners[key].name = name;
- }
- });
- }
-
- return meta;
-}
-
-function addNewNode(data)
-{
- var foundNode = Nodes.findOne(data.id);
-
- if( _.isUndefined(data.history) )
- {
- data.history = new Array(40);
- _.fill(data.history, -1);
- }
-
-
- data.pinned = ( !_.isUndefined(foundNode.pinned) ? foundNode.pinned : false);
-
- if( !_.isUndefined(foundNode.history) )
- {
- data.history = foundNode.history;
- }
-
- // update node
- Nodes.upsert(data.id, {$set: data});
-
- addToMap(data);
-
- updateActiveNodes();
-
- return false;
-}
-
-function addToMap(data) {
- // add to map
- var bestblock = Blockchain.findOne().bestBlock;
-
- if(!Map.findOne(data.id) && data.geo != null)
- Map.insert({
- _id: data.id,
- radius: 3,
- latitude: data.geo.ll[0],
- longitude: data.geo.ll[1],
- nodeName: data.info.name,
- fillClass: mainClass(data.stats, bestblock),
- fillKey: mainClass(data.stats, bestblock).replace('text-', ''),
- });
-}
-
-function updateActiveNodes()
-{
- updateBestBlock();
-
- var nodesTotal = Nodes.find().count(),
- nodesActive = 0,
- upTimeTotal = 0;
-
- // iterate over all nodes to get the correct data
- _.each(Nodes.find().fetch(), function(node){
-
- if(node.stats) {
- if(node.stats.active)
- nodesActive++
-
- upTimeTotal += node.stats.uptime;
- }
- });
-
- Blockchain.update('meta', {$set: {
-
- nodesTotal: nodesTotal,
- nodesActive: nodesActive,
- upTimeTotal: upTimeTotal / nodesTotal
- }});
-}
-
-function updateBestBlock()
-{
- if( Nodes.find().count() )
- {
- // var chains = {};
- // var maxScore = 0;
-
- // _($scope.nodes)
- // .map(function (item)
- // {
- // maxScore += (item.trusted ? 50 : 1);
-
- // if( _.isUndefined(chains[item.stats.block.number]) )
- // chains[item.stats.block.number] = [];
-
- // if( _.isUndefined(chains[item.stats.block.number][item.stats.block.fork]) )
- // chains[item.stats.block.number][item.stats.block.fork] = {
- // fork: item.stats.block.fork,
- // count: 0,
- // trusted: 0,
- // score: 0
- // };
-
- // if(item.stats.block.trusted)
- // chains[item.stats.block.number][item.stats.block.fork].trusted++;
- // else
- // chains[item.stats.block.number][item.stats.block.fork].count++;
-
- // chains[item.stats.block.number][item.stats.block.fork].score = chains[item.stats.block.number][item.stats.block.fork].trusted * 50 + chains[item.stats.block.number][item.stats.block.fork].count;
- // })
- // .value();
-
- // $scope.maxScore = maxScore;
- // $scope.chains = _.reduce(chains, function (result, item, key)
- // {
- // result[key] = _.max(item, 'score');
- // return result;
- // }, {});
-
- var bestBlock = Nodes.findOne({'stats.block.number': {$exists: true}},{sort: {'stats.block.number': -1}});
- if( bestBlock && bestBlock.stats.block.number !== Blockchain.findOne().bestBlock )
- {
-console.log('bestblock', bestBlock.stats.block.number);
-
- Blockchain.update('meta', {$set: {
- bestBlock: bestBlock.stats.block.number,
- bestStats: bestBlock.stats,
- lastBlock: bestBlock.stats.block.arrived,
- lastDifficulty: bestBlock.stats.block.difficulty
- }});
- }
- }
-}
-
-// function forkFilter(node)
-// {
-// if( _.isUndefined(node.readable) )
-// node.readable = {};
-
-// node.readable.forkClass = 'hidden';
-// node.readable.forkMessage = '';
-
-// return true;
-
-// if( $scope.chains[node.stats.block.number].fork === node.stats.block.fork && $scope.chains[node.stats.block.number].score / $scope.maxScore >= 0.5 )
-// {
-// node.readable.forkClass = 'hidden';
-// node.readable.forkMessage = '';
-
-// return true;
-// }
-
-// if( $scope.chains[node.stats.block.number].fork !== node.stats.block.fork )
-// {
-// node.readable.forkClass = 'text-danger';
-// node.readable.forkMessage = 'Wrong chain.
This chain is a fork.';
-
-// return false;
-// }
-
-// if( $scope.chains[node.stats.block.number].score / $scope.maxScore < 0.5)
-// {
-// node.readable.forkClass = 'text-warning';
-// node.readable.forkMessage = 'May not be main chain.
Waiting for more confirmations.';
-
-// return false;
-// }
-// }
-
-function latencyFilter(node)
-{
- // var set = {};
- // if( _.isUndefined(node.readable) )
- // set['node.readable'] = {};
-
- // if( _.isUndefined(node.stats) ) {
- // set['readable.latencyClass'] = 'text-danger';
- // set['readable.latency'] = 'offline';
- // }
-
- // if (node.stats.active === false)
- // {
- // set['readable.latencyClass'] = 'text-danger';
- // set['readable.latency'] = 'offline';
- // }
- // else
- // {
- // if (node.stats.latency <= 100)
- // set['readable.latencyClass'] = 'text-success';
-
- // if (node.stats.latency > 100 && node.stats.latency <= 1000)
- // set['readable.latencyClass'] = 'text-warning';
-
- // if (node.stats.latency > 1000)
- // set['readable.latencyClass'] = 'text-danger';
-
- // set['readable.latency'] = node.stats.latency + ' ms';
- // }
-
- // // update node
- // Nodes.upsert(node.id, {$set: set});
-}
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/helperFunctions.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/helperFunctions.js
deleted file mode 100644
index 370b5b4..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/helperFunctions.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function(){mainClass = function(node, bestBlock)
-{
-
- if(!node)
- return;
-
- if( ! node.active)
- return 'text-gray';
-
- if(node.peers === 0)
- return 'text-danger';
-
- return peerClass(node.peers, node.active);
-}
-
-peerClass = function(peers, active)
-{
- if( ! active)
- return 'text-gray';
-
- return (peers <= 1 ? 'text-danger' : (peers > 1 && peers < 4 ? 'text-warning' : 'text-success'));
-}
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/bootstrap.min.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/bootstrap.min.js
deleted file mode 100644
index 7f9573d..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/bootstrap.min.js
+++ /dev/null
@@ -1,14 +0,0 @@
-(function(){/*!
- * Bootstrap v3.3.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
-/*!
- * Generated using the Bootstrap Customizer (http://getbootstrap.com/customize/?id=cf8e15f9354657212a08)
- * Config saved to config.json and https://gist.github.com/cf8e15f9354657212a08
- */
-if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),s=i.data("bs.alert");s||i.data("bs.alert",s=new o(this)),"string"==typeof e&&s[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.1",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var s=t(this),n=s.attr("data-target");n||(n=s.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var a=t(n);e&&e.preventDefault(),a.length||(a=s.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var s=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=s,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.button"),n="object"==typeof e&&e;s||o.data("bs.button",s=new i(this,n)),"toggle"==e?s.toggle():e&&s.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.1",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,s=o.is("input")?"val":"html",n=o.data();e+="Text",null==n.resetText&&o.data("resetText",o[s]()),setTimeout(t.proxy(function(){o[s](null==n[e]?this.options[e]:n[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")&&(i.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&i.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target);o.hasClass("btn")||(o=o.closest(".btn")),e.call(o,"toggle"),i.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.carousel"),n=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:n.slide;s||o.data("bs.carousel",s=new i(this,n)),"number"==typeof e?s.to(e):a?s[a]():n.interval&&s.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.1",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i="prev"==t?-1:1,o=this.getItemIndex(e),s=(o+i)%this.$items.length;return this.$items.eq(s)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){return this.sliding?void 0:this.slide("next")},i.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},i.prototype.slide=function(e,o){var s=this.$element.find(".item.active"),n=o||this.getItemForDirection(e,s),a=this.interval,r="next"==e?"left":"right",l="next"==e?"first":"last",h=this;if(!n.length){if(!this.options.wrap)return;n=this.$element.find(".item")[l]()}if(n.hasClass("active"))return this.sliding=!1;var d=n[0],p=t.Event("slide.bs.carousel",{relatedTarget:d,direction:r});if(this.$element.trigger(p),!p.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var c=t(this.$indicators.children()[this.getItemIndex(n)]);c&&c.addClass("active")}var f=t.Event("slid.bs.carousel",{relatedTarget:d,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(n.addClass(e),n[0].offsetWidth,s.addClass(r),n.addClass(r),s.one("bsTransitionEnd",function(){n.removeClass([e,r].join(" ")).addClass("active"),s.removeClass(["active",r].join(" ")),h.sliding=!1,setTimeout(function(){h.$element.trigger(f)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(s.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger(f)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var s=function(i){var o,s=t(this),n=t(s.attr("data-target")||(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var a=t.extend({},n.data(),s.data()),r=s.attr("data-slide-to");r&&(a.interval=!1),e.call(n,a),r&&n.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",s).on("click.bs.carousel.data-api","[data-slide-to]",s),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(s).remove(),t(n).each(function(){var o=t(this),s=i(o),n={relatedTarget:this};s.hasClass("open")&&(s.trigger(e=t.Event("hide.bs.dropdown",n)),e.isDefaultPrevented()||(o.attr("aria-expanded","false"),s.removeClass("open").trigger("hidden.bs.dropdown",n)))}))}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var s=".dropdown-backdrop",n='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.1",a.prototype.toggle=function(o){var s=t(this);if(!s.is(".disabled, :disabled")){var n=i(s),a=n.hasClass("open");if(e(),!a){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t('').insertAfter(t(this)).on("click",e);var r={relatedTarget:this};if(n.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),n.toggleClass("open").trigger("shown.bs.dropdown",r)}return!1}},a.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var o=t(this);if(e.preventDefault(),e.stopPropagation(),!o.is(".disabled, :disabled")){var s=i(o),a=s.hasClass("open");if(!a&&27!=e.which||a&&27==e.which)return 27==e.which&&s.find(n).trigger("focus"),o.trigger("click");var r=" li:not(.divider):visible a",l=s.find('[role="menu"]'+r+', [role="listbox"]'+r);if(l.length){var h=l.index(e.target);38==e.which&&h>0&&h--,40==e.which&&h').prependTo(this.$element).on("click.dismiss.bs.modal",t.proxy(function(t){t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),n&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;n?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.options.backdrop&&this.adjustBackdrop(),this.adjustDialog()},i.prototype.adjustBackdrop=function(){this.$backdrop.css("height",0).css("height",this.$element[0].scrollHeight)},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){this.bodyIsOverflowing=document.body.scrollHeight>document.documentElement.clientHeight,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var o=t(this),s=o.attr("href"),n=t(o.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,"")),a=n.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},n.data(),o.data());o.is("a")&&i.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),e.call(n,a,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.tooltip"),n="object"==typeof e&&e,a=n&&n.selector;(s||"destroy"!=e)&&(a?(s||o.data("bs.tooltip",s={}),s[a]||(s[a]=new i(this,n))):s||o.data("bs.tooltip",s=new i(this,n)),"string"==typeof e&&s[e]())})}var i=function(t,e){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",t,e)};i.VERSION="3.3.1",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport);for(var s=this.options.trigger.split(" "),n=s.length;n--;){var a=s[n];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i&&i.$tip&&i.$tip.is(":visible")?void(i.hoverState="in"):(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),clearTimeout(i.timeout),i.hoverState="out",i.options.delay&&i.options.delay.hide?void(i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)):i.hide()},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var s=this,n=this.tip(),a=this.getUID(this.type);this.setContent(),n.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&n.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var d=this.getPosition(),p=n[0].offsetWidth,c=n[0].offsetHeight;if(h){var f=r,u=this.options.container?t(this.options.container):this.$element.parent(),g=this.getPosition(u);r="bottom"==r&&d.bottom+c>g.bottom?"top":"top"==r&&d.top-cg.width?"left":"left"==r&&d.left-pa.top+a.height&&(s.top=a.top+a.height-l)}else{var h=e.left-n,d=e.left+n+i;ha.width&&(s.left=a.left+a.width-d)}return s},i.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},i.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},i.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&(i=t(e.currentTarget).data("bs."+this.type),i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.popover"),n="object"==typeof e&&e,a=n&&n.selector;(s||"destroy"!=e)&&(a?(s||o.data("bs.popover",s={}),s[a]||(s[a]=new i(this,n))):s||o.data("bs.popover",s=new i(this,n)),"string"==typeof e&&s[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.1",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},i.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.tab");s||o.data("bs.tab",s=new i(this)),"string"==typeof e&&s[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.1",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a"),n=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:s[0]});if(s.trigger(n),e.trigger(a),!a.isDefaultPrevented()&&!n.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){s.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:s[0]})})}}},i.prototype.activate=function(e,o,s){function n(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),s&&s()}var a=o.find("> .active"),r=s&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var s=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',s).on("click.bs.tab.data-api",'[data-toggle="pill"]',s)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),s=o.data("bs.affix"),n="object"==typeof e&&e;s||o.data("bs.affix",s=new i(this,n)),"string"==typeof e&&s[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.1",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var s=this.$target.scrollTop(),n=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return i>s?"top":!1;if("bottom"==this.affixed)return null!=i?s+this.unpin<=n.top?!1:"bottom":t-o>=s+a?!1:"bottom";var r=null==this.affixed,l=r?s:n.top,h=r?a:e;return null!=i&&i>=l?"top":null!=o&&l+h>=t-o?"bottom":!1},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,s=o.top,n=o.bottom,a=t("body").height();"object"!=typeof o&&(n=s=o),"function"==typeof s&&(s=o.top(this.$element)),"function"==typeof n&&(n=o.bottom(this.$element));var r=this.getState(a,e,s,n);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-n})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery),+function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),s=i.data("bs.collapse"),n=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!s&&n.toggle&&"show"==e&&(n.toggle=!1),s||i.data("bs.collapse",s=new o(this,n)),"string"==typeof e&&s[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t(this.options.trigger).filter('[href="#'+e.id+'"], [data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.1",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0,trigger:'[data-toggle="collapse"]'},o.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,s=this.$parent&&this.$parent.find("> .panel").children(".in, .collapsing");if(!(s&&s.length&&(e=s.data("bs.collapse"),e&&e.transitioning))){var n=t.Event("show.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){s&&s.length&&(i.call(s,"hide"),e||s.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var s=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[i](0).one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(o.TRANSITION_DURATION):s.call(this)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var s=t(o);this.addAriaAndCollapsedClass(e(s),s)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var s=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=s,this
-},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var s=t(this);s.attr("data-target")||o.preventDefault();var n=e(s),a=n.data("bs.collapse"),r=a?"toggle":t.extend({},s.data(),{trigger:this});i.call(n,r)})}(jQuery),+function(t){"use strict";function e(i,o){var s=t.proxy(this.process,this);this.$body=t("body"),this.$scrollElement=t(t(i).is("body")?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),s=o.data("bs.scrollspy"),n="object"==typeof i&&i;s||o.data("bs.scrollspy",s=new e(this,n)),"string"==typeof i&&s[i]()})}e.VERSION="3.3.1",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e="offset",i=0;t.isWindow(this.$scrollElement[0])||(e="position",i=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var o=this;this.$body.find(this.selector).map(function(){var o=t(this),s=o.data("target")||o.attr("href"),n=/^#./.test(s)&&t(s);return n&&n.length&&n.is(":visible")&&[[n[e]().top+i,s]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){o.offsets.push(this[0]),o.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,n=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=n[n.length-1])&&this.activate(t);if(a&&e=s[t]&&(!s[t+1]||e<=s[t+1])&&this.activate(n[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var s=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(s,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery);
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/d3.tip.min.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/d3.tip.min.js
deleted file mode 100644
index ff52e71..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/d3.tip.min.js
+++ /dev/null
@@ -1,3 +0,0 @@
-(function(){d3.tip=function(){function t(t){v=d(t),w=v.createSVGPoint(),document.body.appendChild(x)}function e(){return"n"}function n(){return[0,0]}function r(){return" "}function o(){var t=y();return{top:t.n.y-x.offsetHeight,left:t.n.x-x.offsetWidth/2}}function l(){var t=y();return{top:t.s.y,left:t.s.x-x.offsetWidth/2}}function s(){var t=y();return{top:t.e.y-x.offsetHeight/2,left:t.e.x}}function f(){var t=y();return{top:t.w.y-x.offsetHeight/2,left:t.w.x-x.offsetWidth}}function i(){var t=y();return{top:t.nw.y-x.offsetHeight,left:t.nw.x-x.offsetWidth}}function u(){var t=y();return{top:t.ne.y-x.offsetHeight,left:t.ne.x}}function a(){var t=y();return{top:t.sw.y,left:t.sw.x-x.offsetWidth}}function c(){var t=y();return{top:t.se.y,left:t.e.x}}function p(){var t=d3.select(document.createElement("div"));return t.style({position:"absolute",opacity:0,pointerEvents:"none",boxSizing:"border-box"}),t.node()}function d(t){return t=t.node(),"svg"==t.tagName.toLowerCase()?t:t.ownerSVGElement}function y(){var t=T||d3.event.target,e={},n=t.getScreenCTM(),r=t.getBBox(),o=r.width,l=r.height,s=r.x,f=r.y,i=document.documentElement.scrollTop||document.body.scrollTop,u=document.documentElement.scrollLeft||document.body.scrollLeft;return w.x=s+u,w.y=f+i,e.nw=w.matrixTransform(n),w.x+=o,e.ne=w.matrixTransform(n),w.y+=l,e.se=w.matrixTransform(n),w.x-=o,e.sw=w.matrixTransform(n),w.y-=l/2,e.w=w.matrixTransform(n),w.x+=o,e.e=w.matrixTransform(n),w.x-=o/2,w.y-=l/2,e.n=w.matrixTransform(n),w.y+=l,e.s=w.matrixTransform(n),e}var m=e,g=n,h=r,x=p(),v=null,w=null,T=null;t.show=function(){var e=Array.prototype.slice.call(arguments);e[e.length-1]instanceof SVGElement&&(T=e.pop());var n,r=h.apply(this,e),o=g.apply(this,e),l=m.apply(this,e),s=d3.select(x),f=0;for(s.html(r).style({opacity:1,"pointer-events":"all"});f--;)s.classed(E[f],!1);return n=b.get(l).apply(this),s.classed(l,!0).style({top:n.top+o[0]+"px",left:n.left+o[1]+"px"}),t},t.hide=function(){return nodel=d3.select(x),nodel.style({opacity:0,"pointer-events":"none"}),t},t.attr=function(e){if(arguments.length<2&&"string"==typeof e)return d3.select(x).attr(e);var n=Array.prototype.slice.call(arguments);return d3.selection.prototype.attr.apply(d3.select(x),n),t},t.style=function(e){if(arguments.length<2&&"string"==typeof e)return d3.select(x).style(e);var n=Array.prototype.slice.call(arguments);return d3.selection.prototype.style.apply(d3.select(x),n),t},t.direction=function(e){return arguments.length?(m=null==e?e:d3.functor(e),t):m},t.offset=function(e){return arguments.length?(g=null==e?e:d3.functor(e),t):g},t.html=function(e){return arguments.length?(h=null==e?e:d3.functor(e),t):h};var b=d3.map({n:o,s:l,e:s,w:f,nw:i,ne:u,sw:a,se:c}),E=b.keys();return t};
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/datamaps.min.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/datamaps.min.js
deleted file mode 100644
index cc048db..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/datamaps.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-(function(){!function(){function a(a,b,c){return this.svg=m.select(a).append("svg").attr("width",c||a.offsetWidth).attr("data-width",c||a.offsetWidth).attr("class","datamap").attr("height",b||a.offsetHeight).style("overflow","hidden"),this.options.responsive&&(m.select(this.options.element).style({position:"relative","padding-bottom":"60%"}),m.select(this.options.element).select("svg").style({position:"absolute",width:"100%",height:"100%"}),m.select(this.options.element).select("svg").select("g").selectAll("path").style("vector-effect","non-scaling-stroke")),this.svg}function b(a,b){var c,d,e=b.width||a.offsetWidth,f=b.height||a.offsetHeight,g=this.svg;return b&&"undefined"==typeof b.scope&&(b.scope="world"),"usa"===b.scope?c=m.geo.albersUsa().scale(e).translate([e/2,f/2]):"world"===b.scope&&(c=m.geo[b.projection]().scale((e+1)/2/Math.PI).translate([e/2,f/("mercator"===b.projection?1.45:1.8)])),"orthographic"===b.projection&&(g.append("defs").append("path").datum({type:"Sphere"}).attr("id","sphere").attr("d",d),g.append("use").attr("class","stroke").attr("xlink:href","#sphere"),g.append("use").attr("class","fill").attr("xlink:href","#sphere"),c.scale(250).clipAngle(90).rotate(b.projectionConfig.rotation)),d=m.geo.path().projection(c),{path:d,projection:c}}function c(){m.select(".datamaps-style-block").empty()&&m.select("head").append("style").attr("class","datamaps-style-block").html('.datamap path.datamaps-graticule { fill: none; stroke: #777; stroke-width: 0.5px; stroke-opacity: .5; pointer-events: none; } .datamap .labels {pointer-events: none;} .datamap path {stroke: #FFFFFF; stroke-width: 1px;} .datamaps-legend dt, .datamaps-legend dd { float: left; margin: 0 3px 0 0;} .datamaps-legend dd {width: 20px; margin-right: 6px; border-radius: 3px;} .datamaps-legend {padding-bottom: 20px; z-index: 1001; position: absolute; left: 4px; font-size: 12px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;} .datamaps-hoverover {display: none; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } .hoverinfo {padding: 4px; border-radius: 1px; background-color: #FFF; box-shadow: 1px 1px 5px #CCC; font-size: 12px; border: 1px solid #CCC; } .hoverinfo hr {border:1px dotted #CCC; }')}function d(a){var b=this.options.fills,c=this.options.data||{},d=this.options.geographyConfig,e=this.svg.select("g.datamaps-subunits");e.empty()&&(e=this.addLayer("datamaps-subunits",null,!0));var f=n.feature(a,a.objects[this.options.scope]).features;d.hideAntarctica&&(f=f.filter(function(a){return"ATA"!==a.id}));var g=e.selectAll("path.datamaps-subunit").data(f);g.enter().append("path").attr("d",this.path).attr("class",function(a){return"datamaps-subunit "+a.id}).attr("data-info",function(a){return JSON.stringify(c[a.id])}).style("fill",function(a){var d;return c[a.id]&&(d=b[c[a.id].fillKey]),d||b.defaultFill}).style("stroke-width",d.borderWidth).style("stroke",d.borderColor)}function e(){function a(){this.parentNode.appendChild(this)}var b=this.svg,c=this,d=this.options.geographyConfig;(d.highlightOnHover||d.popupOnHover)&&b.selectAll(".datamaps-subunit").on("mouseover",function(e){var f=m.select(this);if(d.highlightOnHover){var g={fill:f.style("fill"),stroke:f.style("stroke"),"stroke-width":f.style("stroke-width"),"fill-opacity":f.style("fill-opacity")};f.style("fill",d.highlightFillColor).style("stroke",d.highlightBorderColor).style("stroke-width",d.highlightBorderWidth).style("fill-opacity",d.highlightFillOpacity).attr("data-previousAttributes",JSON.stringify(g)),/((MSIE)|(Trident))/.test||a.call(this)}d.popupOnHover&&c.updatePopup(f,e,d,b)}).on("mouseout",function(){var a=m.select(this);if(d.highlightOnHover){var b=JSON.parse(a.attr("data-previousAttributes"));for(var c in b)a.style(c,b[c])}a.on("mousemove",null),m.selectAll(".datamaps-hoverover").style("display","none")})}function f(a,b){if(b=b||{},this.options.fills){var c="",d="";b.legendTitle&&(c=""+b.legendTitle+"
"+c);for(var e in this.options.fills){if("defaultFill"===e){if(!b.defaultFillName)continue;d=b.defaultFillName}else d=b.labels&&b.labels[e]?b.labels[e]:e+": ";c+="- "+d+"
",c+='-
'}c+="
",m.select(this.options.element).append("div").attr("class","datamaps-legend").html(c)}}function g(){var a=m.geo.graticule();this.svg.insert("path",".datamaps-subunits").datum(a).attr("class","datamaps-graticule").attr("d",this.path)}function h(a,b,c){var d=this;if(this.svg,!b||b&&!b.slice)throw"Datamaps Error - arcs must be an array";"undefined"==typeof c&&(c=o.arcConfig);var e=a.selectAll("path.datamaps-arc").data(b,JSON.stringify),f=m.geo.path().projection(d.projection),g=m.geo.greatArc().source(function(a){return[a.origin.longitude,a.origin.latitude]}).target(function(a){return[a.destination.longitude,a.destination.latitude]});e.enter().append("svg:path").attr("class","datamaps-arc").style("stroke-linecap","round").style("stroke",function(a){return a.options&&a.options.strokeColor?a.options.strokeColor:c.strokeColor}).style("fill","none").style("stroke-width",function(a){return a.options&&a.options.strokeWidth?a.options.strokeWidth:c.strokeWidth}).attr("d",function(a){var b=d.latLngToXY(a.origin.latitude,a.origin.longitude),e=d.latLngToXY(a.destination.latitude,a.destination.longitude),h=[(b[0]+e[0])/2,(b[1]+e[1])/2];return c.greatArc?f(g(a)):"M"+b[0]+","+b[1]+"S"+(h[0]+50*c.arcSharpness)+","+(h[1]-75*c.arcSharpness)+","+e[0]+","+e[1]}).transition().delay(100).style("fill",function(){var a=this.getTotalLength();return this.style.transition=this.style.WebkitTransition="none",this.style.strokeDasharray=a+" "+a,this.style.strokeDashoffset=a,this.getBoundingClientRect(),this.style.transition=this.style.WebkitTransition="stroke-dashoffset "+c.animationSpeed+"ms ease-out",this.style.strokeDashoffset="0","none"}),e.exit().transition().style("opacity",0).remove()}function i(a,b){var c=this;b=b||{};var d=this.projection([-67.707617,42.722131]);this.svg.selectAll(".datamaps-subunit").attr("data-foo",function(e){var f=c.path.centroid(e),g=7.5,h=5;["FL","KY","MI"].indexOf(e.id)>-1&&(g=-2.5),"NY"===e.id&&(g=-1),"MI"===e.id&&(h=18),"LA"===e.id&&(g=13);var i,j;i=f[0]-g,j=f[1]+h;var k=["VT","NH","MA","RI","CT","NJ","DE","MD","DC"].indexOf(e.id);if(k>-1){var l=d[1];i=d[0],j=l+k*(2+(b.fontSize||12)),a.append("line").attr("x1",i-3).attr("y1",j-5).attr("x2",f[0]).attr("y2",f[1]).style("stroke",b.labelColor||"#000").style("stroke-width",b.lineWidth||1)}return a.append("text").attr("x",i).attr("y",j).style("font-size",(b.fontSize||10)+"px").style("font-family",b.fontFamily||"Verdana").style("fill",b.labelColor||"#000").text(e.id),"bar"})}function j(a,b,c){function d(a){return"undefined"!=typeof a&&"undefined"!=typeof a.latitude&&"undefined"!=typeof a.longitude}var e=this,f=this.options.fills,g=this.svg;if(!b||b&&!b.slice)throw"Datamaps Error - bubbles must be an array";var h=a.selectAll("circle.datamaps-bubble").data(b,JSON.stringify);h.enter().append("svg:circle").attr("class","datamaps-bubble").attr("cx",function(a){var b;return d(a)?b=e.latLngToXY(a.latitude,a.longitude):a.centered&&(b=e.path.centroid(g.select("path."+a.centered).data()[0])),b?b[0]:void 0}).attr("cy",function(a){var b;return d(a)?b=e.latLngToXY(a.latitude,a.longitude):a.centered&&(b=e.path.centroid(g.select("path."+a.centered).data()[0])),b?b[1]:void 0}).attr("r",0).attr("data-info",function(a){return JSON.stringify(a)}).style("stroke",function(a){return"undefined"!=typeof a.borderColor?a.borderColor:c.borderColor}).style("stroke-width",function(a){return"undefined"!=typeof a.borderWidth?a.borderWidth:c.borderWidth}).style("fill-opacity",function(a){return"undefined"!=typeof a.fillOpacity?a.fillOpacity:c.fillOpacity}).style("fill",function(a){var b=f[a.fillKey];return b||f.defaultFill}).on("mouseover",function(a){var b=m.select(this);if(c.highlightOnHover){var d={fill:b.style("fill"),stroke:b.style("stroke"),"stroke-width":b.style("stroke-width"),"fill-opacity":b.style("fill-opacity")};b.style("fill",c.highlightFillColor).style("stroke",c.highlightBorderColor).style("stroke-width",c.highlightBorderWidth).style("fill-opacity",c.highlightFillOpacity).attr("data-previousAttributes",JSON.stringify(d))}c.popupOnHover&&e.updatePopup(b,a,c,g)}).on("mouseout",function(){var a=m.select(this);if(c.highlightOnHover){var b=JSON.parse(a.attr("data-previousAttributes"));for(var d in b)a.style(d,b[d])}m.selectAll(".datamaps-hoverover").style("display","none")}).transition().duration(400).attr("r",function(a){return a.radius}),h.exit().transition().delay(c.exitDelay).attr("r",0).remove()}function k(a){return Array.prototype.slice.call(arguments,1).forEach(function(b){if(b)for(var c in b)null==a[c]&&(a[c]=b[c])}),a}function l(b){if("undefined"==typeof m||"undefined"==typeof n)throw new Error("Include d3.js (v3.0.3 or greater) and topojson on this page before creating a new map");return this.options=k(b,o),this.options.geographyConfig=k(b.geographyConfig,o.geographyConfig),this.options.projectionConfig=k(b.projectionConfig,o.projectionConfig),this.options.bubblesConfig=k(b.bubblesConfig,o.bubblesConfig),this.options.arcConfig=k(b.arcConfig,o.arcConfig),m.select(this.options.element).select("svg").length>0&&a.call(this,this.options.element,this.options.height,this.options.width),this.addPlugin("bubbles",j),this.addPlugin("legend",f),this.addPlugin("arc",h),this.addPlugin("labels",i),this.addPlugin("graticule",g),this.options.disableDefaultStyles||c(),this.draw()}var m=window.d3,n=window.topojson,o={scope:"world",responsive:!1,setProjection:b,projection:"equirectangular",dataType:"json",done:function(){},fills:{defaultFill:"#ABDDA4"},geographyConfig:{dataUrl:null,hideAntarctica:!0,borderWidth:1,borderColor:"#FDFDFD",popupTemplate:function(a){return''+a.properties.name+"
"},popupOnHover:!0,highlightOnHover:!0,highlightFillColor:"#FC8D59",highlightBorderColor:"rgba(250, 15, 160, 0.2)",highlightBorderWidth:2},projectionConfig:{rotation:[97,0]},bubblesConfig:{borderWidth:2,borderColor:"#FFFFFF",popupOnHover:!0,popupTemplate:function(a,b){return''+b.name+"
"},fillOpacity:.75,animate:!0,highlightOnHover:!0,highlightFillColor:"#FC8D59",highlightBorderColor:"rgba(250, 15, 160, 0.2)",highlightBorderWidth:2,highlightFillOpacity:.85,exitDelay:100},arcConfig:{strokeColor:"#DD1C77",strokeWidth:1,arcSharpness:1,animationSpeed:600}};l.prototype.resize=function(){var a=this,b=a.options;if(b.responsive){var c="-webkit-transform"in document.body.style?"-webkit-":"-moz-transform"in document.body.style?"-moz-":"-ms-transform"in document.body.style?"-ms-":"",d=b.element.clientWidth,e=m.select(b.element).select("svg").attr("data-width");m.select(b.element).select("svg").selectAll("g").style(c+"transform","scale("+d/e+")")}},l.prototype.draw=function(){function a(a){b.options.dataUrl&&m[b.options.dataType](b.options.dataUrl,function(a){if("csv"===b.options.dataType&&a&&a.slice){for(var c={},d=0;dSparkline: 1,4,6,6,8,5,3,5
-* $('.sparkline').sparkline();
-* There must be no spaces in the enclosed data set
-*
-* Otherwise values must be an array of numbers or null values
-* Sparkline: This text replaced if the browser is compatible
-* $('#sparkline1').sparkline([1,4,6,6,8,5,3,5])
-* $('#sparkline2').sparkline([1,4,6,null,null,5,3,5])
-*
-* Values can also be specified in an HTML comment, or as a values attribute:
-* Sparkline:
-* Sparkline:
-* $('.sparkline').sparkline();
-*
-* For line charts, x values can also be specified:
-* Sparkline: 1:1,2.7:4,3.4:6,5:6,6:8,8.7:5,9:3,10:5
-* $('#sparkline1').sparkline([ [1,1], [2.7,4], [3.4,6], [5,6], [6,8], [8.7,5], [9,3], [10,5] ])
-*
-* By default, options should be passed in as teh second argument to the sparkline function:
-* $('.sparkline').sparkline([1,2,3,4], {type: 'bar'})
-*
-* Options can also be set by passing them on the tag itself. This feature is disabled by default though
-* as there's a slight performance overhead:
-* $('.sparkline').sparkline([1,2,3,4], {enableTagOptions: true})
-* Sparkline: loading
-* Prefix all options supplied as tag attribute with "spark" (configurable by setting tagOptionPrefix)
-*
-* Supported options:
-* lineColor - Color of the line used for the chart
-* fillColor - Color used to fill in the chart - Set to '' or false for a transparent chart
-* width - Width of the chart - Defaults to 3 times the number of values in pixels
-* height - Height of the chart - Defaults to the height of the containing element
-* chartRangeMin - Specify the minimum value to use for the Y range of the chart - Defaults to the minimum value supplied
-* chartRangeMax - Specify the maximum value to use for the Y range of the chart - Defaults to the maximum value supplied
-* chartRangeClip - Clip out of range values to the max/min specified by chartRangeMin and chartRangeMax
-* chartRangeMinX - Specify the minimum value to use for the X range of the chart - Defaults to the minimum value supplied
-* chartRangeMaxX - Specify the maximum value to use for the X range of the chart - Defaults to the maximum value supplied
-* composite - If true then don't erase any existing chart attached to the tag, but draw
-* another chart over the top - Note that width and height are ignored if an
-* existing chart is detected.
-* tagValuesAttribute - Name of tag attribute to check for data values - Defaults to 'values'
-* enableTagOptions - Whether to check tags for sparkline options
-* tagOptionPrefix - Prefix used for options supplied as tag attributes - Defaults to 'spark'
-* disableHiddenCheck - If set to true, then the plugin will assume that charts will never be drawn into a
-* hidden dom element, avoding a browser reflow
-* disableInteraction - If set to true then all mouseover/click interaction behaviour will be disabled,
-* making the plugin perform much like it did in 1.x
-* disableTooltips - If set to true then tooltips will be disabled - Defaults to false (tooltips enabled)
-* disableHighlight - If set to true then highlighting of selected chart elements on mouseover will be disabled
-* defaults to false (highlights enabled)
-* highlightLighten - Factor to lighten/darken highlighted chart values by - Defaults to 1.4 for a 40% increase
-* tooltipContainer - Specify which DOM element the tooltip should be rendered into - defaults to document.body
-* tooltipClassname - Optional CSS classname to apply to tooltips - If not specified then a default style will be applied
-* tooltipOffsetX - How many pixels away from the mouse pointer to render the tooltip on the X axis
-* tooltipOffsetY - How many pixels away from the mouse pointer to render the tooltip on the r axis
-* tooltipFormatter - Optional callback that allows you to override the HTML displayed in the tooltip
-* callback is given arguments of (sparkline, options, fields)
-* tooltipChartTitle - If specified then the tooltip uses the string specified by this setting as a title
-* tooltipFormat - A format string or SPFormat object (or an array thereof for multiple entries)
-* to control the format of the tooltip
-* tooltipPrefix - A string to prepend to each field displayed in a tooltip
-* tooltipSuffix - A string to append to each field displayed in a tooltip
-* tooltipSkipNull - If true then null values will not have a tooltip displayed (defaults to true)
-* tooltipValueLookups - An object or range map to map field values to tooltip strings
-* (eg. to map -1 to "Lost", 0 to "Draw", and 1 to "Win")
-* numberFormatter - Optional callback for formatting numbers in tooltips
-* numberDigitGroupSep - Character to use for group separator in numbers "1,234" - Defaults to ","
-* numberDecimalMark - Character to use for the decimal point when formatting numbers - Defaults to "."
-* numberDigitGroupCount - Number of digits between group separator - Defaults to 3
-*
-* There are 7 types of sparkline, selected by supplying a "type" option of 'line' (default),
-* 'bar', 'tristate', 'bullet', 'discrete', 'pie' or 'box'
-* line - Line chart. Options:
-* spotColor - Set to '' to not end each line in a circular spot
-* minSpotColor - If set, color of spot at minimum value
-* maxSpotColor - If set, color of spot at maximum value
-* spotRadius - Radius in pixels
-* lineWidth - Width of line in pixels
-* normalRangeMin
-* normalRangeMax - If set draws a filled horizontal bar between these two values marking the "normal"
-* or expected range of values
-* normalRangeColor - Color to use for the above bar
-* drawNormalOnTop - Draw the normal range above the chart fill color if true
-* defaultPixelsPerValue - Defaults to 3 pixels of width for each value in the chart
-* highlightSpotColor - The color to use for drawing a highlight spot on mouseover - Set to null to disable
-* highlightLineColor - The color to use for drawing a highlight line on mouseover - Set to null to disable
-* valueSpots - Specify which points to draw spots on, and in which color. Accepts a range map
-*
-* bar - Bar chart. Options:
-* barColor - Color of bars for postive values
-* negBarColor - Color of bars for negative values
-* zeroColor - Color of bars with zero values
-* nullColor - Color of bars with null values - Defaults to omitting the bar entirely
-* barWidth - Width of bars in pixels
-* colorMap - Optional mappnig of values to colors to override the *BarColor values above
-* can be an Array of values to control the color of individual bars or a range map
-* to specify colors for individual ranges of values
-* barSpacing - Gap between bars in pixels
-* zeroAxis - Centers the y-axis around zero if true
-*
-* tristate - Charts values of win (>0), lose (<0) or draw (=0)
-* posBarColor - Color of win values
-* negBarColor - Color of lose values
-* zeroBarColor - Color of draw values
-* barWidth - Width of bars in pixels
-* barSpacing - Gap between bars in pixels
-* colorMap - Optional mappnig of values to colors to override the *BarColor values above
-* can be an Array of values to control the color of individual bars or a range map
-* to specify colors for individual ranges of values
-*
-* discrete - Options:
-* lineHeight - Height of each line in pixels - Defaults to 30% of the graph height
-* thesholdValue - Values less than this value will be drawn using thresholdColor instead of lineColor
-* thresholdColor
-*
-* bullet - Values for bullet graphs msut be in the order: target, performance, range1, range2, range3, ...
-* options:
-* targetColor - The color of the vertical target marker
-* targetWidth - The width of the target marker in pixels
-* performanceColor - The color of the performance measure horizontal bar
-* rangeColors - Colors to use for each qualitative range background color
-*
-* pie - Pie chart. Options:
-* sliceColors - An array of colors to use for pie slices
-* offset - Angle in degrees to offset the first slice - Try -90 or +90
-* borderWidth - Width of border to draw around the pie chart, in pixels - Defaults to 0 (no border)
-* borderColor - Color to use for the pie chart border - Defaults to #000
-*
-* box - Box plot. Options:
-* raw - Set to true to supply pre-computed plot points as values
-* values should be: low_outlier, low_whisker, q1, median, q3, high_whisker, high_outlier
-* When set to false you can supply any number of values and the box plot will
-* be computed for you. Default is false.
-* showOutliers - Set to true (default) to display outliers as circles
-* outlierIQR - Interquartile range used to determine outliers. Default 1.5
-* boxLineColor - Outline color of the box
-* boxFillColor - Fill color for the box
-* whiskerColor - Line color used for whiskers
-* outlierLineColor - Outline color of outlier circles
-* outlierFillColor - Fill color of the outlier circles
-* spotRadius - Radius of outlier circles
-* medianColor - Line color of the median line
-* target - Draw a target cross hair at the supplied value (default undefined)
-*
-*
-*
-* Examples:
-* $('#sparkline1').sparkline(myvalues, { lineColor: '#f00', fillColor: false });
-* $('.barsparks').sparkline('html', { type:'bar', height:'40px', barWidth:5 });
-* $('#tristate').sparkline([1,1,-1,1,0,0,-1], { type:'tristate' }):
-* $('#discrete').sparkline([1,3,4,5,5,3,4,5], { type:'discrete' });
-* $('#bullet').sparkline([10,12,12,9,7], { type:'bullet' });
-* $('#pie').sparkline([1,1,2], { type:'pie' });
-*/
-
-/*jslint regexp: true, browser: true, jquery: true, white: true, nomen: false, plusplus: false, maxerr: 500, indent: 4 */
-
-(function(document, Math, undefined) { // performance/minified-size optimization
-(function(factory) {
- if(typeof define === 'function' && define.amd) {
- define(['jquery'], factory);
- } else if (jQuery && !jQuery.fn.sparkline) {
- factory(jQuery);
- }
-}
-(function($) {
- 'use strict';
-
- var UNSET_OPTION = {},
- getDefaults, createClass, SPFormat, clipval, quartile, normalizeValue, normalizeValues,
- remove, isNumber, all, sum, addCSS, ensureArray, formatNumber, RangeMap,
- MouseHandler, Tooltip, barHighlightMixin,
- line, bar, tristate, discrete, bullet, pie, box, defaultStyles, initStyles,
- VShape, VCanvas_base, VCanvas_canvas, VCanvas_vml, pending, shapeCount = 0;
-
- /**
- * Default configuration settings
- */
- getDefaults = function () {
- return {
- // Settings common to most/all chart types
- common: {
- type: 'line',
- lineColor: '#00f',
- fillColor: '#cdf',
- defaultPixelsPerValue: 3,
- width: 'auto',
- height: 'auto',
- composite: false,
- tagValuesAttribute: 'values',
- tagOptionsPrefix: 'spark',
- enableTagOptions: false,
- enableHighlight: true,
- highlightLighten: 1.4,
- tooltipSkipNull: true,
- tooltipPrefix: '',
- tooltipSuffix: '',
- disableHiddenCheck: false,
- numberFormatter: false,
- numberDigitGroupCount: 3,
- numberDigitGroupSep: ',',
- numberDecimalMark: '.',
- disableTooltips: false,
- disableInteraction: false
- },
- // Defaults for line charts
- line: {
- spotColor: '#f80',
- highlightSpotColor: '#5f5',
- highlightLineColor: '#f22',
- spotRadius: 1.5,
- minSpotColor: '#f80',
- maxSpotColor: '#f80',
- lineWidth: 1,
- normalRangeMin: undefined,
- normalRangeMax: undefined,
- normalRangeColor: '#ccc',
- drawNormalOnTop: false,
- chartRangeMin: undefined,
- chartRangeMax: undefined,
- chartRangeMinX: undefined,
- chartRangeMaxX: undefined,
- tooltipFormat: new SPFormat('● {{prefix}}{{y}}{{suffix}}')
- },
- // Defaults for bar charts
- bar: {
- barColor: '#3366cc',
- negBarColor: '#f44',
- stackedBarColor: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
- '#dd4477', '#0099c6', '#990099'],
- zeroColor: undefined,
- nullColor: undefined,
- zeroAxis: true,
- barWidth: 4,
- barSpacing: 1,
- chartRangeMax: undefined,
- chartRangeMin: undefined,
- chartRangeClip: false,
- colorMap: undefined,
- tooltipFormat: new SPFormat('● {{prefix}}{{value}}{{suffix}}')
- },
- // Defaults for tristate charts
- tristate: {
- barWidth: 4,
- barSpacing: 1,
- posBarColor: '#6f6',
- negBarColor: '#f44',
- zeroBarColor: '#999',
- colorMap: {},
- tooltipFormat: new SPFormat('● {{value:map}}'),
- tooltipValueLookups: { map: { '-1': 'Loss', '0': 'Draw', '1': 'Win' } }
- },
- // Defaults for discrete charts
- discrete: {
- lineHeight: 'auto',
- thresholdColor: undefined,
- thresholdValue: 0,
- chartRangeMax: undefined,
- chartRangeMin: undefined,
- chartRangeClip: false,
- tooltipFormat: new SPFormat('{{prefix}}{{value}}{{suffix}}')
- },
- // Defaults for bullet charts
- bullet: {
- targetColor: '#f33',
- targetWidth: 3, // width of the target bar in pixels
- performanceColor: '#33f',
- rangeColors: ['#d3dafe', '#a8b6ff', '#7f94ff'],
- base: undefined, // set this to a number to change the base start number
- tooltipFormat: new SPFormat('{{fieldkey:fields}} - {{value}}'),
- tooltipValueLookups: { fields: {r: 'Range', p: 'Performance', t: 'Target'} }
- },
- // Defaults for pie charts
- pie: {
- offset: 0,
- sliceColors: ['#3366cc', '#dc3912', '#ff9900', '#109618', '#66aa00',
- '#dd4477', '#0099c6', '#990099'],
- borderWidth: 0,
- borderColor: '#000',
- tooltipFormat: new SPFormat('● {{value}} ({{percent.1}}%)')
- },
- // Defaults for box plots
- box: {
- raw: false,
- boxLineColor: '#000',
- boxFillColor: '#cdf',
- whiskerColor: '#000',
- outlierLineColor: '#333',
- outlierFillColor: '#fff',
- medianColor: '#f00',
- showOutliers: true,
- outlierIQR: 1.5,
- spotRadius: 1.5,
- target: undefined,
- targetColor: '#4a2',
- chartRangeMax: undefined,
- chartRangeMin: undefined,
- tooltipFormat: new SPFormat('{{field:fields}}: {{value}}'),
- tooltipFormatFieldlistKey: 'field',
- tooltipValueLookups: { fields: { lq: 'Lower Quartile', med: 'Median',
- uq: 'Upper Quartile', lo: 'Left Outlier', ro: 'Right Outlier',
- lw: 'Left Whisker', rw: 'Right Whisker'} }
- }
- };
- };
-
- // You can have tooltips use a css class other than jqstooltip by specifying tooltipClassname
- defaultStyles = '.jqstooltip { ' +
- 'position: absolute;' +
- 'left: 0px;' +
- 'top: 0px;' +
- 'visibility: hidden;' +
- 'background: rgb(0, 0, 0) transparent;' +
- 'background-color: rgba(0,0,0,0.6);' +
- 'filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);' +
- '-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";' +
- 'color: white;' +
- 'font: 10px arial, san serif;' +
- 'text-align: left;' +
- 'white-space: nowrap;' +
- 'padding: 5px;' +
- 'border: 1px solid white;' +
- 'z-index: 10000;' +
- '}' +
- '.jqsfield { ' +
- 'color: white;' +
- 'font: 10px arial, san serif;' +
- 'text-align: left;' +
- '}';
-
- /**
- * Utilities
- */
-
- createClass = function (/* [baseclass, [mixin, ...]], definition */) {
- var Class, args;
- Class = function () {
- this.init.apply(this, arguments);
- };
- if (arguments.length > 1) {
- if (arguments[0]) {
- Class.prototype = $.extend(new arguments[0](), arguments[arguments.length - 1]);
- Class._super = arguments[0].prototype;
- } else {
- Class.prototype = arguments[arguments.length - 1];
- }
- if (arguments.length > 2) {
- args = Array.prototype.slice.call(arguments, 1, -1);
- args.unshift(Class.prototype);
- $.extend.apply($, args);
- }
- } else {
- Class.prototype = arguments[0];
- }
- Class.prototype.cls = Class;
- return Class;
- };
-
- /**
- * Wraps a format string for tooltips
- * {{x}}
- * {{x.2}
- * {{x:months}}
- */
- $.SPFormatClass = SPFormat = createClass({
- fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
- precre: /(\w+)\.(\d+)/,
-
- init: function (format, fclass) {
- this.format = format;
- this.fclass = fclass;
- },
-
- render: function (fieldset, lookups, options) {
- var self = this,
- fields = fieldset,
- match, token, lookupkey, fieldvalue, prec;
- return this.format.replace(this.fre, function () {
- var lookup;
- token = arguments[1];
- lookupkey = arguments[3];
- match = self.precre.exec(token);
- if (match) {
- prec = match[2];
- token = match[1];
- } else {
- prec = false;
- }
- fieldvalue = fields[token];
- if (fieldvalue === undefined) {
- return '';
- }
- if (lookupkey && lookups && lookups[lookupkey]) {
- lookup = lookups[lookupkey];
- if (lookup.get) { // RangeMap
- return lookups[lookupkey].get(fieldvalue) || fieldvalue;
- } else {
- return lookups[lookupkey][fieldvalue] || fieldvalue;
- }
- }
- if (isNumber(fieldvalue)) {
- if (options.get('numberFormatter')) {
- fieldvalue = options.get('numberFormatter')(fieldvalue);
- } else {
- fieldvalue = formatNumber(fieldvalue, prec,
- options.get('numberDigitGroupCount'),
- options.get('numberDigitGroupSep'),
- options.get('numberDecimalMark'));
- }
- }
- return fieldvalue;
- });
- }
- });
-
- // convience method to avoid needing the new operator
- $.spformat = function(format, fclass) {
- return new SPFormat(format, fclass);
- };
-
- clipval = function (val, min, max) {
- if (val < min) {
- return min;
- }
- if (val > max) {
- return max;
- }
- return val;
- };
-
- quartile = function (values, q) {
- var vl;
- if (q === 2) {
- vl = Math.floor(values.length / 2);
- return values.length % 2 ? values[vl] : (values[vl-1] + values[vl]) / 2;
- } else {
- if (values.length % 2 ) { // odd
- vl = (values.length * q + q) / 4;
- return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];
- } else { //even
- vl = (values.length * q + 2) / 4;
- return vl % 1 ? (values[Math.floor(vl)] + values[Math.floor(vl) - 1]) / 2 : values[vl-1];
-
- }
- }
- };
-
- normalizeValue = function (val) {
- var nf;
- switch (val) {
- case 'undefined':
- val = undefined;
- break;
- case 'null':
- val = null;
- break;
- case 'true':
- val = true;
- break;
- case 'false':
- val = false;
- break;
- default:
- nf = parseFloat(val);
- if (val == nf) {
- val = nf;
- }
- }
- return val;
- };
-
- normalizeValues = function (vals) {
- var i, result = [];
- for (i = vals.length; i--;) {
- result[i] = normalizeValue(vals[i]);
- }
- return result;
- };
-
- remove = function (vals, filter) {
- var i, vl, result = [];
- for (i = 0, vl = vals.length; i < vl; i++) {
- if (vals[i] !== filter) {
- result.push(vals[i]);
- }
- }
- return result;
- };
-
- isNumber = function (num) {
- return !isNaN(parseFloat(num)) && isFinite(num);
- };
-
- formatNumber = function (num, prec, groupsize, groupsep, decsep) {
- var p, i;
- num = (prec === false ? parseFloat(num).toString() : num.toFixed(prec)).split('');
- p = (p = $.inArray('.', num)) < 0 ? num.length : p;
- if (p < num.length) {
- num[p] = decsep;
- }
- for (i = p - groupsize; i > 0; i -= groupsize) {
- num.splice(i, 0, groupsep);
- }
- return num.join('');
- };
-
- // determine if all values of an array match a value
- // returns true if the array is empty
- all = function (val, arr, ignoreNull) {
- var i;
- for (i = arr.length; i--; ) {
- if (ignoreNull && arr[i] === null) continue;
- if (arr[i] !== val) {
- return false;
- }
- }
- return true;
- };
-
- // sums the numeric values in an array, ignoring other values
- sum = function (vals) {
- var total = 0, i;
- for (i = vals.length; i--;) {
- total += typeof vals[i] === 'number' ? vals[i] : 0;
- }
- return total;
- };
-
- ensureArray = function (val) {
- return $.isArray(val) ? val : [val];
- };
-
- // http://paulirish.com/2008/bookmarklet-inject-new-css-rules/
- addCSS = function(css) {
- var tag;
- //if ('\v' == 'v') /* ie only */ {
- if (document.createStyleSheet) {
- document.createStyleSheet().cssText = css;
- } else {
- tag = document.createElement('style');
- tag.type = 'text/css';
- document.getElementsByTagName('head')[0].appendChild(tag);
- tag[(typeof document.body.style.WebkitAppearance == 'string') /* webkit only */ ? 'innerText' : 'innerHTML'] = css;
- }
- };
-
- // Provide a cross-browser interface to a few simple drawing primitives
- $.fn.simpledraw = function (width, height, useExisting, interact) {
- var target, mhandler;
- if (useExisting && (target = this.data('_jqs_vcanvas'))) {
- return target;
- }
-
- if ($.fn.sparkline.canvas === false) {
- // We've already determined that neither Canvas nor VML are available
- return false;
-
- } else if ($.fn.sparkline.canvas === undefined) {
- // No function defined yet -- need to see if we support Canvas or VML
- var el = document.createElement('canvas');
- if (!!(el.getContext && el.getContext('2d'))) {
- // Canvas is available
- $.fn.sparkline.canvas = function(width, height, target, interact) {
- return new VCanvas_canvas(width, height, target, interact);
- };
- } else if (document.namespaces && !document.namespaces.v) {
- // VML is available
- document.namespaces.add('v', 'urn:schemas-microsoft-com:vml', '#default#VML');
- $.fn.sparkline.canvas = function(width, height, target, interact) {
- return new VCanvas_vml(width, height, target);
- };
- } else {
- // Neither Canvas nor VML are available
- $.fn.sparkline.canvas = false;
- return false;
- }
- }
-
- if (width === undefined) {
- width = $(this).innerWidth();
- }
- if (height === undefined) {
- height = $(this).innerHeight();
- }
-
- target = $.fn.sparkline.canvas(width, height, this, interact);
-
- mhandler = $(this).data('_jqs_mhandler');
- if (mhandler) {
- mhandler.registerCanvas(target);
- }
- return target;
- };
-
- $.fn.cleardraw = function () {
- var target = this.data('_jqs_vcanvas');
- if (target) {
- target.reset();
- }
- };
-
- $.RangeMapClass = RangeMap = createClass({
- init: function (map) {
- var key, range, rangelist = [];
- for (key in map) {
- if (map.hasOwnProperty(key) && typeof key === 'string' && key.indexOf(':') > -1) {
- range = key.split(':');
- range[0] = range[0].length === 0 ? -Infinity : parseFloat(range[0]);
- range[1] = range[1].length === 0 ? Infinity : parseFloat(range[1]);
- range[2] = map[key];
- rangelist.push(range);
- }
- }
- this.map = map;
- this.rangelist = rangelist || false;
- },
-
- get: function (value) {
- var rangelist = this.rangelist,
- i, range, result;
- if ((result = this.map[value]) !== undefined) {
- return result;
- }
- if (rangelist) {
- for (i = rangelist.length; i--;) {
- range = rangelist[i];
- if (range[0] <= value && range[1] >= value) {
- return range[2];
- }
- }
- }
- return undefined;
- }
- });
-
- // Convenience function
- $.range_map = function(map) {
- return new RangeMap(map);
- };
-
- MouseHandler = createClass({
- init: function (el, options) {
- var $el = $(el);
- this.$el = $el;
- this.options = options;
- this.currentPageX = 0;
- this.currentPageY = 0;
- this.el = el;
- this.splist = [];
- this.tooltip = null;
- this.over = false;
- this.displayTooltips = !options.get('disableTooltips');
- this.highlightEnabled = !options.get('disableHighlight');
- },
-
- registerSparkline: function (sp) {
- this.splist.push(sp);
- if (this.over) {
- this.updateDisplay();
- }
- },
-
- registerCanvas: function (canvas) {
- var $canvas = $(canvas.canvas);
- this.canvas = canvas;
- this.$canvas = $canvas;
- $canvas.mouseenter($.proxy(this.mouseenter, this));
- $canvas.mouseleave($.proxy(this.mouseleave, this));
- $canvas.click($.proxy(this.mouseclick, this));
- },
-
- reset: function (removeTooltip) {
- this.splist = [];
- if (this.tooltip && removeTooltip) {
- this.tooltip.remove();
- this.tooltip = undefined;
- }
- },
-
- mouseclick: function (e) {
- var clickEvent = $.Event('sparklineClick');
- clickEvent.originalEvent = e;
- clickEvent.sparklines = this.splist;
- this.$el.trigger(clickEvent);
- },
-
- mouseenter: function (e) {
- $(document.body).unbind('mousemove.jqs');
- $(document.body).bind('mousemove.jqs', $.proxy(this.mousemove, this));
- this.over = true;
- this.currentPageX = e.pageX;
- this.currentPageY = e.pageY;
- this.currentEl = e.target;
- if (!this.tooltip && this.displayTooltips) {
- this.tooltip = new Tooltip(this.options);
- this.tooltip.updatePosition(e.pageX, e.pageY);
- }
- this.updateDisplay();
- },
-
- mouseleave: function () {
- $(document.body).unbind('mousemove.jqs');
- var splist = this.splist,
- spcount = splist.length,
- needsRefresh = false,
- sp, i;
- this.over = false;
- this.currentEl = null;
-
- if (this.tooltip) {
- this.tooltip.remove();
- this.tooltip = null;
- }
-
- for (i = 0; i < spcount; i++) {
- sp = splist[i];
- if (sp.clearRegionHighlight()) {
- needsRefresh = true;
- }
- }
-
- if (needsRefresh) {
- this.canvas.render();
- }
- },
-
- mousemove: function (e) {
- this.currentPageX = e.pageX;
- this.currentPageY = e.pageY;
- this.currentEl = e.target;
- if (this.tooltip) {
- this.tooltip.updatePosition(e.pageX, e.pageY);
- }
- this.updateDisplay();
- },
-
- updateDisplay: function () {
- var splist = this.splist,
- spcount = splist.length,
- needsRefresh = false,
- offset = this.$canvas.offset(),
- localX = this.currentPageX - offset.left,
- localY = this.currentPageY - offset.top,
- tooltiphtml, sp, i, result, changeEvent;
- if (!this.over) {
- return;
- }
- for (i = 0; i < spcount; i++) {
- sp = splist[i];
- result = sp.setRegionHighlight(this.currentEl, localX, localY);
- if (result) {
- needsRefresh = true;
- }
- }
- if (needsRefresh) {
- changeEvent = $.Event('sparklineRegionChange');
- changeEvent.sparklines = this.splist;
- this.$el.trigger(changeEvent);
- if (this.tooltip) {
- tooltiphtml = '';
- for (i = 0; i < spcount; i++) {
- sp = splist[i];
- tooltiphtml += sp.getCurrentRegionTooltip();
- }
- this.tooltip.setContent(tooltiphtml);
- }
- if (!this.disableHighlight) {
- this.canvas.render();
- }
- }
- if (result === null) {
- this.mouseleave();
- }
- }
- });
-
-
- Tooltip = createClass({
- sizeStyle: 'position: static !important;' +
- 'display: block !important;' +
- 'visibility: hidden !important;' +
- 'float: left !important;',
-
- init: function (options) {
- var tooltipClassname = options.get('tooltipClassname', 'jqstooltip'),
- sizetipStyle = this.sizeStyle,
- offset;
- this.container = options.get('tooltipContainer') || document.body;
- this.tooltipOffsetX = options.get('tooltipOffsetX', 10);
- this.tooltipOffsetY = options.get('tooltipOffsetY', 12);
- // remove any previous lingering tooltip
- $('#jqssizetip').remove();
- $('#jqstooltip').remove();
- this.sizetip = $('', {
- id: 'jqssizetip',
- style: sizetipStyle,
- 'class': tooltipClassname
- });
- this.tooltip = $('', {
- id: 'jqstooltip',
- 'class': tooltipClassname
- }).appendTo(this.container);
- // account for the container's location
- offset = this.tooltip.offset();
- this.offsetLeft = offset.left;
- this.offsetTop = offset.top;
- this.hidden = true;
- $(window).unbind('resize.jqs scroll.jqs');
- $(window).bind('resize.jqs scroll.jqs', $.proxy(this.updateWindowDims, this));
- this.updateWindowDims();
- },
-
- updateWindowDims: function () {
- this.scrollTop = $(window).scrollTop();
- this.scrollLeft = $(window).scrollLeft();
- this.scrollRight = this.scrollLeft + $(window).width();
- this.updatePosition();
- },
-
- getSize: function (content) {
- this.sizetip.html(content).appendTo(this.container);
- this.width = this.sizetip.width() + 1;
- this.height = this.sizetip.height();
- this.sizetip.remove();
- },
-
- setContent: function (content) {
- if (!content) {
- this.tooltip.css('visibility', 'hidden');
- this.hidden = true;
- return;
- }
- this.getSize(content);
- this.tooltip.html(content)
- .css({
- 'width': this.width,
- 'height': this.height,
- 'visibility': 'visible'
- });
- if (this.hidden) {
- this.hidden = false;
- this.updatePosition();
- }
- },
-
- updatePosition: function (x, y) {
- if (x === undefined) {
- if (this.mousex === undefined) {
- return;
- }
- x = this.mousex - this.offsetLeft;
- y = this.mousey - this.offsetTop;
-
- } else {
- this.mousex = x = x - this.offsetLeft;
- this.mousey = y = y - this.offsetTop;
- }
- if (!this.height || !this.width || this.hidden) {
- return;
- }
-
- y -= this.height + this.tooltipOffsetY;
- x += this.tooltipOffsetX;
-
- if (y < this.scrollTop) {
- y = this.scrollTop;
- }
- if (x < this.scrollLeft) {
- x = this.scrollLeft;
- } else if (x + this.width > this.scrollRight) {
- x = this.scrollRight - this.width;
- }
-
- this.tooltip.css({
- 'left': x,
- 'top': y
- });
- },
-
- remove: function () {
- this.tooltip.remove();
- this.sizetip.remove();
- this.sizetip = this.tooltip = undefined;
- $(window).unbind('resize.jqs scroll.jqs');
- }
- });
-
- initStyles = function() {
- addCSS(defaultStyles);
- };
-
- $(initStyles);
-
- pending = [];
- $.fn.sparkline = function (userValues, userOptions) {
- return this.each(function () {
- var options = new $.fn.sparkline.options(this, userOptions),
- $this = $(this),
- render, i;
- render = function () {
- var values, width, height, tmp, mhandler, sp, vals;
- if (userValues === 'html' || userValues === undefined) {
- vals = this.getAttribute(options.get('tagValuesAttribute'));
- if (vals === undefined || vals === null) {
- vals = $this.html();
- }
- values = vals.replace(/(^\s*\s*$)|\s+/g, '').split(',');
- } else {
- values = userValues;
- }
-
- width = options.get('width') === 'auto' ? values.length * options.get('defaultPixelsPerValue') : options.get('width');
- if (options.get('height') === 'auto') {
- if (!options.get('composite') || !$.data(this, '_jqs_vcanvas')) {
- // must be a better way to get the line height
- tmp = document.createElement('span');
- tmp.innerHTML = 'a';
- $this.html(tmp);
- height = $(tmp).innerHeight() || $(tmp).height();
- $(tmp).remove();
- tmp = null;
- }
- } else {
- height = options.get('height');
- }
-
- if (!options.get('disableInteraction')) {
- mhandler = $.data(this, '_jqs_mhandler');
- if (!mhandler) {
- mhandler = new MouseHandler(this, options);
- $.data(this, '_jqs_mhandler', mhandler);
- } else if (!options.get('composite')) {
- mhandler.reset();
- }
- } else {
- mhandler = false;
- }
-
- if (options.get('composite') && !$.data(this, '_jqs_vcanvas')) {
- if (!$.data(this, '_jqs_errnotify')) {
- alert('Attempted to attach a composite sparkline to an element with no existing sparkline');
- $.data(this, '_jqs_errnotify', true);
- }
- return;
- }
-
- sp = new $.fn.sparkline[options.get('type')](this, values, options, width, height);
-
- sp.render();
-
- if (mhandler) {
- mhandler.registerSparkline(sp);
- }
- };
- if (($(this).html() && !options.get('disableHiddenCheck') && $(this).is(':hidden')) || !$(this).parents('body').length) {
- if (!options.get('composite') && $.data(this, '_jqs_pending')) {
- // remove any existing references to the element
- for (i = pending.length; i; i--) {
- if (pending[i - 1][0] == this) {
- pending.splice(i - 1, 1);
- }
- }
- }
- pending.push([this, render]);
- $.data(this, '_jqs_pending', true);
- } else {
- render.call(this);
- }
- });
- };
-
- $.fn.sparkline.defaults = getDefaults();
-
-
- $.sparkline_display_visible = function () {
- var el, i, pl;
- var done = [];
- for (i = 0, pl = pending.length; i < pl; i++) {
- el = pending[i][0];
- if ($(el).is(':visible') && !$(el).parents().is(':hidden')) {
- pending[i][1].call(el);
- $.data(pending[i][0], '_jqs_pending', false);
- done.push(i);
- } else if (!$(el).closest('html').length && !$.data(el, '_jqs_pending')) {
- // element has been inserted and removed from the DOM
- // If it was not yet inserted into the dom then the .data request
- // will return true.
- // removing from the dom causes the data to be removed.
- $.data(pending[i][0], '_jqs_pending', false);
- done.push(i);
- }
- }
- for (i = done.length; i; i--) {
- pending.splice(done[i - 1], 1);
- }
- };
-
-
- /**
- * User option handler
- */
- $.fn.sparkline.options = createClass({
- init: function (tag, userOptions) {
- var extendedOptions, defaults, base, tagOptionType;
- this.userOptions = userOptions = userOptions || {};
- this.tag = tag;
- this.tagValCache = {};
- defaults = $.fn.sparkline.defaults;
- base = defaults.common;
- this.tagOptionsPrefix = userOptions.enableTagOptions && (userOptions.tagOptionsPrefix || base.tagOptionsPrefix);
-
- tagOptionType = this.getTagSetting('type');
- if (tagOptionType === UNSET_OPTION) {
- extendedOptions = defaults[userOptions.type || base.type];
- } else {
- extendedOptions = defaults[tagOptionType];
- }
- this.mergedOptions = $.extend({}, base, extendedOptions, userOptions);
- },
-
-
- getTagSetting: function (key) {
- var prefix = this.tagOptionsPrefix,
- val, i, pairs, keyval;
- if (prefix === false || prefix === undefined) {
- return UNSET_OPTION;
- }
- if (this.tagValCache.hasOwnProperty(key)) {
- val = this.tagValCache.key;
- } else {
- val = this.tag.getAttribute(prefix + key);
- if (val === undefined || val === null) {
- val = UNSET_OPTION;
- } else if (val.substr(0, 1) === '[') {
- val = val.substr(1, val.length - 2).split(',');
- for (i = val.length; i--;) {
- val[i] = normalizeValue(val[i].replace(/(^\s*)|(\s*$)/g, ''));
- }
- } else if (val.substr(0, 1) === '{') {
- pairs = val.substr(1, val.length - 2).split(',');
- val = {};
- for (i = pairs.length; i--;) {
- keyval = pairs[i].split(':', 2);
- val[keyval[0].replace(/(^\s*)|(\s*$)/g, '')] = normalizeValue(keyval[1].replace(/(^\s*)|(\s*$)/g, ''));
- }
- } else {
- val = normalizeValue(val);
- }
- this.tagValCache.key = val;
- }
- return val;
- },
-
- get: function (key, defaultval) {
- var tagOption = this.getTagSetting(key),
- result;
- if (tagOption !== UNSET_OPTION) {
- return tagOption;
- }
- return (result = this.mergedOptions[key]) === undefined ? defaultval : result;
- }
- });
-
-
- $.fn.sparkline._base = createClass({
- disabled: false,
-
- init: function (el, values, options, width, height) {
- this.el = el;
- this.$el = $(el);
- this.values = values;
- this.options = options;
- this.width = width;
- this.height = height;
- this.currentRegion = undefined;
- },
-
- /**
- * Setup the canvas
- */
- initTarget: function () {
- var interactive = !this.options.get('disableInteraction');
- if (!(this.target = this.$el.simpledraw(this.width, this.height, this.options.get('composite'), interactive))) {
- this.disabled = true;
- } else {
- this.canvasWidth = this.target.pixelWidth;
- this.canvasHeight = this.target.pixelHeight;
- }
- },
-
- /**
- * Actually render the chart to the canvas
- */
- render: function () {
- if (this.disabled) {
- this.el.innerHTML = '';
- return false;
- }
- return true;
- },
-
- /**
- * Return a region id for a given x/y co-ordinate
- */
- getRegion: function (x, y) {
- },
-
- /**
- * Highlight an item based on the moused-over x,y co-ordinate
- */
- setRegionHighlight: function (el, x, y) {
- var currentRegion = this.currentRegion,
- highlightEnabled = !this.options.get('disableHighlight'),
- newRegion;
- if (x > this.canvasWidth || y > this.canvasHeight || x < 0 || y < 0) {
- return null;
- }
- newRegion = this.getRegion(el, x, y);
- if (currentRegion !== newRegion) {
- if (currentRegion !== undefined && highlightEnabled) {
- this.removeHighlight();
- }
- this.currentRegion = newRegion;
- if (newRegion !== undefined && highlightEnabled) {
- this.renderHighlight();
- }
- return true;
- }
- return false;
- },
-
- /**
- * Reset any currently highlighted item
- */
- clearRegionHighlight: function () {
- if (this.currentRegion !== undefined) {
- this.removeHighlight();
- this.currentRegion = undefined;
- return true;
- }
- return false;
- },
-
- renderHighlight: function () {
- this.changeHighlight(true);
- },
-
- removeHighlight: function () {
- this.changeHighlight(false);
- },
-
- changeHighlight: function (highlight) {},
-
- /**
- * Fetch the HTML to display as a tooltip
- */
- getCurrentRegionTooltip: function () {
- var options = this.options,
- header = '',
- entries = [],
- fields, formats, formatlen, fclass, text, i,
- showFields, showFieldsKey, newFields, fv,
- formatter, format, fieldlen, j;
- if (this.currentRegion === undefined) {
- return '';
- }
- fields = this.getCurrentRegionFields();
- formatter = options.get('tooltipFormatter');
- if (formatter) {
- return formatter(this, options, fields);
- }
- if (options.get('tooltipChartTitle')) {
- header += '' + options.get('tooltipChartTitle') + '
\n';
- }
- formats = this.options.get('tooltipFormat');
- if (!formats) {
- return '';
- }
- if (!$.isArray(formats)) {
- formats = [formats];
- }
- if (!$.isArray(fields)) {
- fields = [fields];
- }
- showFields = this.options.get('tooltipFormatFieldlist');
- showFieldsKey = this.options.get('tooltipFormatFieldlistKey');
- if (showFields && showFieldsKey) {
- // user-selected ordering of fields
- newFields = [];
- for (i = fields.length; i--;) {
- fv = fields[i][showFieldsKey];
- if ((j = $.inArray(fv, showFields)) != -1) {
- newFields[j] = fields[i];
- }
- }
- fields = newFields;
- }
- formatlen = formats.length;
- fieldlen = fields.length;
- for (i = 0; i < formatlen; i++) {
- format = formats[i];
- if (typeof format === 'string') {
- format = new SPFormat(format);
- }
- fclass = format.fclass || 'jqsfield';
- for (j = 0; j < fieldlen; j++) {
- if (!fields[j].isNull || !options.get('tooltipSkipNull')) {
- $.extend(fields[j], {
- prefix: options.get('tooltipPrefix'),
- suffix: options.get('tooltipSuffix')
- });
- text = format.render(fields[j], options.get('tooltipValueLookups'), options);
- entries.push('' + text + '
');
- }
- }
- }
- if (entries.length) {
- return header + entries.join('\n');
- }
- return '';
- },
-
- getCurrentRegionFields: function () {},
-
- calcHighlightColor: function (color, options) {
- var highlightColor = options.get('highlightColor'),
- lighten = options.get('highlightLighten'),
- parse, mult, rgbnew, i;
- if (highlightColor) {
- return highlightColor;
- }
- if (lighten) {
- // extract RGB values
- parse = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(color) || /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(color);
- if (parse) {
- rgbnew = [];
- mult = color.length === 4 ? 16 : 1;
- for (i = 0; i < 3; i++) {
- rgbnew[i] = clipval(Math.round(parseInt(parse[i + 1], 16) * mult * lighten), 0, 255);
- }
- return 'rgb(' + rgbnew.join(',') + ')';
- }
-
- }
- return color;
- }
-
- });
-
- barHighlightMixin = {
- changeHighlight: function (highlight) {
- var currentRegion = this.currentRegion,
- target = this.target,
- shapeids = this.regionShapes[currentRegion],
- newShapes;
- // will be null if the region value was null
- if (shapeids) {
- newShapes = this.renderRegion(currentRegion, highlight);
- if ($.isArray(newShapes) || $.isArray(shapeids)) {
- target.replaceWithShapes(shapeids, newShapes);
- this.regionShapes[currentRegion] = $.map(newShapes, function (newShape) {
- return newShape.id;
- });
- } else {
- target.replaceWithShape(shapeids, newShapes);
- this.regionShapes[currentRegion] = newShapes.id;
- }
- }
- },
-
- render: function () {
- var values = this.values,
- target = this.target,
- regionShapes = this.regionShapes,
- shapes, ids, i, j;
-
- if (!this.cls._super.render.call(this)) {
- return;
- }
- for (i = values.length; i--;) {
- shapes = this.renderRegion(i);
- if (shapes) {
- if ($.isArray(shapes)) {
- ids = [];
- for (j = shapes.length; j--;) {
- shapes[j].append();
- ids.push(shapes[j].id);
- }
- regionShapes[i] = ids;
- } else {
- shapes.append();
- regionShapes[i] = shapes.id; // store just the shapeid
- }
- } else {
- // null value
- regionShapes[i] = null;
- }
- }
- target.render();
- }
- };
-
- /**
- * Line charts
- */
- $.fn.sparkline.line = line = createClass($.fn.sparkline._base, {
- type: 'line',
-
- init: function (el, values, options, width, height) {
- line._super.init.call(this, el, values, options, width, height);
- this.vertices = [];
- this.regionMap = [];
- this.xvalues = [];
- this.yvalues = [];
- this.yminmax = [];
- this.hightlightSpotId = null;
- this.lastShapeId = null;
- this.initTarget();
- },
-
- getRegion: function (el, x, y) {
- var i,
- regionMap = this.regionMap; // maps regions to value positions
- for (i = regionMap.length; i--;) {
- if (regionMap[i] !== null && x >= regionMap[i][0] && x <= regionMap[i][1]) {
- return regionMap[i][2];
- }
- }
- return undefined;
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion;
- return {
- isNull: this.yvalues[currentRegion] === null,
- x: this.xvalues[currentRegion],
- y: this.yvalues[currentRegion],
- color: this.options.get('lineColor'),
- fillColor: this.options.get('fillColor'),
- offset: currentRegion
- };
- },
-
- renderHighlight: function () {
- var currentRegion = this.currentRegion,
- target = this.target,
- vertex = this.vertices[currentRegion],
- options = this.options,
- spotRadius = options.get('spotRadius'),
- highlightSpotColor = options.get('highlightSpotColor'),
- highlightLineColor = options.get('highlightLineColor'),
- highlightSpot, highlightLine;
-
- if (!vertex) {
- return;
- }
- if (spotRadius && highlightSpotColor) {
- highlightSpot = target.drawCircle(vertex[0], vertex[1],
- spotRadius, undefined, highlightSpotColor);
- this.highlightSpotId = highlightSpot.id;
- target.insertAfterShape(this.lastShapeId, highlightSpot);
- }
- if (highlightLineColor) {
- highlightLine = target.drawLine(vertex[0], this.canvasTop, vertex[0],
- this.canvasTop + this.canvasHeight, highlightLineColor);
- this.highlightLineId = highlightLine.id;
- target.insertAfterShape(this.lastShapeId, highlightLine);
- }
- },
-
- removeHighlight: function () {
- var target = this.target;
- if (this.highlightSpotId) {
- target.removeShapeId(this.highlightSpotId);
- this.highlightSpotId = null;
- }
- if (this.highlightLineId) {
- target.removeShapeId(this.highlightLineId);
- this.highlightLineId = null;
- }
- },
-
- scanValues: function () {
- var values = this.values,
- valcount = values.length,
- xvalues = this.xvalues,
- yvalues = this.yvalues,
- yminmax = this.yminmax,
- i, val, isStr, isArray, sp;
- for (i = 0; i < valcount; i++) {
- val = values[i];
- isStr = typeof(values[i]) === 'string';
- isArray = typeof(values[i]) === 'object' && values[i] instanceof Array;
- sp = isStr && values[i].split(':');
- if (isStr && sp.length === 2) { // x:y
- xvalues.push(Number(sp[0]));
- yvalues.push(Number(sp[1]));
- yminmax.push(Number(sp[1]));
- } else if (isArray) {
- xvalues.push(val[0]);
- yvalues.push(val[1]);
- yminmax.push(val[1]);
- } else {
- xvalues.push(i);
- if (values[i] === null || values[i] === 'null') {
- yvalues.push(null);
- } else {
- yvalues.push(Number(val));
- yminmax.push(Number(val));
- }
- }
- }
- if (this.options.get('xvalues')) {
- xvalues = this.options.get('xvalues');
- }
-
- this.maxy = this.maxyorg = Math.max.apply(Math, yminmax);
- this.miny = this.minyorg = Math.min.apply(Math, yminmax);
-
- this.maxx = Math.max.apply(Math, xvalues);
- this.minx = Math.min.apply(Math, xvalues);
-
- this.xvalues = xvalues;
- this.yvalues = yvalues;
- this.yminmax = yminmax;
-
- },
-
- processRangeOptions: function () {
- var options = this.options,
- normalRangeMin = options.get('normalRangeMin'),
- normalRangeMax = options.get('normalRangeMax');
-
- if (normalRangeMin !== undefined) {
- if (normalRangeMin < this.miny) {
- this.miny = normalRangeMin;
- }
- if (normalRangeMax > this.maxy) {
- this.maxy = normalRangeMax;
- }
- }
- if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.miny)) {
- this.miny = options.get('chartRangeMin');
- }
- if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.maxy)) {
- this.maxy = options.get('chartRangeMax');
- }
- if (options.get('chartRangeMinX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMinX') < this.minx)) {
- this.minx = options.get('chartRangeMinX');
- }
- if (options.get('chartRangeMaxX') !== undefined && (options.get('chartRangeClipX') || options.get('chartRangeMaxX') > this.maxx)) {
- this.maxx = options.get('chartRangeMaxX');
- }
-
- },
-
- drawNormalRange: function (canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey) {
- var normalRangeMin = this.options.get('normalRangeMin'),
- normalRangeMax = this.options.get('normalRangeMax'),
- ytop = canvasTop + Math.round(canvasHeight - (canvasHeight * ((normalRangeMax - this.miny) / rangey))),
- height = Math.round((canvasHeight * (normalRangeMax - normalRangeMin)) / rangey);
- this.target.drawRect(canvasLeft, ytop, canvasWidth, height, undefined, this.options.get('normalRangeColor')).append();
- },
-
- render: function () {
- var options = this.options,
- target = this.target,
- canvasWidth = this.canvasWidth,
- canvasHeight = this.canvasHeight,
- vertices = this.vertices,
- spotRadius = options.get('spotRadius'),
- regionMap = this.regionMap,
- rangex, rangey, yvallast,
- canvasTop, canvasLeft,
- vertex, path, paths, x, y, xnext, xpos, xposnext,
- last, next, yvalcount, lineShapes, fillShapes, plen,
- valueSpots, hlSpotsEnabled, color, xvalues, yvalues, i;
-
- if (!line._super.render.call(this)) {
- return;
- }
-
- this.scanValues();
- this.processRangeOptions();
-
- xvalues = this.xvalues;
- yvalues = this.yvalues;
-
- if (!this.yminmax.length || this.yvalues.length < 2) {
- // empty or all null valuess
- return;
- }
-
- canvasTop = canvasLeft = 0;
-
- rangex = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx;
- rangey = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny;
- yvallast = this.yvalues.length - 1;
-
- if (spotRadius && (canvasWidth < (spotRadius * 4) || canvasHeight < (spotRadius * 4))) {
- spotRadius = 0;
- }
- if (spotRadius) {
- // adjust the canvas size as required so that spots will fit
- hlSpotsEnabled = options.get('highlightSpotColor') && !options.get('disableInteraction');
- if (hlSpotsEnabled || options.get('minSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.miny)) {
- canvasHeight -= Math.ceil(spotRadius);
- }
- if (hlSpotsEnabled || options.get('maxSpotColor') || (options.get('spotColor') && yvalues[yvallast] === this.maxy)) {
- canvasHeight -= Math.ceil(spotRadius);
- canvasTop += Math.ceil(spotRadius);
- }
- if (hlSpotsEnabled ||
- ((options.get('minSpotColor') || options.get('maxSpotColor')) && (yvalues[0] === this.miny || yvalues[0] === this.maxy))) {
- canvasLeft += Math.ceil(spotRadius);
- canvasWidth -= Math.ceil(spotRadius);
- }
- if (hlSpotsEnabled || options.get('spotColor') ||
- (options.get('minSpotColor') || options.get('maxSpotColor') &&
- (yvalues[yvallast] === this.miny || yvalues[yvallast] === this.maxy))) {
- canvasWidth -= Math.ceil(spotRadius);
- }
- }
-
-
- canvasHeight--;
-
- if (options.get('normalRangeMin') !== undefined && !options.get('drawNormalOnTop')) {
- this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
- }
-
- path = [];
- paths = [path];
- last = next = null;
- yvalcount = yvalues.length;
- for (i = 0; i < yvalcount; i++) {
- x = xvalues[i];
- xnext = xvalues[i + 1];
- y = yvalues[i];
- xpos = canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex));
- xposnext = i < yvalcount - 1 ? canvasLeft + Math.round((xnext - this.minx) * (canvasWidth / rangex)) : canvasWidth;
- next = xpos + ((xposnext - xpos) / 2);
- regionMap[i] = [last || 0, next, i];
- last = next;
- if (y === null) {
- if (i) {
- if (yvalues[i - 1] !== null) {
- path = [];
- paths.push(path);
- }
- vertices.push(null);
- }
- } else {
- if (y < this.miny) {
- y = this.miny;
- }
- if (y > this.maxy) {
- y = this.maxy;
- }
- if (!path.length) {
- // previous value was null
- path.push([xpos, canvasTop + canvasHeight]);
- }
- vertex = [xpos, canvasTop + Math.round(canvasHeight - (canvasHeight * ((y - this.miny) / rangey)))];
- path.push(vertex);
- vertices.push(vertex);
- }
- }
-
- lineShapes = [];
- fillShapes = [];
- plen = paths.length;
- for (i = 0; i < plen; i++) {
- path = paths[i];
- if (path.length) {
- if (options.get('fillColor')) {
- path.push([path[path.length - 1][0], (canvasTop + canvasHeight)]);
- fillShapes.push(path.slice(0));
- path.pop();
- }
- // if there's only a single point in this path, then we want to display it
- // as a vertical line which means we keep path[0] as is
- if (path.length > 2) {
- // else we want the first value
- path[0] = [path[0][0], path[1][1]];
- }
- lineShapes.push(path);
- }
- }
-
- // draw the fill first, then optionally the normal range, then the line on top of that
- plen = fillShapes.length;
- for (i = 0; i < plen; i++) {
- target.drawShape(fillShapes[i],
- options.get('fillColor'), options.get('fillColor')).append();
- }
-
- if (options.get('normalRangeMin') !== undefined && options.get('drawNormalOnTop')) {
- this.drawNormalRange(canvasLeft, canvasTop, canvasHeight, canvasWidth, rangey);
- }
-
- plen = lineShapes.length;
- for (i = 0; i < plen; i++) {
- target.drawShape(lineShapes[i], options.get('lineColor'), undefined,
- options.get('lineWidth')).append();
- }
-
- if (spotRadius && options.get('valueSpots')) {
- valueSpots = options.get('valueSpots');
- if (valueSpots.get === undefined) {
- valueSpots = new RangeMap(valueSpots);
- }
- for (i = 0; i < yvalcount; i++) {
- color = valueSpots.get(yvalues[i]);
- if (color) {
- target.drawCircle(canvasLeft + Math.round((xvalues[i] - this.minx) * (canvasWidth / rangex)),
- canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[i] - this.miny) / rangey))),
- spotRadius, undefined,
- color).append();
- }
- }
-
- }
- if (spotRadius && options.get('spotColor') && yvalues[yvallast] !== null) {
- target.drawCircle(canvasLeft + Math.round((xvalues[xvalues.length - 1] - this.minx) * (canvasWidth / rangex)),
- canvasTop + Math.round(canvasHeight - (canvasHeight * ((yvalues[yvallast] - this.miny) / rangey))),
- spotRadius, undefined,
- options.get('spotColor')).append();
- }
- if (this.maxy !== this.minyorg) {
- if (spotRadius && options.get('minSpotColor')) {
- x = xvalues[$.inArray(this.minyorg, yvalues)];
- target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
- canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.minyorg - this.miny) / rangey))),
- spotRadius, undefined,
- options.get('minSpotColor')).append();
- }
- if (spotRadius && options.get('maxSpotColor')) {
- x = xvalues[$.inArray(this.maxyorg, yvalues)];
- target.drawCircle(canvasLeft + Math.round((x - this.minx) * (canvasWidth / rangex)),
- canvasTop + Math.round(canvasHeight - (canvasHeight * ((this.maxyorg - this.miny) / rangey))),
- spotRadius, undefined,
- options.get('maxSpotColor')).append();
- }
- }
-
- this.lastShapeId = target.getLastShapeId();
- this.canvasTop = canvasTop;
- target.render();
- }
- });
-
- /**
- * Bar charts
- */
- $.fn.sparkline.bar = bar = createClass($.fn.sparkline._base, barHighlightMixin, {
- type: 'bar',
-
- init: function (el, values, options, width, height) {
- var barWidth = parseInt(options.get('barWidth'), 10),
- barSpacing = parseInt(options.get('barSpacing'), 10),
- chartRangeMin = options.get('chartRangeMin'),
- chartRangeMax = options.get('chartRangeMax'),
- chartRangeClip = options.get('chartRangeClip'),
- stackMin = Infinity,
- stackMax = -Infinity,
- isStackString, groupMin, groupMax, stackRanges,
- numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax,
- stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf;
- bar._super.init.call(this, el, values, options, width, height);
-
- // scan values to determine whether to stack bars
- for (i = 0, vlen = values.length; i < vlen; i++) {
- val = values[i];
- isStackString = typeof(val) === 'string' && val.indexOf(':') > -1;
- if (isStackString || $.isArray(val)) {
- stacked = true;
- if (isStackString) {
- val = values[i] = normalizeValues(val.split(':'));
- }
- val = remove(val, null); // min/max will treat null as zero
- groupMin = Math.min.apply(Math, val);
- groupMax = Math.max.apply(Math, val);
- if (groupMin < stackMin) {
- stackMin = groupMin;
- }
- if (groupMax > stackMax) {
- stackMax = groupMax;
- }
- }
- }
-
- this.stacked = stacked;
- this.regionShapes = {};
- this.barWidth = barWidth;
- this.barSpacing = barSpacing;
- this.totalBarWidth = barWidth + barSpacing;
- this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
-
- this.initTarget();
-
- if (chartRangeClip) {
- clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin;
- clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax;
- }
-
- numValues = [];
- stackRanges = stacked ? [] : numValues;
- var stackTotals = [];
- var stackRangesNeg = [];
- for (i = 0, vlen = values.length; i < vlen; i++) {
- if (stacked) {
- vlist = values[i];
- values[i] = svals = [];
- stackTotals[i] = 0;
- stackRanges[i] = stackRangesNeg[i] = 0;
- for (j = 0, slen = vlist.length; j < slen; j++) {
- val = svals[j] = chartRangeClip ? clipval(vlist[j], clipMin, clipMax) : vlist[j];
- if (val !== null) {
- if (val > 0) {
- stackTotals[i] += val;
- }
- if (stackMin < 0 && stackMax > 0) {
- if (val < 0) {
- stackRangesNeg[i] += Math.abs(val);
- } else {
- stackRanges[i] += val;
- }
- } else {
- stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin));
- }
- numValues.push(val);
- }
- }
- } else {
- val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i];
- val = values[i] = normalizeValue(val);
- if (val !== null) {
- numValues.push(val);
- }
- }
- }
- this.max = max = Math.max.apply(Math, numValues);
- this.min = min = Math.min.apply(Math, numValues);
- this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max;
- this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min;
-
- if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) {
- min = options.get('chartRangeMin');
- }
- if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) {
- max = options.get('chartRangeMax');
- }
-
- this.zeroAxis = zeroAxis = options.get('zeroAxis', true);
- if (min <= 0 && max >= 0 && zeroAxis) {
- xaxisOffset = 0;
- } else if (zeroAxis == false) {
- xaxisOffset = min;
- } else if (min > 0) {
- xaxisOffset = min;
- } else {
- xaxisOffset = max;
- }
- this.xaxisOffset = xaxisOffset;
-
- range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min;
-
- // as we plot zero/min values a single pixel line, we add a pixel to all other
- // values - Reduce the effective canvas size to suit
- this.canvasHeightEf = (zeroAxis && min < 0) ? this.canvasHeight - 2 : this.canvasHeight - 1;
-
- if (min < xaxisOffset) {
- yMaxCalc = (stacked && max >= 0) ? stackMax : max;
- yoffset = (yMaxCalc - xaxisOffset) / range * this.canvasHeight;
- if (yoffset !== Math.ceil(yoffset)) {
- this.canvasHeightEf -= 2;
- yoffset = Math.ceil(yoffset);
- }
- } else {
- yoffset = this.canvasHeight;
- }
- this.yoffset = yoffset;
-
- if ($.isArray(options.get('colorMap'))) {
- this.colorMapByIndex = options.get('colorMap');
- this.colorMapByValue = null;
- } else {
- this.colorMapByIndex = null;
- this.colorMapByValue = options.get('colorMap');
- if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
- this.colorMapByValue = new RangeMap(this.colorMapByValue);
- }
- }
-
- this.range = range;
- },
-
- getRegion: function (el, x, y) {
- var result = Math.floor(x / this.totalBarWidth);
- return (result < 0 || result >= this.values.length) ? undefined : result;
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion,
- values = ensureArray(this.values[currentRegion]),
- result = [],
- value, i;
- for (i = values.length; i--;) {
- value = values[i];
- result.push({
- isNull: value === null,
- value: value,
- color: this.calcColor(i, value, currentRegion),
- offset: currentRegion
- });
- }
- return result;
- },
-
- calcColor: function (stacknum, value, valuenum) {
- var colorMapByIndex = this.colorMapByIndex,
- colorMapByValue = this.colorMapByValue,
- options = this.options,
- color, newColor;
- if (this.stacked) {
- color = options.get('stackedBarColor');
- } else {
- color = (value < 0) ? options.get('negBarColor') : options.get('barColor');
- }
- if (value === 0 && options.get('zeroColor') !== undefined) {
- color = options.get('zeroColor');
- }
- if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
- color = newColor;
- } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
- color = colorMapByIndex[valuenum];
- }
- return $.isArray(color) ? color[stacknum % color.length] : color;
- },
-
- /**
- * Render bar(s) for a region
- */
- renderRegion: function (valuenum, highlight) {
- var vals = this.values[valuenum],
- options = this.options,
- xaxisOffset = this.xaxisOffset,
- result = [],
- range = this.range,
- stacked = this.stacked,
- target = this.target,
- x = valuenum * this.totalBarWidth,
- canvasHeightEf = this.canvasHeightEf,
- yoffset = this.yoffset,
- y, height, color, isNull, yoffsetNeg, i, valcount, val, minPlotted, allMin;
-
- vals = $.isArray(vals) ? vals : [vals];
- valcount = vals.length;
- val = vals[0];
- isNull = all(null, vals);
- allMin = all(xaxisOffset, vals, true);
-
- if (isNull) {
- if (options.get('nullColor')) {
- color = highlight ? options.get('nullColor') : this.calcHighlightColor(options.get('nullColor'), options);
- y = (yoffset > 0) ? yoffset - 1 : yoffset;
- return target.drawRect(x, y, this.barWidth - 1, 0, color, color);
- } else {
- return undefined;
- }
- }
- yoffsetNeg = yoffset;
- for (i = 0; i < valcount; i++) {
- val = vals[i];
-
- if (stacked && val === xaxisOffset) {
- if (!allMin || minPlotted) {
- continue;
- }
- minPlotted = true;
- }
-
- if (range > 0) {
- height = Math.floor(canvasHeightEf * ((Math.abs(val - xaxisOffset) / range))) + 1;
- } else {
- height = 1;
- }
- if (val < xaxisOffset || (val === xaxisOffset && yoffset === 0)) {
- y = yoffsetNeg;
- yoffsetNeg += height;
- } else {
- y = yoffset - height;
- yoffset -= height;
- }
- color = this.calcColor(i, val, valuenum);
- if (highlight) {
- color = this.calcHighlightColor(color, options);
- }
- result.push(target.drawRect(x, y, this.barWidth - 1, height - 1, color, color));
- }
- if (result.length === 1) {
- return result[0];
- }
- return result;
- }
- });
-
- /**
- * Tristate charts
- */
- $.fn.sparkline.tristate = tristate = createClass($.fn.sparkline._base, barHighlightMixin, {
- type: 'tristate',
-
- init: function (el, values, options, width, height) {
- var barWidth = parseInt(options.get('barWidth'), 10),
- barSpacing = parseInt(options.get('barSpacing'), 10);
- tristate._super.init.call(this, el, values, options, width, height);
-
- this.regionShapes = {};
- this.barWidth = barWidth;
- this.barSpacing = barSpacing;
- this.totalBarWidth = barWidth + barSpacing;
- this.values = $.map(values, Number);
- this.width = width = (values.length * barWidth) + ((values.length - 1) * barSpacing);
-
- if ($.isArray(options.get('colorMap'))) {
- this.colorMapByIndex = options.get('colorMap');
- this.colorMapByValue = null;
- } else {
- this.colorMapByIndex = null;
- this.colorMapByValue = options.get('colorMap');
- if (this.colorMapByValue && this.colorMapByValue.get === undefined) {
- this.colorMapByValue = new RangeMap(this.colorMapByValue);
- }
- }
- this.initTarget();
- },
-
- getRegion: function (el, x, y) {
- return Math.floor(x / this.totalBarWidth);
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion;
- return {
- isNull: this.values[currentRegion] === undefined,
- value: this.values[currentRegion],
- color: this.calcColor(this.values[currentRegion], currentRegion),
- offset: currentRegion
- };
- },
-
- calcColor: function (value, valuenum) {
- var values = this.values,
- options = this.options,
- colorMapByIndex = this.colorMapByIndex,
- colorMapByValue = this.colorMapByValue,
- color, newColor;
-
- if (colorMapByValue && (newColor = colorMapByValue.get(value))) {
- color = newColor;
- } else if (colorMapByIndex && colorMapByIndex.length > valuenum) {
- color = colorMapByIndex[valuenum];
- } else if (values[valuenum] < 0) {
- color = options.get('negBarColor');
- } else if (values[valuenum] > 0) {
- color = options.get('posBarColor');
- } else {
- color = options.get('zeroBarColor');
- }
- return color;
- },
-
- renderRegion: function (valuenum, highlight) {
- var values = this.values,
- options = this.options,
- target = this.target,
- canvasHeight, height, halfHeight,
- x, y, color;
-
- canvasHeight = target.pixelHeight;
- halfHeight = Math.round(canvasHeight / 2);
-
- x = valuenum * this.totalBarWidth;
- if (values[valuenum] < 0) {
- y = halfHeight;
- height = halfHeight - 1;
- } else if (values[valuenum] > 0) {
- y = 0;
- height = halfHeight - 1;
- } else {
- y = halfHeight - 1;
- height = 2;
- }
- color = this.calcColor(values[valuenum], valuenum);
- if (color === null) {
- return;
- }
- if (highlight) {
- color = this.calcHighlightColor(color, options);
- }
- return target.drawRect(x, y, this.barWidth - 1, height - 1, color, color);
- }
- });
-
- /**
- * Discrete charts
- */
- $.fn.sparkline.discrete = discrete = createClass($.fn.sparkline._base, barHighlightMixin, {
- type: 'discrete',
-
- init: function (el, values, options, width, height) {
- discrete._super.init.call(this, el, values, options, width, height);
-
- this.regionShapes = {};
- this.values = values = $.map(values, Number);
- this.min = Math.min.apply(Math, values);
- this.max = Math.max.apply(Math, values);
- this.range = this.max - this.min;
- this.width = width = options.get('width') === 'auto' ? values.length * 2 : this.width;
- this.interval = Math.floor(width / values.length);
- this.itemWidth = width / values.length;
- if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < this.min)) {
- this.min = options.get('chartRangeMin');
- }
- if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > this.max)) {
- this.max = options.get('chartRangeMax');
- }
- this.initTarget();
- if (this.target) {
- this.lineHeight = options.get('lineHeight') === 'auto' ? Math.round(this.canvasHeight * 0.3) : options.get('lineHeight');
- }
- },
-
- getRegion: function (el, x, y) {
- return Math.floor(x / this.itemWidth);
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion;
- return {
- isNull: this.values[currentRegion] === undefined,
- value: this.values[currentRegion],
- offset: currentRegion
- };
- },
-
- renderRegion: function (valuenum, highlight) {
- var values = this.values,
- options = this.options,
- min = this.min,
- max = this.max,
- range = this.range,
- interval = this.interval,
- target = this.target,
- canvasHeight = this.canvasHeight,
- lineHeight = this.lineHeight,
- pheight = canvasHeight - lineHeight,
- ytop, val, color, x;
-
- val = clipval(values[valuenum], min, max);
- x = valuenum * interval;
- ytop = Math.round(pheight - pheight * ((val - min) / range));
- color = (options.get('thresholdColor') && val < options.get('thresholdValue')) ? options.get('thresholdColor') : options.get('lineColor');
- if (highlight) {
- color = this.calcHighlightColor(color, options);
- }
- return target.drawLine(x, ytop, x, ytop + lineHeight, color);
- }
- });
-
- /**
- * Bullet charts
- */
- $.fn.sparkline.bullet = bullet = createClass($.fn.sparkline._base, {
- type: 'bullet',
-
- init: function (el, values, options, width, height) {
- var min, max, vals;
- bullet._super.init.call(this, el, values, options, width, height);
-
- // values: target, performance, range1, range2, range3
- this.values = values = normalizeValues(values);
- // target or performance could be null
- vals = values.slice();
- vals[0] = vals[0] === null ? vals[2] : vals[0];
- vals[1] = values[1] === null ? vals[2] : vals[1];
- min = Math.min.apply(Math, values);
- max = Math.max.apply(Math, values);
- if (options.get('base') === undefined) {
- min = min < 0 ? min : 0;
- } else {
- min = options.get('base');
- }
- this.min = min;
- this.max = max;
- this.range = max - min;
- this.shapes = {};
- this.valueShapes = {};
- this.regiondata = {};
- this.width = width = options.get('width') === 'auto' ? '4.0em' : width;
- this.target = this.$el.simpledraw(width, height, options.get('composite'));
- if (!values.length) {
- this.disabled = true;
- }
- this.initTarget();
- },
-
- getRegion: function (el, x, y) {
- var shapeid = this.target.getShapeAt(el, x, y);
- return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion;
- return {
- fieldkey: currentRegion.substr(0, 1),
- value: this.values[currentRegion.substr(1)],
- region: currentRegion
- };
- },
-
- changeHighlight: function (highlight) {
- var currentRegion = this.currentRegion,
- shapeid = this.valueShapes[currentRegion],
- shape;
- delete this.shapes[shapeid];
- switch (currentRegion.substr(0, 1)) {
- case 'r':
- shape = this.renderRange(currentRegion.substr(1), highlight);
- break;
- case 'p':
- shape = this.renderPerformance(highlight);
- break;
- case 't':
- shape = this.renderTarget(highlight);
- break;
- }
- this.valueShapes[currentRegion] = shape.id;
- this.shapes[shape.id] = currentRegion;
- this.target.replaceWithShape(shapeid, shape);
- },
-
- renderRange: function (rn, highlight) {
- var rangeval = this.values[rn],
- rangewidth = Math.round(this.canvasWidth * ((rangeval - this.min) / this.range)),
- color = this.options.get('rangeColors')[rn - 2];
- if (highlight) {
- color = this.calcHighlightColor(color, this.options);
- }
- return this.target.drawRect(0, 0, rangewidth - 1, this.canvasHeight - 1, color, color);
- },
-
- renderPerformance: function (highlight) {
- var perfval = this.values[1],
- perfwidth = Math.round(this.canvasWidth * ((perfval - this.min) / this.range)),
- color = this.options.get('performanceColor');
- if (highlight) {
- color = this.calcHighlightColor(color, this.options);
- }
- return this.target.drawRect(0, Math.round(this.canvasHeight * 0.3), perfwidth - 1,
- Math.round(this.canvasHeight * 0.4) - 1, color, color);
- },
-
- renderTarget: function (highlight) {
- var targetval = this.values[0],
- x = Math.round(this.canvasWidth * ((targetval - this.min) / this.range) - (this.options.get('targetWidth') / 2)),
- targettop = Math.round(this.canvasHeight * 0.10),
- targetheight = this.canvasHeight - (targettop * 2),
- color = this.options.get('targetColor');
- if (highlight) {
- color = this.calcHighlightColor(color, this.options);
- }
- return this.target.drawRect(x, targettop, this.options.get('targetWidth') - 1, targetheight - 1, color, color);
- },
-
- render: function () {
- var vlen = this.values.length,
- target = this.target,
- i, shape;
- if (!bullet._super.render.call(this)) {
- return;
- }
- for (i = 2; i < vlen; i++) {
- shape = this.renderRange(i).append();
- this.shapes[shape.id] = 'r' + i;
- this.valueShapes['r' + i] = shape.id;
- }
- if (this.values[1] !== null) {
- shape = this.renderPerformance().append();
- this.shapes[shape.id] = 'p1';
- this.valueShapes.p1 = shape.id;
- }
- if (this.values[0] !== null) {
- shape = this.renderTarget().append();
- this.shapes[shape.id] = 't0';
- this.valueShapes.t0 = shape.id;
- }
- target.render();
- }
- });
-
- /**
- * Pie charts
- */
- $.fn.sparkline.pie = pie = createClass($.fn.sparkline._base, {
- type: 'pie',
-
- init: function (el, values, options, width, height) {
- var total = 0, i;
-
- pie._super.init.call(this, el, values, options, width, height);
-
- this.shapes = {}; // map shape ids to value offsets
- this.valueShapes = {}; // maps value offsets to shape ids
- this.values = values = $.map(values, Number);
-
- if (options.get('width') === 'auto') {
- this.width = this.height;
- }
-
- if (values.length > 0) {
- for (i = values.length; i--;) {
- total += values[i];
- }
- }
- this.total = total;
- this.initTarget();
- this.radius = Math.floor(Math.min(this.canvasWidth, this.canvasHeight) / 2);
- },
-
- getRegion: function (el, x, y) {
- var shapeid = this.target.getShapeAt(el, x, y);
- return (shapeid !== undefined && this.shapes[shapeid] !== undefined) ? this.shapes[shapeid] : undefined;
- },
-
- getCurrentRegionFields: function () {
- var currentRegion = this.currentRegion;
- return {
- isNull: this.values[currentRegion] === undefined,
- value: this.values[currentRegion],
- percent: this.values[currentRegion] / this.total * 100,
- color: this.options.get('sliceColors')[currentRegion % this.options.get('sliceColors').length],
- offset: currentRegion
- };
- },
-
- changeHighlight: function (highlight) {
- var currentRegion = this.currentRegion,
- newslice = this.renderSlice(currentRegion, highlight),
- shapeid = this.valueShapes[currentRegion];
- delete this.shapes[shapeid];
- this.target.replaceWithShape(shapeid, newslice);
- this.valueShapes[currentRegion] = newslice.id;
- this.shapes[newslice.id] = currentRegion;
- },
-
- renderSlice: function (valuenum, highlight) {
- var target = this.target,
- options = this.options,
- radius = this.radius,
- borderWidth = options.get('borderWidth'),
- offset = options.get('offset'),
- circle = 2 * Math.PI,
- values = this.values,
- total = this.total,
- next = offset ? (2*Math.PI)*(offset/360) : 0,
- start, end, i, vlen, color;
-
- vlen = values.length;
- for (i = 0; i < vlen; i++) {
- start = next;
- end = next;
- if (total > 0) { // avoid divide by zero
- end = next + (circle * (values[i] / total));
- }
- if (valuenum === i) {
- color = options.get('sliceColors')[i % options.get('sliceColors').length];
- if (highlight) {
- color = this.calcHighlightColor(color, options);
- }
-
- return target.drawPieSlice(radius, radius, radius - borderWidth, start, end, undefined, color);
- }
- next = end;
- }
- },
-
- render: function () {
- var target = this.target,
- values = this.values,
- options = this.options,
- radius = this.radius,
- borderWidth = options.get('borderWidth'),
- shape, i;
-
- if (!pie._super.render.call(this)) {
- return;
- }
- if (borderWidth) {
- target.drawCircle(radius, radius, Math.floor(radius - (borderWidth / 2)),
- options.get('borderColor'), undefined, borderWidth).append();
- }
- for (i = values.length; i--;) {
- if (values[i]) { // don't render zero values
- shape = this.renderSlice(i).append();
- this.valueShapes[i] = shape.id; // store just the shapeid
- this.shapes[shape.id] = i;
- }
- }
- target.render();
- }
- });
-
- /**
- * Box plots
- */
- $.fn.sparkline.box = box = createClass($.fn.sparkline._base, {
- type: 'box',
-
- init: function (el, values, options, width, height) {
- box._super.init.call(this, el, values, options, width, height);
- this.values = $.map(values, Number);
- this.width = options.get('width') === 'auto' ? '4.0em' : width;
- this.initTarget();
- if (!this.values.length) {
- this.disabled = 1;
- }
- },
-
- /**
- * Simulate a single region
- */
- getRegion: function () {
- return 1;
- },
-
- getCurrentRegionFields: function () {
- var result = [
- { field: 'lq', value: this.quartiles[0] },
- { field: 'med', value: this.quartiles[1] },
- { field: 'uq', value: this.quartiles[2] }
- ];
- if (this.loutlier !== undefined) {
- result.push({ field: 'lo', value: this.loutlier});
- }
- if (this.routlier !== undefined) {
- result.push({ field: 'ro', value: this.routlier});
- }
- if (this.lwhisker !== undefined) {
- result.push({ field: 'lw', value: this.lwhisker});
- }
- if (this.rwhisker !== undefined) {
- result.push({ field: 'rw', value: this.rwhisker});
- }
- return result;
- },
-
- render: function () {
- var target = this.target,
- values = this.values,
- vlen = values.length,
- options = this.options,
- canvasWidth = this.canvasWidth,
- canvasHeight = this.canvasHeight,
- minValue = options.get('chartRangeMin') === undefined ? Math.min.apply(Math, values) : options.get('chartRangeMin'),
- maxValue = options.get('chartRangeMax') === undefined ? Math.max.apply(Math, values) : options.get('chartRangeMax'),
- canvasLeft = 0,
- lwhisker, loutlier, iqr, q1, q2, q3, rwhisker, routlier, i,
- size, unitSize;
-
- if (!box._super.render.call(this)) {
- return;
- }
-
- if (options.get('raw')) {
- if (options.get('showOutliers') && values.length > 5) {
- loutlier = values[0];
- lwhisker = values[1];
- q1 = values[2];
- q2 = values[3];
- q3 = values[4];
- rwhisker = values[5];
- routlier = values[6];
- } else {
- lwhisker = values[0];
- q1 = values[1];
- q2 = values[2];
- q3 = values[3];
- rwhisker = values[4];
- }
- } else {
- values.sort(function (a, b) { return a - b; });
- q1 = quartile(values, 1);
- q2 = quartile(values, 2);
- q3 = quartile(values, 3);
- iqr = q3 - q1;
- if (options.get('showOutliers')) {
- lwhisker = rwhisker = undefined;
- for (i = 0; i < vlen; i++) {
- if (lwhisker === undefined && values[i] > q1 - (iqr * options.get('outlierIQR'))) {
- lwhisker = values[i];
- }
- if (values[i] < q3 + (iqr * options.get('outlierIQR'))) {
- rwhisker = values[i];
- }
- }
- loutlier = values[0];
- routlier = values[vlen - 1];
- } else {
- lwhisker = values[0];
- rwhisker = values[vlen - 1];
- }
- }
- this.quartiles = [q1, q2, q3];
- this.lwhisker = lwhisker;
- this.rwhisker = rwhisker;
- this.loutlier = loutlier;
- this.routlier = routlier;
-
- unitSize = canvasWidth / (maxValue - minValue + 1);
- if (options.get('showOutliers')) {
- canvasLeft = Math.ceil(options.get('spotRadius'));
- canvasWidth -= 2 * Math.ceil(options.get('spotRadius'));
- unitSize = canvasWidth / (maxValue - minValue + 1);
- if (loutlier < lwhisker) {
- target.drawCircle((loutlier - minValue) * unitSize + canvasLeft,
- canvasHeight / 2,
- options.get('spotRadius'),
- options.get('outlierLineColor'),
- options.get('outlierFillColor')).append();
- }
- if (routlier > rwhisker) {
- target.drawCircle((routlier - minValue) * unitSize + canvasLeft,
- canvasHeight / 2,
- options.get('spotRadius'),
- options.get('outlierLineColor'),
- options.get('outlierFillColor')).append();
- }
- }
-
- // box
- target.drawRect(
- Math.round((q1 - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight * 0.1),
- Math.round((q3 - q1) * unitSize),
- Math.round(canvasHeight * 0.8),
- options.get('boxLineColor'),
- options.get('boxFillColor')).append();
- // left whisker
- target.drawLine(
- Math.round((lwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 2),
- Math.round((q1 - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 2),
- options.get('lineColor')).append();
- target.drawLine(
- Math.round((lwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 4),
- Math.round((lwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight - canvasHeight / 4),
- options.get('whiskerColor')).append();
- // right whisker
- target.drawLine(Math.round((rwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 2),
- Math.round((q3 - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 2),
- options.get('lineColor')).append();
- target.drawLine(
- Math.round((rwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight / 4),
- Math.round((rwhisker - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight - canvasHeight / 4),
- options.get('whiskerColor')).append();
- // median line
- target.drawLine(
- Math.round((q2 - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight * 0.1),
- Math.round((q2 - minValue) * unitSize + canvasLeft),
- Math.round(canvasHeight * 0.9),
- options.get('medianColor')).append();
- if (options.get('target')) {
- size = Math.ceil(options.get('spotRadius'));
- target.drawLine(
- Math.round((options.get('target') - minValue) * unitSize + canvasLeft),
- Math.round((canvasHeight / 2) - size),
- Math.round((options.get('target') - minValue) * unitSize + canvasLeft),
- Math.round((canvasHeight / 2) + size),
- options.get('targetColor')).append();
- target.drawLine(
- Math.round((options.get('target') - minValue) * unitSize + canvasLeft - size),
- Math.round(canvasHeight / 2),
- Math.round((options.get('target') - minValue) * unitSize + canvasLeft + size),
- Math.round(canvasHeight / 2),
- options.get('targetColor')).append();
- }
- target.render();
- }
- });
-
- // Setup a very simple "virtual canvas" to make drawing the few shapes we need easier
- // This is accessible as $(foo).simpledraw()
-
- VShape = createClass({
- init: function (target, id, type, args) {
- this.target = target;
- this.id = id;
- this.type = type;
- this.args = args;
- },
- append: function () {
- this.target.appendShape(this);
- return this;
- }
- });
-
- VCanvas_base = createClass({
- _pxregex: /(\d+)(px)?\s*$/i,
-
- init: function (width, height, target) {
- if (!width) {
- return;
- }
- this.width = width;
- this.height = height;
- this.target = target;
- this.lastShapeId = null;
- if (target[0]) {
- target = target[0];
- }
- $.data(target, '_jqs_vcanvas', this);
- },
-
- drawLine: function (x1, y1, x2, y2, lineColor, lineWidth) {
- return this.drawShape([[x1, y1], [x2, y2]], lineColor, lineWidth);
- },
-
- drawShape: function (path, lineColor, fillColor, lineWidth) {
- return this._genShape('Shape', [path, lineColor, fillColor, lineWidth]);
- },
-
- drawCircle: function (x, y, radius, lineColor, fillColor, lineWidth) {
- return this._genShape('Circle', [x, y, radius, lineColor, fillColor, lineWidth]);
- },
-
- drawPieSlice: function (x, y, radius, startAngle, endAngle, lineColor, fillColor) {
- return this._genShape('PieSlice', [x, y, radius, startAngle, endAngle, lineColor, fillColor]);
- },
-
- drawRect: function (x, y, width, height, lineColor, fillColor) {
- return this._genShape('Rect', [x, y, width, height, lineColor, fillColor]);
- },
-
- getElement: function () {
- return this.canvas;
- },
-
- /**
- * Return the most recently inserted shape id
- */
- getLastShapeId: function () {
- return this.lastShapeId;
- },
-
- /**
- * Clear and reset the canvas
- */
- reset: function () {
- alert('reset not implemented');
- },
-
- _insert: function (el, target) {
- $(target).html(el);
- },
-
- /**
- * Calculate the pixel dimensions of the canvas
- */
- _calculatePixelDims: function (width, height, canvas) {
- // XXX This should probably be a configurable option
- var match;
- match = this._pxregex.exec(height);
- if (match) {
- this.pixelHeight = match[1];
- } else {
- this.pixelHeight = $(canvas).height();
- }
- match = this._pxregex.exec(width);
- if (match) {
- this.pixelWidth = match[1];
- } else {
- this.pixelWidth = $(canvas).width();
- }
- },
-
- /**
- * Generate a shape object and id for later rendering
- */
- _genShape: function (shapetype, shapeargs) {
- var id = shapeCount++;
- shapeargs.unshift(id);
- return new VShape(this, id, shapetype, shapeargs);
- },
-
- /**
- * Add a shape to the end of the render queue
- */
- appendShape: function (shape) {
- alert('appendShape not implemented');
- },
-
- /**
- * Replace one shape with another
- */
- replaceWithShape: function (shapeid, shape) {
- alert('replaceWithShape not implemented');
- },
-
- /**
- * Insert one shape after another in the render queue
- */
- insertAfterShape: function (shapeid, shape) {
- alert('insertAfterShape not implemented');
- },
-
- /**
- * Remove a shape from the queue
- */
- removeShapeId: function (shapeid) {
- alert('removeShapeId not implemented');
- },
-
- /**
- * Find a shape at the specified x/y co-ordinates
- */
- getShapeAt: function (el, x, y) {
- alert('getShapeAt not implemented');
- },
-
- /**
- * Render all queued shapes onto the canvas
- */
- render: function () {
- alert('render not implemented');
- }
- });
-
- VCanvas_canvas = createClass(VCanvas_base, {
- init: function (width, height, target, interact) {
- VCanvas_canvas._super.init.call(this, width, height, target);
- this.canvas = document.createElement('canvas');
- if (target[0]) {
- target = target[0];
- }
- $.data(target, '_jqs_vcanvas', this);
- $(this.canvas).css({ display: 'inline-block', width: width, height: height, verticalAlign: 'top' });
- this._insert(this.canvas, target);
- this._calculatePixelDims(width, height, this.canvas);
- this.canvas.width = this.pixelWidth;
- this.canvas.height = this.pixelHeight;
- this.interact = interact;
- this.shapes = {};
- this.shapeseq = [];
- this.currentTargetShapeId = undefined;
- $(this.canvas).css({width: this.pixelWidth, height: this.pixelHeight});
- },
-
- _getContext: function (lineColor, fillColor, lineWidth) {
- var context = this.canvas.getContext('2d');
- if (lineColor !== undefined) {
- context.strokeStyle = lineColor;
- }
- context.lineWidth = lineWidth === undefined ? 1 : lineWidth;
- if (fillColor !== undefined) {
- context.fillStyle = fillColor;
- }
- return context;
- },
-
- reset: function () {
- var context = this._getContext();
- context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
- this.shapes = {};
- this.shapeseq = [];
- this.currentTargetShapeId = undefined;
- },
-
- _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {
- var context = this._getContext(lineColor, fillColor, lineWidth),
- i, plen;
- context.beginPath();
- context.moveTo(path[0][0] + 0.5, path[0][1] + 0.5);
- for (i = 1, plen = path.length; i < plen; i++) {
- context.lineTo(path[i][0] + 0.5, path[i][1] + 0.5); // the 0.5 offset gives us crisp pixel-width lines
- }
- if (lineColor !== undefined) {
- context.stroke();
- }
- if (fillColor !== undefined) {
- context.fill();
- }
- if (this.targetX !== undefined && this.targetY !== undefined &&
- context.isPointInPath(this.targetX, this.targetY)) {
- this.currentTargetShapeId = shapeid;
- }
- },
-
- _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {
- var context = this._getContext(lineColor, fillColor, lineWidth);
- context.beginPath();
- context.arc(x, y, radius, 0, 2 * Math.PI, false);
- if (this.targetX !== undefined && this.targetY !== undefined &&
- context.isPointInPath(this.targetX, this.targetY)) {
- this.currentTargetShapeId = shapeid;
- }
- if (lineColor !== undefined) {
- context.stroke();
- }
- if (fillColor !== undefined) {
- context.fill();
- }
- },
-
- _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {
- var context = this._getContext(lineColor, fillColor);
- context.beginPath();
- context.moveTo(x, y);
- context.arc(x, y, radius, startAngle, endAngle, false);
- context.lineTo(x, y);
- context.closePath();
- if (lineColor !== undefined) {
- context.stroke();
- }
- if (fillColor) {
- context.fill();
- }
- if (this.targetX !== undefined && this.targetY !== undefined &&
- context.isPointInPath(this.targetX, this.targetY)) {
- this.currentTargetShapeId = shapeid;
- }
- },
-
- _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {
- return this._drawShape(shapeid, [[x, y], [x + width, y], [x + width, y + height], [x, y + height], [x, y]], lineColor, fillColor);
- },
-
- appendShape: function (shape) {
- this.shapes[shape.id] = shape;
- this.shapeseq.push(shape.id);
- this.lastShapeId = shape.id;
- return shape.id;
- },
-
- replaceWithShape: function (shapeid, shape) {
- var shapeseq = this.shapeseq,
- i;
- this.shapes[shape.id] = shape;
- for (i = shapeseq.length; i--;) {
- if (shapeseq[i] == shapeid) {
- shapeseq[i] = shape.id;
- }
- }
- delete this.shapes[shapeid];
- },
-
- replaceWithShapes: function (shapeids, shapes) {
- var shapeseq = this.shapeseq,
- shapemap = {},
- sid, i, first;
-
- for (i = shapeids.length; i--;) {
- shapemap[shapeids[i]] = true;
- }
- for (i = shapeseq.length; i--;) {
- sid = shapeseq[i];
- if (shapemap[sid]) {
- shapeseq.splice(i, 1);
- delete this.shapes[sid];
- first = i;
- }
- }
- for (i = shapes.length; i--;) {
- shapeseq.splice(first, 0, shapes[i].id);
- this.shapes[shapes[i].id] = shapes[i];
- }
-
- },
-
- insertAfterShape: function (shapeid, shape) {
- var shapeseq = this.shapeseq,
- i;
- for (i = shapeseq.length; i--;) {
- if (shapeseq[i] === shapeid) {
- shapeseq.splice(i + 1, 0, shape.id);
- this.shapes[shape.id] = shape;
- return;
- }
- }
- },
-
- removeShapeId: function (shapeid) {
- var shapeseq = this.shapeseq,
- i;
- for (i = shapeseq.length; i--;) {
- if (shapeseq[i] === shapeid) {
- shapeseq.splice(i, 1);
- break;
- }
- }
- delete this.shapes[shapeid];
- },
-
- getShapeAt: function (el, x, y) {
- this.targetX = x;
- this.targetY = y;
- this.render();
- return this.currentTargetShapeId;
- },
-
- render: function () {
- var shapeseq = this.shapeseq,
- shapes = this.shapes,
- shapeCount = shapeseq.length,
- context = this._getContext(),
- shapeid, shape, i;
- context.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
- for (i = 0; i < shapeCount; i++) {
- shapeid = shapeseq[i];
- shape = shapes[shapeid];
- this['_draw' + shape.type].apply(this, shape.args);
- }
- if (!this.interact) {
- // not interactive so no need to keep the shapes array
- this.shapes = {};
- this.shapeseq = [];
- }
- }
-
- });
-
- VCanvas_vml = createClass(VCanvas_base, {
- init: function (width, height, target) {
- var groupel;
- VCanvas_vml._super.init.call(this, width, height, target);
- if (target[0]) {
- target = target[0];
- }
- $.data(target, '_jqs_vcanvas', this);
- this.canvas = document.createElement('span');
- $(this.canvas).css({ display: 'inline-block', position: 'relative', overflow: 'hidden', width: width, height: height, margin: '0px', padding: '0px', verticalAlign: 'top'});
- this._insert(this.canvas, target);
- this._calculatePixelDims(width, height, this.canvas);
- this.canvas.width = this.pixelWidth;
- this.canvas.height = this.pixelHeight;
- groupel = '';
- this.canvas.insertAdjacentHTML('beforeEnd', groupel);
- this.group = $(this.canvas).children()[0];
- this.rendered = false;
- this.prerender = '';
- },
-
- _drawShape: function (shapeid, path, lineColor, fillColor, lineWidth) {
- var vpath = [],
- initial, stroke, fill, closed, vel, plen, i;
- for (i = 0, plen = path.length; i < plen; i++) {
- vpath[i] = '' + (path[i][0]) + ',' + (path[i][1]);
- }
- initial = vpath.splice(0, 1);
- lineWidth = lineWidth === undefined ? 1 : lineWidth;
- stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ';
- fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
- closed = vpath[0] === vpath[vpath.length - 1] ? 'x ' : '';
- vel = '' +
- ' ';
- return vel;
- },
-
- _drawCircle: function (shapeid, x, y, radius, lineColor, fillColor, lineWidth) {
- var stroke, fill, vel;
- x -= radius;
- y -= radius;
- stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="' + lineWidth + 'px" strokeColor="' + lineColor + '" ';
- fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
- vel = '';
- return vel;
-
- },
-
- _drawPieSlice: function (shapeid, x, y, radius, startAngle, endAngle, lineColor, fillColor) {
- var vpath, startx, starty, endx, endy, stroke, fill, vel;
- if (startAngle === endAngle) {
- return ''; // VML seems to have problem when start angle equals end angle.
- }
- if ((endAngle - startAngle) === (2 * Math.PI)) {
- startAngle = 0.0; // VML seems to have a problem when drawing a full circle that doesn't start 0
- endAngle = (2 * Math.PI);
- }
-
- startx = x + Math.round(Math.cos(startAngle) * radius);
- starty = y + Math.round(Math.sin(startAngle) * radius);
- endx = x + Math.round(Math.cos(endAngle) * radius);
- endy = y + Math.round(Math.sin(endAngle) * radius);
-
- if (startx === endx && starty === endy) {
- if ((endAngle - startAngle) < Math.PI) {
- // Prevent very small slices from being mistaken as a whole pie
- return '';
- }
- // essentially going to be the entire circle, so ignore startAngle
- startx = endx = x + radius;
- starty = endy = y;
- }
-
- if (startx === endx && starty === endy && (endAngle - startAngle) < Math.PI) {
- return '';
- }
-
- vpath = [x - radius, y - radius, x + radius, y + radius, startx, starty, endx, endy];
- stroke = lineColor === undefined ? ' stroked="false" ' : ' strokeWeight="1px" strokeColor="' + lineColor + '" ';
- fill = fillColor === undefined ? ' filled="false"' : ' fillColor="' + fillColor + '" filled="true" ';
- vel = '' +
- ' ';
- return vel;
- },
-
- _drawRect: function (shapeid, x, y, width, height, lineColor, fillColor) {
- return this._drawShape(shapeid, [[x, y], [x, y + height], [x + width, y + height], [x + width, y], [x, y]], lineColor, fillColor);
- },
-
- reset: function () {
- this.group.innerHTML = '';
- },
-
- appendShape: function (shape) {
- var vel = this['_draw' + shape.type].apply(this, shape.args);
- if (this.rendered) {
- this.group.insertAdjacentHTML('beforeEnd', vel);
- } else {
- this.prerender += vel;
- }
- this.lastShapeId = shape.id;
- return shape.id;
- },
-
- replaceWithShape: function (shapeid, shape) {
- var existing = $('#jqsshape' + shapeid),
- vel = this['_draw' + shape.type].apply(this, shape.args);
- existing[0].outerHTML = vel;
- },
-
- replaceWithShapes: function (shapeids, shapes) {
- // replace the first shapeid with all the new shapes then toast the remaining old shapes
- var existing = $('#jqsshape' + shapeids[0]),
- replace = '',
- slen = shapes.length,
- i;
- for (i = 0; i < slen; i++) {
- replace += this['_draw' + shapes[i].type].apply(this, shapes[i].args);
- }
- existing[0].outerHTML = replace;
- for (i = 1; i < shapeids.length; i++) {
- $('#jqsshape' + shapeids[i]).remove();
- }
- },
-
- insertAfterShape: function (shapeid, shape) {
- var existing = $('#jqsshape' + shapeid),
- vel = this['_draw' + shape.type].apply(this, shape.args);
- existing[0].insertAdjacentHTML('afterEnd', vel);
- },
-
- removeShapeId: function (shapeid) {
- var existing = $('#jqsshape' + shapeid);
- this.group.removeChild(existing[0]);
- },
-
- getShapeAt: function (el, x, y) {
- var shapeid = el.id.substr(8);
- return shapeid;
- },
-
- render: function () {
- if (!this.rendered) {
- // batch the intial render into a single repaint
- this.group.innerHTML = this.prerender;
- this.rendered = true;
- }
- }
- });
-
-}))}(document, Math));
-
-})();
diff --git a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/jquery.sparkline.min.js b/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/jquery.sparkline.min.js
deleted file mode 100644
index b69f3b8..0000000
--- a/web-app/.meteor/local/build/programs/web.browser/app/client/js/lib/jquery.sparkline.min.js
+++ /dev/null
@@ -1,7 +0,0 @@
-(function(){/* jquery.sparkline 2.1.2 - http://omnipotent.net/jquery.sparkline/
-** Licensed under the New BSD License - see above site for details */
-
-(function(a,b,c){(function(a){typeof define=="function"&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.sparkline&&a(jQuery)})(function(d){"use strict";var e={},f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L=0;f=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:c,normalRangeMax:c,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:c,chartRangeMax:c,chartRangeMinX:c,chartRangeMaxX:c,tooltipFormat:new h('● {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:c,nullColor:c,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,colorMap:c,tooltipFormat:new h('● {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new h('● {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:c,thresholdValue:0,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,tooltipFormat:new h("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:c,tooltipFormat:new h("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new h('● {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:c,targetColor:"#4a2",chartRangeMax:c,chartRangeMin:c,tooltipFormat:new h("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},E='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;z-index: 10000;}.jqsfield {}',g=function(){var a,b;return a=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(a.prototype=d.extend(new arguments[0],arguments[arguments.length-1]),a._super=arguments[0].prototype):a.prototype=arguments[arguments.length-1],arguments.length>2&&(b=Array.prototype.slice.call(arguments,1,-1),b.unshift(a.prototype),d.extend.apply(d,b))):a.prototype=arguments[0],a.prototype.cls=a,a},d.SPFormatClass=h=g({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,d){var e=this,f=a,g,h,i,j,k;return this.format.replace(this.fre,function(){var a;return h=arguments[1],i=arguments[3],g=e.precre.exec(h),g?(k=g[2],h=g[1]):k=!1,j=f[h],j===c?"":i&&b&&b[i]?(a=b[i],a.get?b[i].get(j)||j:b[i][j]||j):(n(j)&&(d.get("numberFormatter")?j=d.get("numberFormatter")(j):j=s(j,k,d.get("numberDigitGroupCount"),d.get("numberDigitGroupSep"),d.get("numberDecimalMark"))),j)})}}),d.spformat=function(a,b){return new h(a,b)},i=function(a,b,c){return ac?c:a},j=function(a,c){var d;return c===2?(d=b.floor(a.length/2),a.length%2?a[d]:(a[d-1]+a[d])/2):a.length%2?(d=(a.length*c+c)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1]):(d=(a.length*c+2)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1])},k=function(a){var b;switch(a){case"undefined":a=c;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},l=function(a){var b,c=[];for(b=a.length;b--;)c[b]=k(a[b]);return c},m=function(a,b){var c,d,e=[];for(c=0,d=a.length;c0;h-=c)a.splice(h,0,e);return a.join("")},o=function(a,b,c){var d;for(d=b.length;d--;){if(c&&b[d]===null)continue;if(b[d]!==a)return!1}return!0},p=function(a){var b=0,c;for(c=a.length;c--;)b+=typeof a[c]=="number"?a[c]:0;return b},r=function(a){return d.isArray(a)?a:[a]},q=function(b){var c;a.createStyleSheet?a.createStyleSheet().cssText=b:(c=a.createElement("style"),c.type="text/css",a.getElementsByTagName("head")[0].appendChild(c),c[typeof a.body.style.WebkitAppearance=="string"?"innerText":"innerHTML"]=b)},d.fn.simpledraw=function(b,e,f,g){var h,i;if(f&&(h=this.data("_jqs_vcanvas")))return h;if(d.fn.sparkline.canvas===!1)return!1;if(d.fn.sparkline.canvas===c){var j=a.createElement("canvas");if(!j.getContext||!j.getContext("2d")){if(!a.namespaces||!!a.namespaces.v)return d.fn.sparkline.canvas=!1,!1;a.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),d.fn.sparkline.canvas=function(a,b,c,d){return new J(a,b,c)}}else d.fn.sparkline.canvas=function(a,b,c,d){return new I(a,b,c,d)}}return b===c&&(b=d(this).innerWidth()),e===c&&(e=d(this).innerHeight()),h=d.fn.sparkline.canvas(b,e,this,g),i=d(this).data("_jqs_mhandler"),i&&i.registerCanvas(h),h},d.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},d.RangeMapClass=t=g({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&typeof b=="string"&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=c[0].length===0?-Infinity:parseFloat(c[0]),c[1]=c[1].length===0?Infinity:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b=this.rangelist,d,e,f;if((f=this.map[a])!==c)return f;if(b)for(d=b.length;d--;){e=b[d];if(e[0]<=a&&e[1]>=a)return e[2]}return c}}),d.range_map=function(a){return new t(a)},u=g({init:function(a,b){var c=d(a);this.$el=c,this.options=b,this.currentPageX=0,this.currentPageY=0,this.el=a,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!b.get("disableTooltips"),this.highlightEnabled=!b.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(a){var b=d(a.canvas);this.canvas=a,this.$canvas=b,b.mouseenter(d.proxy(this.mouseenter,this)),b.mouseleave(d.proxy(this.mouseleave,this)),b.click(d.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=c)},mouseclick:function(a){var b=d.Event("sparklineClick");b.originalEvent=a,b.sparklines=this.splist,this.$el.trigger(b)},mouseenter:function(b){d(a.body).unbind("mousemove.jqs"),d(a.body).bind("mousemove.jqs",d.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new v(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){d(a.body).unbind("mousemove.jqs");var b=this.splist,c=b.length,e=!1,f,g;this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null);for(g=0;g",{id:"jqssizetip",style:e,"class":c}),this.tooltip=d("",{id:"jqstooltip","class":c}).appendTo(this.container),f=this.tooltip.offset(),this.offsetLeft=f.left,this.offsetTop=f.top,this.hidden=!0,d(window).unbind("resize.jqs scroll.jqs"),d(window).bind("resize.jqs scroll.jqs",d.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=d(window).scrollTop(),this.scrollLeft=d(window).scrollLeft(),this.scrollRight=this.scrollLeft+d(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){if(!a){this.tooltip.css("visibility","hidden"),this.hidden=!0;return}this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(a,b){if(a===c){if(this.mousex===c)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;if(!this.height||!this.width||this.hidden)return;b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,bthis.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b})},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=c,d(window).unbind("resize.jqs scroll.jqs")}}),F=function(){q(E)},d(F),K=[],d.fn.sparkline=function(b,e){return this.each(function(){var f=new d.fn.sparkline.options(this,e),g=d(this),h,i;h=function(){var e,h,i,j,k,l,m;if(b==="html"||b===c){m=this.getAttribute(f.get("tagValuesAttribute"));if(m===c||m===null)m=g.html();e=m.replace(/(^\s*\s*$)|\s+/g,"").split(",")}else e=b;h=f.get("width")==="auto"?e.length*f.get("defaultPixelsPerValue"):f.get("width");if(f.get("height")==="auto"){if(!f.get("composite")||!d.data(this,"_jqs_vcanvas"))j=a.createElement("span"),j.innerHTML="a",g.html(j),i=d(j).innerHeight()||d(j).height(),d(j).remove(),j=null}else i=f.get("height");f.get("disableInteraction")?k=!1:(k=d.data(this,"_jqs_mhandler"),k?f.get("composite")||k.reset():(k=new u(this,f),d.data(this,"_jqs_mhandler",k)));if(f.get("composite")&&!d.data(this,"_jqs_vcanvas")){d.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),d.data(this,"_jqs_errnotify",!0));return}l=new(d.fn.sparkline[f.get("type")])(this,e,f,h,i),l.render(),k&&k.registerSparkline(l)};if(d(this).html()&&!f.get("disableHiddenCheck")&&d(this).is(":hidden")||!d(this).parents("body").length){if(!f.get("composite")&&d.data(this,"_jqs_pending"))for(i=K.length;i;i--)K[i-1][0]==this&&K.splice(i-1,1);K.push([this,h]),d.data(this,"_jqs_pending",!0)}else h.call(this)})},d.fn.sparkline.defaults=f(),d.sparkline_display_visible=function(){var a,b,c,e=[];for(b=0,c=K.length;bthis.canvasWidth||d>this.canvasHeight||b<0||d<0?null:(g=this.getRegion(a,b,d),e!==g?(e!==c&&f&&this.removeHighlight(),this.currentRegion=g,g!==c&&f&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==c?(this.removeHighlight(),this.currentRegion=c,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(a){},getCurrentRegionTooltip:function(){var a=this.options,b="",e=[],f,g,i,j,k,l,m,n,o,p,q,r,s,t;if(this.currentRegion===c)return"";f=this.getCurrentRegionFields(),q=a.get("tooltipFormatter");if(q)return q(this,a,f);a.get("tooltipChartTitle")&&(b+=''+a.get("tooltipChartTitle")+"
\n"),g=this.options.get("tooltipFormat");if(!g)return"";d.isArray(g)||(g=[g]),d.isArray(f)||(f=[f]),m=this.options.get("tooltipFormatFieldlist"),n=this.options.get("tooltipFormatFieldlistKey");if(m&&n){o=[];for(l=f.length;l--;)p=f[l][n],(t=d.inArray(p,m))!=-1&&(o[t]=f[l]);f=o}i=g.length,s=f.length;for(l=0;l'+k+" ")}return e.length?b+e.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,c){var d=c.get("highlightColor"),e=c.get("highlightLighten"),f,g,h,j;if(d)return d;if(e){f=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a);if(f){h=[],g=a.length===4?16:1;for(j=0;j<3;j++)h[j]=i(b.round(parseInt(f[j+1],16)*g*e),0,255);return"rgb("+h.join(",")+")"}}return a}}),w={changeHighlight:function(a){var b=this.currentRegion,c=this.target,e=this.regionShapes[b],f;e&&(f=this.renderRegion(b,a),d.isArray(f)||d.isArray(e)?(c.replaceWithShapes(e,f),this.regionShapes[b]=d.map(f,function(a){return a.id})):(c.replaceWithShape(e,f),this.regionShapes[b]=f.id))},render:function(){var a=this.values,b=this.target,c=this.regionShapes,e,f,g,h;if(!this.cls._super.render.call(this))return;for(g=a.length;g--;){e=this.renderRegion(g);if(e)if(d.isArray(e)){f=[];for(h=e.length;h--;)e[h].append(),f.push(e[h].id);c[g]=f}else e.append(),c[g]=e.id;else c[g]=null}b.render()}},d.fn.sparkline.line=x=g(d.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){x._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b,d){var e,f=this.regionMap;for(e=f.length;e--;)if(f[e]!==null&&b>=f[e][0]&&b<=f[e][1])return f[e][2];return c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.yvalues[a]===null,x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a=this.currentRegion,b=this.target,d=this.vertices[a],e=this.options,f=e.get("spotRadius"),g=e.get("highlightSpotColor"),h=e.get("highlightLineColor"),i,j;if(!d)return;f&&g&&(i=b.drawCircle(d[0],d[1],f,c,g),this.highlightSpotId=i.id,b.insertAfterShape(this.lastShapeId,i)),h&&(j=b.drawLine(d[0],this.canvasTop,d[0],this.canvasTop+this.canvasHeight,h),this.highlightLineId=j.id,b.insertAfterShape(this.lastShapeId,j))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a=this.values,c=a.length,d=this.xvalues,e=this.yvalues,f=this.yminmax,g,h,i,j,k;for(g=0;g