upgrading angular to 0.9.14 key-maker
authorIgor Minar <iiminar@gmail.com>
Fri, 1 Apr 2011 20:45:32 +0000 (13:45 -0700)
committerIgor Minar <iiminar@gmail.com>
Fri, 1 Apr 2011 20:45:32 +0000 (13:45 -0700)
app/lib/angular/angular.js
app/lib/angular/angular.min.js
app/lib/angular/version.txt
test/lib/angular/angular-mocks.js
test/lib/angular/angular-scenario.js
test/lib/angular/version.txt

index 5345078..f9750f2 100644 (file)
@@ -76,9 +76,7 @@ if ('i' !== 'I'.toLowerCase()) {
 function fromCharCode(code) { return String.fromCharCode(code); }
 
 
-var _undefined        = undefined,
-    _null             = null,
-    $$element         = '$element',
+var $$element         = '$element',
     $$update          = '$update',
     $$scope           = '$scope',
     $$validate        = '$validate',
@@ -339,7 +337,7 @@ function isDefined(value){ return typeof value != $undefined; }
  * @param {*} value Reference to check.
  * @returns {boolean} True if `value` is an `Object` but not `null`.
  */
-function isObject(value){ return value!=_null && typeof value == $object;}
+function isObject(value){ return value!=null && typeof value == $object;}
 
 
 /**
@@ -487,12 +485,14 @@ function map(obj, iterator, context) {
  * @function
  *
  * @description
- * Determines the number of elements in an array or number of properties of an object.
+ * Determines the number of elements in an array, number of properties of an object or string
+ * length.
  *
  * Note: this function is used to augment the Object type in angular expressions. See
  * {@link angular.Object} for more info.
  *
- * @param {Object|Array} obj Object or array to inspect.
+ * @param {Object|Array|string} obj Object, array or string to inspect.
+ * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object
  * @returns {number} The size of `obj` or `0` if `obj` is neither an object or an array.
  *
  * @example
@@ -509,18 +509,21 @@ function map(obj, iterator, context) {
  *  </doc:scenario>
  * </doc:example>
  */
-function size(obj) {
+function size(obj, ownPropsOnly) {
   var size = 0, key;
-  if (obj) {
-    if (isNumber(obj.length)) {
-      return obj.length;
-    } else if (isObject(obj)){
-      for (key in obj)
+
+  if (isArray(obj) || isString(obj)) {
+    return obj.length;
+  } else if (isObject(obj)){
+    for (key in obj)
+      if (!ownPropsOnly || obj.hasOwnProperty(key))
         size++;
-    }
   }
+
   return size;
 }
+
+
 function includes(array, obj) {
   for ( var i = 0; i < array.length; i++) {
     if (obj === array[i]) return true;
@@ -723,10 +726,19 @@ function isRenderableElement(element) {
   return name && name.charAt(0) != '#' &&
     !includes(['TR', 'COL', 'COLGROUP', 'TBODY', 'THEAD', 'TFOOT'], name);
 }
+
 function elementError(element, type, error) {
+  var parent;
+
   while (!isRenderableElement(element)) {
-    element = element.parent() || jqLite(document.body);
+    parent = element.parent();
+    if (parent.length) {
+      element = element.parent();
+    } else {
+      return;
+    }
   }
+
   if (element[0]['$NG_ERROR'] !== error) {
     element[0]['$NG_ERROR'] = error;
     if (error) {
@@ -832,20 +844,44 @@ function toKeyValue(obj) {
 
 /**
  * we need our custom mehtod because encodeURIComponent is too agressive and doesn't follow
- * http://www.ietf.org/rfc/rfc2396.txt with regards to the character set (pchar) allowed in path
- * segments
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ *    segment       = *pchar
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
  */
 function encodeUriSegment(val) {
+  return encodeUriQuery(val, true).
+             replace(/%26/gi, '&').
+             replace(/%3D/gi, '=').
+             replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method becuase encodeURIComponent is too agressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ *    query       = *( pchar / "/" / "?" )
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
   return encodeURIComponent(val).
              replace(/%40/gi, '@').
              replace(/%3A/gi, ':').
-             replace(/%26/gi, '&').
-             replace(/%3D/gi, '=').
-             replace(/%2B/gi, '+').
              replace(/%24/g, '$').
-             replace(/%2C/gi, ',');
+             replace(/%2C/gi, ',').
+             replace((pctEncodeSpaces ? null : /%20/g), '+');
 }
 
+
 /**
  * @workInProgress
  * @ngdoc directive
@@ -1053,11 +1089,11 @@ function assertArg(arg, name, reason) {
     if (window.console) window.console.log(error.stack);
     throw error;
   }
-};
+}
 
 function assertArgFn(arg, name) {
   assertArg(isFunction(arg, name, 'not a function'));
-};
+}
 var array = [].constructor;
 
 /**
@@ -1075,7 +1111,7 @@ var array = [].constructor;
  */
 function toJson(obj, pretty) {
   var buf = [];
-  toJsonArray(buf, obj, pretty ? "\n  " : _null, []);
+  toJsonArray(buf, obj, pretty ? "\n  " : null, []);
   return buf.join('');
 }
 
@@ -1147,7 +1183,7 @@ function toJsonArray(buf, obj, pretty, stack) {
     }
     stack.push(obj);
   }
-  if (obj === _null) {
+  if (obj === null) {
     buf.push($null);
   } else if (obj instanceof RegExp) {
     buf.push(angular['String']['quoteUnicode'](obj.toString()));
@@ -1188,7 +1224,7 @@ function toJsonArray(buf, obj, pretty, stack) {
       var childPretty = pretty ? pretty + "  " : false;
       var keys = [];
       for(var k in obj) {
-        if (obj[k] === _undefined)
+        if (obj[k] === undefined)
           continue;
         keys.push(k);
       }
@@ -1546,7 +1582,7 @@ Compiler.prototype = {
         template.addChild(i, self.templatize(child, i, priority));
       });
     }
-    return template.empty() ? _null : template;
+    return template.empty() ? null : template;
   }
 };
 
@@ -1590,7 +1626,7 @@ function getter(instance, path, unboundFn) {
     if (isUndefined(instance)  && key.charAt(0) == '$') {
       var type = angular['Global']['typeOf'](lastInstance);
       type = angular[type.charAt(0).toUpperCase()+type.substring(1)];
-      var fn = type ? type[[key.substring(1)]] : _undefined;
+      var fn = type ? type[[key.substring(1)]] : undefined;
       if (fn) {
         instance = bind(lastInstance, fn, lastInstance);
         return instance;
@@ -2294,7 +2330,7 @@ function createInjector(providerScope, providers, cache) {
 }
 
 function injectService(services, fn) {
-  return extend(fn, {$inject:services});;
+  return extend(fn, {$inject:services});
 }
 
 function injectUpdateView(fn) {
@@ -2333,9 +2369,9 @@ function injectionArgs(fn) {
     });
   }
   return fn.$inject;
-};
+}
 var OPERATORS = {
-    'null':function(self){return _null;},
+    'null':function(self){return null;},
     'true':function(self){return true;},
     'false':function(self){return false;},
     $undefined:noop,
@@ -2698,7 +2734,6 @@ function parser(text, json){
     var token = expect();
     var formatter = angularFormatter[token.text];
     var argFns = [];
-    var token;
     if (!formatter) throwError('is not a valid formatter.', token);
     while(true) {
       if ((token = expect(':'))) {
@@ -2902,7 +2937,7 @@ function parser(text, json){
       function (self){
         var o = obj(self);
         var i = indexFn(self);
-        return (o) ? o[i] : _undefined;
+        return (o) ? o[i] : undefined;
       }, {
         assign:function(self, value){
           return obj(self)[indexFn(self)] = value;
@@ -3031,14 +3066,14 @@ Route.prototype = {
 
     params = params || {};
     forEach(this.urlParams, function(_, urlParam){
-      encodedVal = encodeUriSegment(params[urlParam] || self.defaults[urlParam] || "")
+      encodedVal = encodeUriSegment(params[urlParam] || self.defaults[urlParam] || "");
       url = url.replace(new RegExp(":" + urlParam + "(\\W)"), encodedVal + "$1");
     });
     url = url.replace(/\/?#$/, '');
     var query = [];
     forEachSorted(params, function(value, key){
       if (!self.urlParams[key]) {
-        query.push(encodeUriSegment(key) + '=' + encodeUriSegment(value));
+        query.push(encodeUriQuery(key) + '=' + encodeUriQuery(value));
       }
     });
     url = url.replace(/\/*$/, '');
@@ -3109,13 +3144,15 @@ ResourceFactory.prototype = {
           data,
           function(status, response, clear) {
             if (status == 200) {
-              if (action.isArray) {
-                value.length = 0;
-                forEach(response, function(item){
-                  value.push(new Resource(item));
-                });
-              } else {
-                copy(response, value);
+              if (response) {
+                if (action.isArray) {
+                  value.length = 0;
+                  forEach(response, function(item){
+                    value.push(new Resource(item));
+                  });
+                } else {
+                  copy(response, value);
+                }
               }
               (callback||noop)(value);
             } else {
@@ -3140,7 +3177,7 @@ ResourceFactory.prototype = {
         default:
           throw "Expected between 1-2 arguments [params, callback], got " + arguments.length + " arguments.";
         }
-        var data = isPostOrPut ? this : _undefined;
+        var data = isPostOrPut ? this : undefined;
         Resource[name].call(this, params, data, callback);
       };
     });
@@ -3244,7 +3281,7 @@ function Browser(window, document, body, XHR, $log) {
       var script = jqLite('<script>')
           .attr({type: 'text/javascript', src: url.replace('JSON_CALLBACK', callbackId)});
       window[callbackId] = function(data){
-        window[callbackId] = _undefined;
+        window[callbackId] = undefined;
         script.remove();
         completeOutstandingRequest(callback, 200, data);
       };
@@ -3439,7 +3476,7 @@ function Browser(window, document, body, XHR, $log) {
     var cookieLength, cookieArray, cookie, i, keyValue, index;
 
     if (name) {
-      if (value === _undefined) {
+      if (value === undefined) {
         rawDocument.cookie = escape(name) + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
       } else {
         if (isString(value)) {
@@ -3923,7 +3960,7 @@ function JQLite(element) {
     div.innerHTML = '<div>&nbsp;</div>' + element; // IE insanity to make NoScope elements work!
     div.removeChild(div.firstChild); // remove the superfluous div
     JQLiteAddNodes(this, div.childNodes);
-    this.remove(); // detach the elements form the temporary DOM div.
+    this.remove(); // detach the elements from the temporary DOM div.
   } else {
     JQLiteAddNodes(this, element);
   }
@@ -3962,7 +3999,7 @@ function JQLiteData(element, key, value) {
     }
     cache[key] = value;
   } else {
-    return cache ? cache[key] : _null;
+    return cache ? cache[key] : null;
   }
 }
 
@@ -3993,8 +4030,7 @@ function JQLiteAddNodes(root, elements) {
       ? elements
       : [ elements ];
     for(var i=0; i < elements.length; i++) {
-      if (elements[i].nodeType != 11)
-        root.push(elements[i]);
+      root.push(elements[i]);
     }
   }
 }
@@ -4108,11 +4144,13 @@ forEach({
    * Properties: writes return selection, reads return first value
    */
   JQLite.prototype[name] = function(arg1, arg2) {
+    var i, key;
+
     if ((fn.length == 2 ? arg1 : arg2) === undefined) {
       if (isObject(arg1)) {
         // we are a write, but the object properties are the key/values
-        for(var i=0; i < this.length; i++) {
-          for ( var key in arg1) {
+        for(i=0; i < this.length; i++) {
+          for (key in arg1) {
             fn(this[i], key, arg1[key]);
           }
         }
@@ -4125,7 +4163,7 @@ forEach({
       }
     } else {
       // we are a write, so apply to all children
-      for(var i=0; i < this.length; i++) {
+      for(i=0; i < this.length; i++) {
         fn(this[i], arg1, arg2);
       }
       // return self for chaining
@@ -4198,7 +4236,8 @@ forEach({
 
   append: function(element, node) {
     forEach(new JQLite(node), function(child){
-      element.appendChild(child);
+      if (element.nodeType === 1)
+        element.appendChild(child);
     });
   },
 
@@ -4227,8 +4266,8 @@ forEach({
   },
 
   parent: function(element) {
-    // in IE it returns undefined, but we need differentiate it from functions which have no return
-    return element.parentNode || null;
+    var parent = element.parentNode;
+    return parent && parent.nodeType !== 11 ? parent : null;
   },
 
   next: function(element) {
@@ -4262,7 +4301,7 @@ forEach({
 });
 var angularGlobal = {
   'typeOf':function(obj){
-    if (obj === _null) return $null;
+    if (obj === null) return $null;
     var type = typeof obj;
     if (type == $object) {
       if (obj instanceof Array) return $array;
@@ -5574,7 +5613,7 @@ angularFilter.linky = function(text){
 };
 function formatter(format, parse) {return {'format':format, 'parse':parse || format};}
 function toString(obj) {
-  return (isDefined(obj) && obj !== _null) ? "" + obj : obj;
+  return (isDefined(obj) && obj !== null) ? "" + obj : obj;
 }
 
 var NUMBER = /^\s*[-+]?\d*(\.\d*)?\s*$/;
@@ -5668,8 +5707,8 @@ angularFormatter['boolean'] = formatter(toString, toBoolean);
    </doc:example>
  */
 angularFormatter.number = formatter(toString, function(obj){
-  if (obj == _null || NUMBER.exec(obj)) {
-    return obj===_null || obj === '' ? _null : 1*obj;
+  if (obj == null || NUMBER.exec(obj)) {
+    return obj===null || obj === '' ? null : 1*obj;
   } else {
     throw "Not a number";
   }
@@ -5810,7 +5849,7 @@ angularFormatter.index = formatter(
   }
 );
 extend(angularValidator, {
-  'noop': function() { return _null; },
+  'noop': function() { return null; },
 
   /**
    * @workInProgress
@@ -5853,7 +5892,7 @@ extend(angularValidator, {
       return msg ||
         "Value does not match expected format " + regexp + ".";
     } else {
-      return _null;
+      return null;
     }
   },
 
@@ -5905,7 +5944,7 @@ extend(angularValidator, {
       if (typeof min != $undefined && num > max) {
         return "Value can not be greater than " + max + ".";
       }
-      return _null;
+      return null;
     } else {
       return "Not a number";
     }
@@ -5955,7 +5994,7 @@ extend(angularValidator, {
     if (!("" + value).match(/^\s*[\d+]*\s*$/) || value != Math.round(value)) {
       return "Not a whole number";
     }
-    return _null;
+    return null;
   },
 
   /**
@@ -5993,7 +6032,7 @@ extend(angularValidator, {
             date.getFullYear() == fields[3] &&
             date.getMonth() == fields[1]-1 &&
             date.getDate() == fields[2])
-              ? _null 
+              ? null
               : "Value is not a date. (Expecting format: 12/31/2009).";
   },
 
@@ -6026,7 +6065,7 @@ extend(angularValidator, {
    */
   'email': function(value) {
     if (value.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)) {
-      return _null;
+      return null;
     }
     return "Email needs to be in username@host.com format.";
   },
@@ -6060,10 +6099,10 @@ extend(angularValidator, {
    */
   'phone': function(value) {
     if (value.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/)) {
-      return _null;
+      return null;
     }
     if (value.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/)) {
-      return _null;
+      return null;
     }
     return "Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly.";
   },
@@ -6097,7 +6136,7 @@ extend(angularValidator, {
    */
   'url': function(value) {
     if (value.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/)) {
-      return _null;
+      return null;
     }
     return "URL needs to be in http://server[:port]/path format.";
   },
@@ -6133,7 +6172,7 @@ extend(angularValidator, {
   'json': function(value) {
     try {
       fromJson(value);
-      return _null;
+      return null;
     } catch (e) {
       return e.toString();
     }
@@ -6375,7 +6414,7 @@ angularServiceInject('$cookies', function($browser) {
     //delete any cookies deleted in $cookies
     for (name in lastCookies) {
       if (isUndefined(cookies[name])) {
-        $browser.cookies(name, _undefined);
+        $browser.cookies(name, undefined);
       }
     }
 
@@ -6531,7 +6570,7 @@ angularServiceInject("$hover", function(browser, document) {
       }
     } else if (tooltip) {
       tooltip.callout.remove();
-      tooltip = _null;
+      tooltip = null;
     }
   });
 }, ['$browser', '$document'], true);
@@ -6803,7 +6842,7 @@ angularServiceInject("$location", function($browser) {
    */
   function composeHref(loc) {
     var url = toKeyValue(loc.search);
-    var port = (loc.port == DEFAULT_PORTS[loc.protocol] ? _null : loc.port);
+    var port = (loc.port == DEFAULT_PORTS[loc.protocol] ? null : loc.port);
 
     return loc.protocol  + '://' + loc.host +
           (port ? ':' + port : '') + loc.path +
@@ -6837,7 +6876,7 @@ angularServiceInject("$location", function($browser) {
       loc.href = href.replace(/#$/, '');
       loc.protocol = match[1];
       loc.host = match[3] || '';
-      loc.port = match[5] || DEFAULT_PORTS[loc.protocol] || _null;
+      loc.port = match[5] || DEFAULT_PORTS[loc.protocol] || null;
       loc.path = match[6] || '';
       loc.search = parseKeyValue(match[8]);
       loc.hash = match[10] || '';
@@ -7360,14 +7399,14 @@ angularServiceInject('$route', function(location, $updateView) {
       });
       if (dstName) this.$set(dstName, dst);
     }
-    return match ? dst : _null;
+    return match ? dst : null;
   }
 
 
   function updateRoute(){
     var childScope, routeParams, pathParams, segmentMatch, key, redir;
 
-    $route.current = _null;
+    $route.current = null;
     forEach(routes, function(rParams, rPath) {
       if (!pathParams) {
         if (pathParams = matcher(location.hashPath, rPath)) {
@@ -7377,7 +7416,7 @@ angularServiceInject('$route', function(location, $updateView) {
     });
 
     // "otherwise" fallback
-    routeParams = routeParams || routes[_null];
+    routeParams = routeParams || routes[null];
 
     if(routeParams) {
       if (routeParams.redirectTo) {
@@ -7530,7 +7569,7 @@ angularServiceInject('$xhr.bulk', function($xhr, $error, $log){
   function bulkXHR(method, url, post, callback) {
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     var currentQueue;
     forEach(bulkXHR.urls, function(queue){
@@ -7595,18 +7634,25 @@ angularServiceInject('$xhr.bulk', function($xhr, $error, $log){
  * @param {boolean=} [verifyCache=false] If `true` then a result is immediately returned from cache
  *   (if present) while a request is sent to the server for a fresh response that will update the
  *   cached entry. The `callback` function will be called when the response is received.
+ * @param {boolean=} [sync=false] in case of cache hit execute `callback` synchronously.
  */
 angularServiceInject('$xhr.cache', function($xhr, $defer, $log){
   var inflight = {}, self = this;
-  function cache(method, url, post, callback, verifyCache){
+  function cache(method, url, post, callback, verifyCache, sync){
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     if (method == 'GET') {
       var data, dataCached;
       if (dataCached = cache.data[url]) {
-        $defer(function() { callback(200, copy(dataCached.value)); });
+
+        if (sync) {
+          callback(200, copy(dataCached.value));
+        } else {
+          $defer(function() { callback(200, copy(dataCached.value)); });
+        }
+
         if (!verifyCache)
           return;
       }
@@ -7811,7 +7857,7 @@ angularServiceInject('$xhr', function($browser, $error, $log, $updateView){
   return function(method, url, post, callback){
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     if (post && isObject(post)) {
       post = toJson(post);
@@ -8046,7 +8092,7 @@ angularDirective("ng:bind", function(expression, element){
     var lastValue = noop, lastError = noop;
     this.$onEval(function() {
       var error, value, html, isHtml, isDomElement,
-          oldElement = this.hasOwnProperty($$element) ? this.$element : _undefined;
+          oldElement = this.hasOwnProperty($$element) ? this.$element : undefined;
       this.$element = element;
       value = this.$tryEval(expression, function(e){
         error = formatError(e);
@@ -8073,7 +8119,7 @@ angularDirective("ng:bind", function(expression, element){
           element.html('');
           element.append(value);
         } else {
-          element.text(value == _undefined ? '' : value);
+          element.text(value == undefined ? '' : value);
         }
       }
     }, element);
@@ -8101,7 +8147,7 @@ function compileBindTemplate(template){
     });
     bindTemplateCache[template] = fn = function(element, prettyPrintJson){
       var parts = [], self = this,
-         oldElement = this.hasOwnProperty($$element) ? self.$element : _undefined;
+         oldElement = this.hasOwnProperty($$element) ? self.$element : undefined;
       self.$element = element;
       for ( var i = 0; i < bindings.length; i++) {
         var value = bindings[i].call(self, element);
@@ -8611,7 +8657,7 @@ angularDirective("ng:style", function(expression, element){
     this.$onEval(function(){
       var style = this.$eval(expression) || {}, key, mergedStyle = {};
       for(key in style) {
-        if (resetStyle[key] === _undefined) resetStyle[key] = '';
+        if (resetStyle[key] === undefined) resetStyle[key] = '';
         mergedStyle[key] = style[key];
       }
       for(key in resetStyle) {
@@ -8644,11 +8690,11 @@ function parseBindings(string) {
 
 function binding(string) {
   var binding = string.replace(/\n/gm, ' ').match(/^\{\{(.*)\}\}$/);
-  return binding ? binding[1] : _null;
+  return binding ? binding[1] : null;
 }
 
 function hasBindings(bindings) {
-  return bindings.length > 1 || binding(bindings[0]) !== _null;
+  return bindings.length > 1 || binding(bindings[0]) !== null;
 }
 
 angularTextMarkup('{{}}', function(text, textNode, parentElement) {
@@ -8923,7 +8969,7 @@ function modelAccessor(scope, element) {
         return scope.$eval(expr);
       },
       set: function(value) {
-        if (value !== _undefined) {
+        if (value !== undefined) {
           return scope.$tryEval(function(){
             assign(scope, value);
           }, element);
@@ -9085,7 +9131,7 @@ function valueAccessor(scope, element) {
   return {
     get: function(){
       if (lastError)
-        elementError(element, NG_VALIDATION_ERROR, _null);
+        elementError(element, NG_VALIDATION_ERROR, null);
       try {
         var value = parse(scope, element.val());
         validate();
@@ -9108,13 +9154,13 @@ function valueAccessor(scope, element) {
   function validate() {
     var value = trim(element.val());
     if (element[0].disabled || element[0].readOnly) {
-      elementError(element, NG_VALIDATION_ERROR, _null);
+      elementError(element, NG_VALIDATION_ERROR, null);
       invalidWidgets.markValid(element);
     } else {
       var error, validateScope = inherit(scope, {$element:element});
       error = required && !value
               ? 'Required'
-              : (value ? validator(validateScope, value) : _null);
+              : (value ? validator(validateScope, value) : null);
       elementError(element, NG_VALIDATION_ERROR, error);
       lastError = error;
       if (error) {
@@ -9142,7 +9188,7 @@ function radioAccessor(scope, element) {
   var domElement = element[0];
   return {
     get: function(){
-      return domElement.checked ? domElement.value : _null;
+      return domElement.checked ? domElement.value : null;
     },
     set: function(value){
       domElement.checked = value == domElement.value;
@@ -9200,7 +9246,7 @@ var textWidget = inputWidget('keydown change', modelAccessor, valueAccessor, ini
       'image':           buttonWidget,
       'checkbox':        inputWidget('click', modelFormattedAccessor, checkedAccessor, initWidgetValue(false)),
       'radio':           inputWidget('click', modelFormattedAccessor, radioAccessor, radioInit),
-      'select-one':      inputWidget('change', modelAccessor, valueAccessor, initWidgetValue(_null)),
+      'select-one':      inputWidget('change', modelAccessor, valueAccessor, initWidgetValue(null)),
       'select-multiple': inputWidget('change', modelAccessor, optionsAccessor, initWidgetValue([]))
 //      'file':            fileWidget???
     };
@@ -9223,9 +9269,9 @@ function radioInit(model, view, element) {
  input.checked = false;
  input.name = this.$id + '@' + input.name;
  if (isUndefined(modelValue)) {
-   model.set(modelValue = _null);
+   model.set(modelValue = null);
  }
- if (modelValue == _null && viewValue !== _null) {
+ if (modelValue == null && viewValue !== null) {
    model.set(viewValue);
  }
  view.set(modelValue);
@@ -9448,12 +9494,12 @@ angularWidget('ng:include', function(element){
             useScope = this.$eval(scopeExp);
 
         if (src) {
-          xhr('GET', src, function(code, response){
+          xhr('GET', src, null, function(code, response){
             element.html(response);
             childScope = useScope || createScope(scope);
             compiler.compile(element)(childScope);
             scope.$eval(onloadExp);
-          });
+          }, false, true);
         } else {
           childScope = null;
           element.html('');
@@ -9688,19 +9734,12 @@ angularWidget('@ng:repeat', function(expression, element){
           childCount = children.length,
           lastIterElement = iterStartElement,
           collection = this.$tryEval(rhs, iterStartElement),
-          is_array = isArray(collection),
-          collectionLength = 0,
+          collectionLength = size(collection, true),
+          fragment = (element[0].nodeName != 'OPTION') ? document.createDocumentFragment() : null,
+          addFragment,
           childScope,
           key;
 
-      if (is_array) {
-        collectionLength = collection.length;
-      } else {
-        for (key in collection)
-          if (collection.hasOwnProperty(key))
-            collectionLength++;
-      }
-
       for (key in collection) {
         if (collection.hasOwnProperty(key)) {
           if (index < childCount) {
@@ -9709,6 +9748,7 @@ angularWidget('@ng:repeat', function(expression, element){
             childScope[valueIdent] = collection[key];
             if (keyIdent) childScope[keyIdent] = key;
             lastIterElement = childScope.$element;
+            childScope.$eval();
           } else {
             // grow children
             childScope = createScope(currentScope);
@@ -9721,14 +9761,26 @@ angularWidget('@ng:repeat', function(expression, element){
             children.push(childScope);
             linker(childScope, function(clone){
               clone.attr('ng:repeat-index', index);
-              lastIterElement.after(clone);
-              lastIterElement = clone;
+
+              if (fragment) {
+                fragment.appendChild(clone[0]);
+                addFragment = true;
+              } else {
+                //temporarily preserve old way for option element
+                lastIterElement.after(clone);
+                lastIterElement = clone;
+              }
             });
           }
-          childScope.$eval();
           index ++;
         }
       }
+
+      //attach new nodes buffered in doc fragment
+      if (addFragment) {
+        lastIterElement.after(jqLite(fragment));
+      }
+
       // shrink children
       while(children.length > index) {
         children.pop().$element.remove();
@@ -9841,10 +9893,10 @@ angularWidget('ng:view', function(element) {
         }
 
         if (src) {
-          $xhr('GET', src, function(code, response){
+          $xhr('GET', src, null, function(code, response){
             element.html(response);
             compiler.compile(element)(childScope);
-          });
+          }, false, true);
         } else {
           element.html('');
         }
index e0696fe..e630a7e 100644 (file)
-(function(J,da,qa){function t(a,b,c){var d;if(a)if(L(a))for(d in a)d!="prototype"&&d!=sc&&d!=tc&&a.hasOwnProperty(d)&&b.call(c,a[d],d);else if(a.forEach&&a.forEach!==t)a.forEach(b,c);else if(X(a)&&Ca(a.length))for(d=0;d<a.length;d++)b.call(c,a[d],d);else for(d in a)b.call(c,a[d],d);return a}function $a(a,b,c){var d=[],e;for(e in a)d.push(e);d.sort();for(e=0;e<d.length;e++)b.call(c,a[d[e]],d[e]);return d}function ab(a){if(a instanceof ba)if(a.stack)a=a.stack;else if(a.sourceURL)a=a.message+"\n"+a.sourceURL+
-":"+a.line;return a}function B(a){t(arguments,function(b){b!==a&&t(b,function(c,d){a[d]=c})});return a}function uc(a,b){return B(new (B(function(){},{prototype:a})),b)}function D(){}function ra(a){return a}function Na(a){return function(){return a}}function ha(a,b,c){var d;return a[b]||(d=a[b]=function(e,g,f){e=(c||ra)(e);if(I(g))d[e]=B(g,f||{});return d[e]})}function N(a){return typeof a==sa}function I(a){return typeof a!=sa}function X(a){return a!=A&&typeof a==Bb}function G(a){return typeof a==
-vc}function Ca(a){return typeof a==wc}function ia(a){return a instanceof Array}function L(a){return typeof a==ja}function Da(a){return G(a)?a.replace(/^\s*/,"").replace(/\s*$/,""):a}function bb(a,b){this.html=a;this.get=O(b)=="unsafe"?Na(a):function(){var c=[];Cb(a,Db(c));return c.join("")}}function xc(a,b,c){var d=[];t(a,function(e,g,f){d.push(b.call(c,e,g,f))});return d}function Eb(a,b){for(var c=0;c<a.length;c++)if(b===a[c])return true;return false}function Ga(a,b){for(var c=0;c<a.length;c++)if(b===
-a[c])return c;return-1}function yc(a){if(a)switch(a.nodeName){case "OPTION":case "PRE":case "TITLE":return true}return false}function U(a,b){if(b)if(ia(a)){for(;b.length;)b.pop();for(var c=0;c<a.length;c++)b.push(U(a[c]))}else{t(b,function(d,e){delete b[e]});for(c in a)b[c]=U(a[c])}else if(b=a)if(ia(a))b=U(a,[]);else if(a instanceof Date)b=new Date(a.getTime());else if(X(a))b=U(a,{});return b}function Ha(a,b){if(a==b)return true;if(a===null||b===null)return false;var c=typeof a,d;if(c==typeof b&&
-c=="object")if(a instanceof Array){if((c=a.length)==b.length){for(d=0;d<c;d++)if(!Ha(a[d],b[d]))return false;return true}}else{c={};for(d in a){if(d.charAt(0)!=="$"&&!L(a[d])&&!Ha(a[d],b[d]))return false;c[d]=true}for(d in b)if(!c[d]&&d.charAt(0)!=="$"&&!L(b[d]))return false;return true}return false}function zc(a){return(a=a&&a[0]&&a[0].nodeName)&&a.charAt(0)!="#"&&!Eb(["TR","COL","COLGROUP","TBODY","THEAD","TFOOT"],a)}function ta(a,b,c){for(;!zc(a);)a=a.parent()||C(da.body);if(a[0].$NG_ERROR!==c)if(a[0].$NG_ERROR=
-c){a.addClass(b);a.attr(b,c.message||c)}else{a.removeClass(b);a.removeAttr(b)}}function V(a,b){var c=arguments.length>2?ua.call(arguments,2,arguments.length):[];return typeof b==ja&&!(b instanceof RegExp)?c.length?function(){return arguments.length?b.apply(a,c.concat(ua.call(arguments,0,arguments.length))):b.apply(a,c)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}:b}function Ea(a){if(a&&a.length!==0){a=O(""+a);a=!(a=="f"||a=="0"||a=="false"||a=="no"||a=="n"||a=="[]")}else a=
-false;return a}function Fb(a){return(new Gb(cb,Hb,P,Z)).compile(a)}function db(a){var b={},c,d;t((a||"").split("&"),function(e){if(e){c=e.split("=");d=unescape(c[0]);b[d]=I(c[1])?unescape(c[1]):true}});return b}function Ib(a){var b=[];t(a,function(c,d){b.push(escape(d)+(c===true?"":"="+escape(c)))});return b.length?b.join("&"):""}function eb(a){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+").replace(/%24/g,"$").replace(/%2C/gi,
-",")}function Ac(a,b){Jb();var c=a.getElementsByTagName("script"),d;b=B({ie_compat_id:"ng-ie-compat"},b);for(var e=0;e<c.length;e++)if(d=(c[e].src||"").match(Bc)){b.base_url=d[1];b.ie_compat=d[1]+"angular-ie-compat"+(d[2]||"")+".js";B(b,db(d[6]));Oa(C(c[e]),function(g,f){if(/^ng:/.exec(f)){f=f.substring(3).replace(/-/g,"_");g=g||true;b[f]=g}})}return b}function Jb(){if(fb=J.jQuery){C=fb;B(fb.fn,{scope:Kb.scope})}else C=gb;E.element=C}function Lb(a,b,c){if(!a){a=new ba("Argument '"+(b||"?")+"' is "+
-(c||"required"));J.console&&J.console.log(a.stack);throw a;}}function ea(a,b){var c=[];hb(c,a,b?"\n  ":A,[]);return c.join("")}function va(a,b){function c(i){if(G(i)&&i.length===Mb)return ib.toDate(i);else if(ia(i)||X(i))t(i,function(h,j){i[j]=c(h)});return i}if(!G(a))return a;var d,e,g;try{if(b&&J.JSON&&J.JSON.parse){d=JSON.parse(a);return c(d)}e=wa(a,true);g=e.primary();e.assertAllConsumed();return g()}catch(f){Cc("fromJson error: ",a,f);throw f;}}function hb(a,b,c,d){if(X(b)){if(b===J){a.push("WINDOW");
-return}if(b===da){a.push("DOCUMENT");return}if(Eb(d,b)){a.push("RECURSION");return}d.push(b)}if(b===A)a.push(Pa);else if(b instanceof RegExp)a.push(E.String.quoteUnicode(b.toString()));else if(L(b))return;else if(typeof b==Dc)a.push(""+b);else if(Ca(b))isNaN(b)?a.push(Pa):a.push(""+b);else if(G(b))return a.push(E.String.quoteUnicode(b));else if(X(b))if(ia(b)){a.push("[");for(var e=b.length,g=false,f=0;f<e;f++){var i=b[f];g&&a.push(",");!(i instanceof RegExp)&&(L(i)||N(i))?a.push(Pa):hb(a,i,c,d);g=
-true}a.push("]")}else if(b instanceof Date)a.push(E.String.quoteUnicode(E.Date.toString(b)));else{a.push("{");c&&a.push(c);e=false;g=c?c+"  ":false;f=[];for(i in b)b[i]!==$&&f.push(i);f.sort();for(i=0;i<f.length;i++){var h=f[i],j=b[h];if(typeof j!=ja){if(e){a.push(",");c&&a.push(c)}a.push(E.String.quote(h));a.push(":");hb(a,j,g,d);e=true}}a.push("}")}X(b)&&d.pop()}function jb(a){this.paths=[];this.children=[];this.inits=[];this.priority=a;this.newScope=false}function Gb(a,b,c,d){this.markup=a;this.attrMarkup=
-b;this.directives=c;this.widgets=d}function Nb(a,b){var c,d=a[0].childNodes||[],e;for(c=0;c<d.length;c++){var g=e=d[c];Ia(g)=="#text"||b(C(e),c)}}function Oa(a,b){var c,d=a[0].attributes||[],e,g,f={};for(c=0;c<d.length;c++){e=d[c];g=e.name;e=e.value;if(ka&&g=="href")e=decodeURIComponent(a[0].getAttribute(g,2));f[g]=e}$a(f,b)}function Ja(a,b,c){if(!b)return a;for(var d=b.split("."),e,g=a,f=d.length,i=0;i<f;i++){e=d[i];if(!e.match(/^[\$\w][\$\w\d]*$/))throw"Expression '"+b+"' is not a valid expression for accesing variables.";
-if(a){g=a;a=a[e]}if(N(a)&&e.charAt(0)=="$"){var h=E.Global.typeOf(g);if(e=(h=E[h.charAt(0).toUpperCase()+h.substring(1)])?h[[e.substring(1)]]:$)return a=V(g,e,g)}}if(!c&&L(a))return V(g,a);return a}function kb(a,b,c){b=b.split(".");for(var d=0;b.length>1;d++){var e=b.shift(),g=a[e];if(!g){g={};a[e]=g}a=g}return a[b.shift()]=c}function Ob(a){var b=Pb[a];if(b)return b;var c="var l, fn, t;\n";t(a.split("."),function(d){d=Qb[d]?'["'+d+'"]':"."+d;c+="if(!s) return s;\nl=s;\ns=s"+d+';\nif(typeof s=="function" && !(s instanceof RegExp)) s = function(){ return l'+
-d+".apply(l, arguments); };\n";if(d.charAt(1)=="$"){d=d.substr(2);c+='if(!s) {\n  t = angular.Global.typeOf(l);\n  fn = (angular[t.charAt(0).toUpperCase() + t.substring(1)]||{})["'+d+'"];\n  if (fn) s = function(){ return fn.apply(l, [l].concat(Array.prototype.slice.call(arguments, 0, arguments.length))); };\n}\n'}});c+="return s;";b=Function("s",c);b.toString=function(){return c};return Pb[a]=b}function xa(a){if(typeof a===ja)return a;var b=Rb[a];if(!b){b=wa(a);var c=b.statements();b.assertAllConsumed();
-b=Rb[a]=B(function(){return c(this)},{fnSelf:c})}return b}function la(a,b,c){function d(){}a=d.prototype=a||{};var e=new d,g={sorted:[]},f,i;B(e,{"this":e,$id:Ec++,$parent:a,$bind:V(e,V,e),$get:V(e,Ja,e),$set:V(e,kb,e),$eval:function(h){var j=typeof h,k,l,n;if(j==sa){h=0;for(j=g.sorted.length;h<j;h++){n=g.sorted[h];l=n.length;for(k=0;k<l;k++)e.$tryEval(n[k].fn,n[k].handler)}}else if(j===ja)return h.call(e);else if(j==="string")return xa(h).call(e)},$tryEval:function(h,j){var k=typeof h;try{if(k==
-ja)return h.call(e);else if(k=="string")return xa(h).call(e)}catch(l){f&&f.error(l);if(L(j))j(l);else if(j)ta(j,Qa,I(l)?ab(l):l);else L(i)&&i(l)}},$watch:function(h,j,k,l){function n(x){var s=q.call(e),p=o;if(x||p!==s){o=s;e.$tryEval(function(){return j.call(e,s,p)},k)}}var q=xa(h),o=q.call(e);j=xa(j);e.$onEval(Sb,n);if(N(l))l=true;l&&n(true)},$onEval:function(h,j,k){if(!Ca(h)){k=j;j=h;h=0}var l=g[h];if(!l){l=g[h]=[];l.priority=h;g.sorted.push(l);g.sorted.sort(function(n,q){return n.priority-q.priority})}l.push({fn:xa(j),
-handler:k})},$become:function(h){if(L(h)){e.constructor=h;t(h.prototype,function(j,k){e[k]=V(e,j)});e.$service.apply(e,[h,e].concat(ua.call(arguments,1,arguments.length)));L(h.prototype.init)&&e.init()}},$new:function(h){var j=la(e);j.$become.apply(e,[h].concat(ua.call(arguments,1,arguments.length)));e.$onEval(j.$eval);return j}});if(!a.$root){e.$root=e;e.$parent=e;(e.$service=Tb(e,b,c))()}f=e.$service("$log");i=e.$service("$exceptionHandler");return e}function Tb(a,b,c){b=b||lb;c=c||{};a=a||{};return function d(e,
-g){var f,i;if(G(e)){if(!(e in c)){i=b[e];if(!i)throw"Unknown provider for '"+e+"'.";c[e]=d(i,a)}f=c[e]}else if(ia(e)){f=[];t(e,function(h){f.push(d(h))})}else if(L(e)){f=d(Fc(e));f=e.apply(g,f.concat(ua.call(arguments,2,arguments.length)))}else if(X(e))t(b,function(h,j){h.$eager&&d(j);if(h.$creation)throw new ba("Failed to register service '"+j+"': $creation property is unsupported. Use $eager:true or see release notes.");});else f=d(a);return f}}function Q(a,b,c,d){lb(a,b,{$inject:c,$eager:d})}function Fc(a){Lb(L(a,
-void 0,"not a function"));if(!a.$inject){var b=a.$inject=[],c=a.toString().replace(Gc,"").match(Hc);t(c[1].split(Ic),function(d){d.replace(Jc,function(e,g,f,i,h){Lb(b,g,"after non-injectable arg");if(i||h)b.push(f);else b=null})})}return a.$inject}function Kc(a,b){function c(w){return w.indexOf(s)!=-1}function d(){return o+1<a.length?a.charAt(o+1):false}function e(w){return"0"<=w&&w<="9"}function g(w){return"a"<=w&&w<="z"||"A"<=w&&w<="Z"||"_"==w||w=="$"}function f(w){return w=="-"||w=="+"||e(w)}function i(w,
-M,y){y=y||o;throw ba("Lexer Error: "+w+" at column"+(I(M)?"s "+M+"-"+o+" ["+a.substring(M,y)+"]":" "+y)+" in expression ["+a+"].");}function h(){for(var w="",M=o;o<a.length;){var y=O(a.charAt(o));if(y=="."||e(y))w+=y;else{var F=d();if(y=="e"&&f(F))w+=y;else if(f(y)&&F&&e(F)&&w.charAt(w.length-1)=="e")w+=y;else if(f(y)&&(!F||!e(F))&&w.charAt(w.length-1)=="e")i("Invalid exponent");else break}o++}w=1*w;n.push({index:M,text:w,json:true,fn:function(){return w}})}function j(){for(var w="",M=o,y;o<a.length;){y=
-a.charAt(o);if(y=="."||g(y)||e(y))w+=y;else break;o++}y=mb[w];n.push({index:M,text:w,json:y,fn:y||B(Ob(w),{assign:function(F,R){return kb(F,w,R)}})})}function k(w){var M=o;o++;for(var y="",F=w,R=false;o<a.length;){var S=a.charAt(o);F+=S;if(R){if(S=="u"){S=a.substring(o+1,o+5);S.match(/[\da-f]{4}/i)||i("Invalid unicode escape [\\u"+S+"]");o+=4;y+=String.fromCharCode(parseInt(S,16))}else{R=Lc[S];y+=R?R:S}R=false}else if(S=="\\")R=true;else if(S==w){o++;n.push({index:M,text:F,string:y,json:true,fn:function(){return y.length==
-l?E.String.toDate(y):y}});return}else y+=S;o++}i("Unterminated quote",M)}for(var l=b?Mb:-1,n=[],q,o=0,x=[],s,p=":";o<a.length;){s=a.charAt(o);if(c("\"'"))k(s);else if(e(s)||c(".")&&e(d()))h();else if(g(s)){j();if("{,".indexOf(p)!=-1&&x[0]=="{"&&(q=n[n.length-1]))q.json=q.text.indexOf(".")==-1}else if(c("(){}[].,;:")){n.push({index:o,text:s,json:":[,".indexOf(p)!=-1&&c("{[")||c("}]:,")});c("{[")&&x.unshift(s);c("}]")&&x.shift();o++}else if(s==" "||s=="\r"||s=="\t"||s=="\n"||s=="\u000b"||s=="\u00a0"){o++;
-continue}else{var z=s+d(),K=mb[s],aa=mb[z];if(aa){n.push({index:o,text:z,fn:aa});o+=2}else if(K){n.push({index:o,text:s,fn:K,json:"[,:".indexOf(p)!=-1&&c("+-")});o+=1}else i("Unexpected next character ",o,o+1)}p=s}return n}function wa(a,b){function c(m,r){throw ba("Parse Error: Token '"+r.text+"' "+m+" at column "+(r.index+1)+" of expression ["+a+"] starting at ["+a.substring(r.index)+"].");}function d(){if(y.length===0)throw ba("Unexpected end of expression: "+a);return y[0]}function e(m,r,u,v){if(y.length>
-0){var H=y[0],Y=H.text;if(Y==m||Y==r||Y==u||Y==v||!m&&!r&&!u&&!v)return H}return false}function g(m,r,u,v){if(m=e(m,r,u,v)){if(b&&!m.json){index=m.index;c("is not valid json",m)}y.shift();return this.currentToken=m}return false}function f(m){g(m)||c("is unexpected, expecting ["+m+"]",e())}function i(m,r){return function(u){return m(u,r(u))}}function h(m,r,u){return function(v){return r(v,m(v),u(v))}}function j(){y.length!==0&&c("is extra token not part of expression",y[0])}function k(){for(var m=
-[];;){y.length>0&&!e("}",")",";","]")&&m.push(nb());if(!g(";"))return function(r){for(var u,v=0;v<m.length;v++){var H=m[v];if(H)u=H(r)}return u}}}function l(){return ob(fa)}function n(){for(var m=q(),r;;)if(r=g("||"))m=h(m,r.fn,q());else return m}function q(){var m=o(),r;if(r=g("&&"))m=h(m,r.fn,q());return m}function o(){var m=x(),r;if(r=g("==","!="))m=h(m,r.fn,o());return m}function x(){var m;m=s();for(var r;r=g("+","-");)m=h(m,r.fn,s());m=m;if(r=g("<",">","<=",">="))m=h(m,r.fn,x());return m}function s(){for(var m=
-p(),r;r=g("*","/","%");)m=h(m,r.fn,p());return m}function p(){var m;return g("+")?z():(m=g("-"))?h(M,m.fn,p()):(m=g("!"))?i(m.fn,p()):z()}function z(){var m;if(g("(")){m=nb();f(")");m=m}else if(g("["))m=K();else if(g("{"))m=aa();else{var r=g();(m=r.fn)||c("not a primary expression",r)}for(;r=g("(","[",".");)if(r.text==="(")m=S(m);else if(r.text==="[")m=Ub(m);else if(r.text===".")m=Vb(m);else c("IMPOSSIBLE");return m}function K(){var m=[];if(d().text!="]"){do m.push(F());while(g(","))}f("]");return function(r){for(var u=
-[],v=0;v<m.length;v++)u.push(m[v](r));return u}}function aa(){var m=[];if(d().text!="}"){do{var r=g();r=r.string||r.text;f(":");var u=F();m.push({key:r,value:u})}while(g(","))}f("}");return function(v){for(var H={},Y=0;Y<m.length;Y++){var ya=m[Y],oa=ya.value(v);H[ya.key]=oa}return H}}function w(){var m=g().text;f(":");var r;if(d().text=="{"){f("{");r=k();f("}")}else r=F();return function(){return{name:m,fn:r}}}var M=Na(0),y=Kc(a,b),F=function(){var m=n(),r,u;if(u=g("=")){m.assign||c("implies assignment but ["+
-a.substring(0,u.index)+"] can not be assigned to",u);r=n();return function(v){return m.assign(v,r(v))}}else return m},R=n,S=function(m){var r=[];if(d().text!=")"){do r.push(F());while(g(","))}f(")");return function(u){for(var v=[],H=0;H<r.length;H++)v.push(r[H](u));H=m(u)||D;return H.apply?H.apply(u,v):H(v[0],v[1],v[2],v[3],v[4])}},Vb=function(m){var r=g().text,u=Ob(r);return B(function(v){return u(m(v))},{assign:function(v,H){return kb(m(v),r,H)}})},Ub=function(m){var r=F();f("]");return B(function(u){var v=
-m(u);u=r(u);return v?v[u]:$},{assign:function(u,v){return m(u)[r(u)]=v}})},nb=function(){for(var m=F(),r;;)if(r=g("|"))m=h(m,r.fn,l());else return m},Wb=function(m){var r=g(),u=r.text.split(".");m=m;for(var v,H=0;H<u.length;H++){v=u[H];if(m)m=m[v]}typeof m!=ja&&c("should be a function",r);return m},ob=function(m){for(var r=Wb(m),u=[];;)if(g(":"))u.push(F());else{var v=function(H,Y){for(var ya=[Y],oa=0;oa<u.length;oa++)ya.push(u[oa](H));return r.apply(H,ya)};return function(){return v}}};if(b){F=n;
-S=Vb=Ub=R=nb=Wb=ob=function(){c("is not valid json",{text:a,index:0})}}return{assertAllConsumed:j,assignable:R,primary:z,statements:k,validator:function(){return ob(pb)},formatter:function(){function m(H){return function(Y,ya){for(var oa=[ya],qb=0;qb<v.length;qb++)oa.push(v[qb](Y));return H.apply(Y,oa)}}var r=g(),u=pa[r.text],v=[];for(u||c("is not a valid formatter.",r);;)if(r=g(":"))v.push(F());else return Na({format:m(u.format),parse:m(u.parse)})},filter:l,watch:function(){for(var m=[];y.length>
-0;){m.push(w());g(";")||j()}j();return function(r){for(var u=0;u<m.length;u++){var v=m[u](r);r.addListener(v.name,v.fn)}}}}}function Xb(a,b){this.template=a+="#";this.defaults=b||{};var c=this.urlParams={};t(a.split(/\W/),function(d){if(d&&a.match(RegExp(":"+d+"\\W")))c[d]=true})}function Ra(a){this.xhr=a}function Mc(a,b,c,d,e){function g(p){try{p.apply(null,ua.call(arguments,1))}finally{k--;if(k===0)for(;l.length;)try{l.pop()()}catch(z){e.error(z)}}}var f=this,i=a.location,h=a.setTimeout;f.isMock=
-false;var j=0,k=0,l=[];f.xhr=function(p,z,K,aa,w){k++;if(O(p)=="json"){var M=("angular_"+Math.random()+"_"+j++).replace(/\d\./,""),y=C("<script>").attr({type:"text/javascript",src:z.replace("JSON_CALLBACK",M)});a[M]=function(R){a[M]=$;y.remove();g(aa,200,R)};c.append(y)}else{var F=new d;F.open(p,z,true);t(B(Nc,w||{}),function(R,S){R&&F.setRequestHeader(S,R)});F.onreadystatechange=function(){if(F.readyState==4)g(aa,F.status||200,F.responseText)};F.send(K||"")}};f.notifyWhenNoOutstandingRequests=function(p){k===
-0?p():l.push(p)};var n=[];f.poll=function(){t(n,function(p){p()})};f.addPollFn=function(p){n.push(p);return p};f.startPoller=function(p,z){(function K(){f.poll();z(K,p)})()};f.setUrl=function(p){i.href.match(/#/);p.match(/#/)||(p+="#");i.href=p};f.getUrl=function(){return i.href};f.onHashChange=function(p){if("onhashchange"in a)C(a).bind("hashchange",p);else{var z=f.getUrl();f.addPollFn(function(){if(z!=f.getUrl()){p();z=f.getUrl()}})}return p};var q=b[0],o={},x="";f.cookies=function(p,z){var K,aa,
-w,M;if(p)if(z===$)q.cookie=escape(p)+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";else{if(G(z)){q.cookie=escape(p)+"="+escape(z);K=p.length+z.length+1;K>4096&&e.warn("Cookie '"+p+"' possibly not set or overflowed because it was too large ("+K+" > 4096 bytes)!");o.length>20&&e.warn("Cookie '"+p+"' possibly not set or overflowed because too many cookies were already set ("+o.length+" > 20 )")}}else{if(q.cookie!==x){x=q.cookie;K=x.split("; ");o={};for(w=0;w<K.length;w++){aa=K[w];M=aa.indexOf("=");if(M>
-0)o[unescape(aa.substring(0,M))]=unescape(aa.substring(M+1))}}return o}};f.defer=function(p,z){k++;h(function(){g(p)},z||0)};var s=D;f.hover=function(p){s=p};f.bind=function(){b.bind("mouseover",function(p){s(C(ka?p.srcElement:p.target),true);return true});b.bind("mouseleave mouseout click dblclick keypress keyup",function(p){s(C(p.target),false);return true})};f.addCss=function(p){var z=C(q.createElement("link"));z.attr("rel","stylesheet");z.attr("type","text/css");z.attr("href",p);c.append(z)};
-f.addJs=function(p,z){var K=C(q.createElement("script"));K.attr("type","text/javascript");K.attr("src",p);z&&K.attr("id",z);c.append(K)}}function Cb(a,b){function c(h,j,k,l){j=O(j);if(Yb[j])for(;f.last()&&Zb[f.last()];)d("",f.last());$b[j]&&f.last()==j&&d("",j);(l=ac[j]||!!l)||f.push(j);var n={};k.replace(Oc,function(q,o,x,s,p){n[o]=rb(x||s||p||"")});b.start&&b.start(j,n,l)}function d(h,j){var k=0,l;if(j=O(j))for(k=f.length-1;k>=0;k--)if(f[k]==j)break;if(k>=0){for(l=f.length-1;l>=k;l--)b.end&&b.end(f[l]);
-f.length=k}}var e,g,f=[],i=a;for(f.last=function(){return f[f.length-1]};a;){g=true;if(!f.last()||!bc[f.last()]){if(a.indexOf("<!--")===0){e=a.indexOf("--\>");if(e>=0){b.comment&&b.comment(a.substring(4,e));a=a.substring(e+3);g=false}}else if(Pc.test(a)){if(e=a.match(cc)){a=a.substring(e[0].length);e[0].replace(cc,d);g=false}}else if(Qc.test(a))if(e=a.match(dc)){a=a.substring(e[0].length);e[0].replace(dc,c);g=false}if(g){e=a.indexOf("<");g=e<0?a:a.substring(0,e);a=e<0?"":a.substring(e);b.chars&&b.chars(rb(g))}}else{a=
-a.replace(RegExp("(.*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(h,j){j=j.replace(Rc,"$1").replace(Sc,"$1");b.chars&&b.chars(rb(j));return""});d("",f.last())}if(a==i)throw"Parse Error: "+a;i=a}d()}function za(a){var b={};a=a.split(",");var c;for(c=0;c<a.length;c++)b[a[c]]=true;return b}function rb(a){sb.innerHTML=a.replace(/</g,"&lt;");return sb.innerText||sb.textContent||""}function ec(a){return a.replace(/&/g,"&amp;").replace(Tc,function(b){return"&#"+b.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,
-"&gt;")}function Db(a){var b=false,c=V(a,a.push);return{start:function(d,e,g){d=O(d);if(!b&&bc[d])b=d;if(!b&&fc[d]==true){c("<");c(d);t(e,function(f,i){var h=O(i);if(Uc[h]==true&&(gc[h]!==true||f.match(Vc))){c(" ");c(i);c('="');c(ec(f));c('"')}});c(g?"/>":">")}},end:function(d){d=O(d);if(!b&&fc[d]==true){c("</");c(d);c(">")}if(d==b)b=false},chars:function(d){b||c(ec(d))}}}function Wc(a){var b={};a=a[0].style;var c,d;if(typeof a.length=="number")for(c=0;c<a.length;c++){d=a[c];b[d]=a[d]}else for(d in a){c=
-a[d];if(1*d!=d&&d!="cssText"&&c&&typeof c=="string"&&c!="false")b[d]=c}return b}function gb(a){if(G(a)&&a.charAt(0)!="<")throw new ba("selectors not implemented");return new ma(a)}function ma(a){if(a instanceof ma)return a;else if(G(a)){var b=da.createElement("div");b.innerHTML="<div>&nbsp;</div>"+a;b.removeChild(b.firstChild);tb(this,b.childNodes);this.remove()}else tb(this,a)}function Ka(a){hc(a);var b=0;for(a=a.childNodes||[];b<a.length;b++)Ka(a[b])}function hc(a){var b=a[Sa],c=Ta[b];if(c){t(c.bind||
-{},function(d,e){Xc(a,e,d)});delete Ta[b];a[Sa]=qa}}function ub(a,b,c){var d=a[Sa];d=Ta[d||-1];if(I(c)){if(!d){a[Sa]=d=Yc++;d=Ta[d]={}}d[b]=c}else return d?d[b]:A}function vb(a,b){var c=" "+b+" ";return(" "+a.className+" ").replace(/[\n\t]/g," ").indexOf(c)>-1}function ic(a,b){a.className=Da((" "+a.className+" ").replace(/[\n\t]/g," ").replace(" "+b+" ",""))}function jc(a,b){if(!vb(a,b))a.className=Da(a.className+" "+b)}function tb(a,b){if(b){b=!b.nodeName&&I(b.length)&&!(b&&b.document&&b.location&&
-b.alert&&b.setInterval)?b:[b];for(var c=0;c<b.length;c++)b[c].nodeType!=11&&a.push(b[c])}}function Aa(a,b){E[a]=E[a]||{};t(b,function(c){B(E[a],c)})}function ga(a,b,c){var d="";if(a<0){d="-";a=-a}for(a=""+a;a.length<b;)a="0"+a;if(c)a=a.substr(a.length-b);return d+a}function W(a,b,c,d){return function(e){e=e["get"+a]();if(c>0||e>-c)e+=c;if(e===0&&c==-12)e=12;return ga(e,b,d)}}function Ba(a,b){return{format:a,parse:b||a}}function kc(a){return I(a)&&a!==A?""+a:a}function wb(a){function b(){d=false;c.$eval()}
-var c=this,d;return a.isMock?b:function(){if(!d){d=true;a.defer(b,wb.delay)}}}function lc(a){var b=mc[a];if(!b){var c=[];t(Ua(a),function(d){var e=Va(d);c.push(e?function(g){var f,i=this.$tryEval(e,function(h){f=ea(h)});ta(g,Qa,f);return f?f:i}:function(){return d})});mc[a]=b=function(d,e){var g=[],f=this.hasOwnProperty(nc)?this.$element:$;this.$element=d;for(var i=0;i<c.length;i++){var h=c[i].call(this,d);if(h&&(h.nodeName||h.bind&&h.find))h="";else if(X(h))h=ea(h,e);g.push(h)}this.$element=f;return g.join("")}}return b}
-function xb(a){return function(b,c){var d=c[0].className+" ";return function(e){this.$onEval(function(){if(a(this.$index)){var g=this.$eval(b);if(ia(g))g=g.join(" ");e[0].className=Da(d+g)}},e)}}}function Ua(a){for(var b=[],c=0,d;(d=a.indexOf("{{",c))>-1;){c<d&&b.push(a.substr(c,d-c));c=d;d=a.indexOf("}}",d);d=d<0?a.length:d+2;b.push(a.substr(c,d-c));c=d}c!=a.length&&b.push(a.substr(c,a.length-c));return b.length===0?[a]:b}function Va(a){return(a=a.replace(/\n/gm," ").match(/^\{\{(.*)\}\}$/))?a[1]:
-A}function La(a,b){var c=b.attr("name"),d;if(c){d=wa(c).assignable().assign;if(!d)throw new ba("Expression '"+c+"' is not assignable.");return{get:function(){return a.$eval(c)},set:function(e){if(e!==$)return a.$tryEval(function(){d(a,e)},b)}}}}function yb(a,b){var c=La(a,b),d=b.attr("ng:format")||Wa,e=wa(d).formatter()();if(c)return{get:function(){return e.format(a,c.get())},set:function(g){return c.set(e.parse(a,g))}}}function zb(a,b){function c(){var n=Da(b.val());if(b[0].disabled||b[0].readOnly){ta(b,
-Ma,A);l.markValid(b)}else{var q=uc(a,{$element:b});n=k&&!n?"Required":n?e(q,n):A;ta(b,Ma,n);(j=n)?l.markInvalid(b):l.markValid(b)}}var d=b.attr("ng:validate")||Wa,e=wa(d).validator()(),g=b.attr("ng:required"),f=b.attr("ng:format")||Wa;f=wa(f).formatter()();var i,h,j,k,l=a.$service("$invalidWidgets")||{markValid:D,markInvalid:D};if(!e)throw"Validator named '"+d+"' not found.";i=f.format;h=f.parse;if(g)a.$watch(g,function(n){k=n;c()});else k=g==="";b.data(Ab,c);return{get:function(){j&&ta(b,Ma,A);try{var n=
-h(a,b.val());c();return n}catch(q){j=q;ta(b,Ma,q)}},set:function(n){var q=b.val();n=i(a,n);if(q!=n)b.val(n||"");c()}}}function oc(a,b){var c=b.attr("ng:format")||Wa,d=wa(c).formatter()();return{get:function(){var e=[];t(b[0].options,function(g){g.selected&&e.push(d.parse(a,g.value))});return e},set:function(e){var g={};t(e,function(f){g[d.format(a,f)]=true});t(b[0].options,function(f){f.selected=g[f.value]})}}}function pc(){return{get:D,set:D}}function Xa(a){return function(b,c){var d=c.get();if(!d&&
-I(a))d=U(a);N(b.get())&&I(d)&&b.set(d)}}function Fa(a,b,c,d,e){return B(function(g,f,i){var h=this,j=b(h,i),k=c(h,i),l=i.attr("ng:change")||"",n;if(j){d.call(h,j,k,i);this.$eval(i.attr("ng:init")||"");i.bind(a,function(q){function o(){var x=k.get();if(!e||x!=n){j.set(x);n=j.get();h.$tryEval(l,i);g()}}q.type=="keydown"?f(o):o()});h.$watch(j.get,function(q){if(n!==q)k.set(n=q)})}},{$inject:["$updateView","$defer"]})}function Ya(a){this.directives(true);this.descend(true);return Zc[O(a[0].type)]||D}
-if(typeof da.getAttribute==sa)da.getAttribute=function(){};var O=function(a){return G(a)?a.toLowerCase():a},Za=function(a){return G(a)?a.toUpperCase():a},T=function(a){return G(a)?a.replace(/[A-Z]/g,function(b){b=b.charCodeAt(0)|32;return String.fromCharCode(b)}):a},ca=function(a){return G(a)?a.replace(/[a-z]/g,function(b){b=b.charCodeAt(0)&-33;return String.fromCharCode(b)}):a};if("i"!=="I".toLowerCase()){O=T;Za=ca}var $=qa,A=null,nc="$element",Ab="$validate",Dc="boolean",ja="function",sc="length",
-tc="name",Pa="null",wc="number",Bb="object",vc="string",sa="undefined",Qa="ng-exception",Ma="ng-validation-error",Wa="noop",Sb=-1E3,$c={FIRST:-99999,LAST:99999,WATCH:Sb},ba=J.Error,ka=parseInt((/msie (\d+)/.exec(O(navigator.userAgent))||[])[1],10),C,fb,ua=[].slice;T=[].push;var Cc=J.console?V(J.console,J.console.error||D):D,E=J.angular||(J.angular={}),cb=ha(E,"markup"),Hb=ha(E,"attrMarkup"),P=ha(E,"directive"),Z=ha(E,"widget",O),pb=ha(E,"validator"),fa=ha(E,"filter"),pa=ha(E,"formatter"),lb=ha(E,
-"service");ha(E,"callbacks");var Ia,Bc=/^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,Mb=24;Ia=ka?function(a){a=a.nodeName?a:a[0];return a.scopeName&&a.scopeName!="HTML"?Za(a.scopeName+":"+a.nodeName):a.nodeName}:function(a){return a.nodeName?a.nodeName:a[0].nodeName};E.toJson=ea;E.fromJson=va;jb.prototype={attach:function(a,b){var c={};this.collectInits(a,c,b);$a(c,function(d){t(d,function(e){e()})})},collectInits:function(a,b,c){var d=b[this.priority],e=c;d||(b[this.priority]=d=[]);if(this.newScope){e=
-la(c);c.$onEval(e.$eval);a.data("$scope",e)}t(this.inits,function(j){d.push(function(){e.$tryEval(function(){return e.$service(j,e,a)},a)})});var g=a[0].childNodes,f=this.children,i=this.paths,h=i.length;for(c=0;c<h;c++)f[c].collectInits(C(g[i[c]]),b,e)},addInit:function(a){a&&this.inits.push(a)},addChild:function(a,b){if(b){this.paths.push(a);this.children.push(b)}},empty:function(){return this.inits.length===0&&this.paths.length===0}};Gb.prototype={compile:function(a){a=C(a);var b=0,c,d=a.parent();
-if(d&&d[0]){d=d[0];for(var e=0;e<d.childNodes.length;e++)if(d.childNodes[e]==a[0])b=e}c=this.templatize(a,b,0)||new jb;return function(g,f){var i=f?Kb.clone.call(a):a;g=g||la();i.data("$scope",g);g.$element=i;(f||D)(i,g);c.attach(i,g);g.$eval();return g}},templatize:function(a,b,c){var d=this,e,g,f=d.directives,i=true,h=true,j=Ia(a),k=j.indexOf(":")>0?O(j).replace(":","-"):"",l,n={compile:V(d,d.compile),descend:function(s){if(I(s))i=s;return i},directives:function(s){if(I(s))h=s;return h},scope:function(s){if(I(s))l.newScope=
-l.newScope||s;return l.newScope}};try{c=a.attr("ng:eval-order")||c||0}catch(q){c=c||0}a.addClass(k);if(G(c))c=$c[Za(c)]||parseInt(c,10);l=new jb(c);Oa(a,function(s,p){if(!e)if(e=d.widgets("@"+p)){a.addClass("ng-attr-widget");e=V(n,e,s,a)}});if(!e)if(e=d.widgets(j)){k&&a.addClass("ng-widget");e=V(n,e,a)}if(e){h=i=false;j=a.parent();l.addInit(e.call(n,a));if(j&&j[0])a=C(j[0].childNodes[b])}if(i)for(var o=0,x=a[0].childNodes;o<x.length;o++)Ia(x[o])=="#text"&&t(d.markup,function(s){if(o<x.length){var p=
-C(x[o]);s.call(n,p.text(),p,a)}});if(h){Oa(a,function(s,p){t(d.attrMarkup,function(z){z.call(n,s,p,a)})});Oa(a,function(s,p){if(g=f[p]){a.addClass("ng-directive");l.addInit(f[p].call(n,s,a))}})}i&&Nb(a,function(s,p){l.addChild(p,d.templatize(s,p,c))});return l.empty()?A:l}};var Ec=0,Pb={},Rb={},Qb={};t("abstract,boolean,break,byte,case,catch,char,class,const,continue,debugger,default,delete,do,double,else,enum,export,extends,false,final,finally,float,for,function,goto,if,implements,import,ininstanceof,intinterface,long,native,new,null,package,private,protected,public,return,short,static,super,switch,synchronized,this,throw,throws,transient,true,try,typeof,var,volatile,void,undefined,while,with".split(/,/),
-function(a){Qb[a]=true});var Hc=/^function\s*[^\(]*\(([^\)]*)\)/,Ic=/,/,Jc=/^\s*(((\$?).+?)(_?))\s*$/,Gc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,mb={"null":function(){return A},"true":function(){return true},"false":function(){return false},$undefined:D,"+":function(a,b,c){return(I(b)?b:0)+(I(c)?c:0)},"-":function(a,b,c){return(I(b)?b:0)-(I(c)?c:0)},"*":function(a,b,c){return b*c},"/":function(a,b,c){return b/c},"%":function(a,b,c){return b%c},"^":function(a,b,c){return b^c},"=":D,"==":function(a,b,c){return b==
-c},"!=":function(a,b,c){return b!=c},"<":function(a,b,c){return b<c},">":function(a,b,c){return b>c},"<=":function(a,b,c){return b<=c},">=":function(a,b,c){return b>=c},"&&":function(a,b,c){return b&&c},"||":function(a,b,c){return b||c},"&":function(a,b,c){return b&c},"|":function(a,b,c){return c(a,b)},"!":function(a,b){return!b}},Lc={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'};Xb.prototype={url:function(a){var b=this,c=this.template,d;a=a||{};t(this.urlParams,function(g,f){d=eb(a[f]||
-b.defaults[f]||"");c=c.replace(RegExp(":"+f+"(\\W)"),d+"$1")});c=c.replace(/\/?#$/,"");var e=[];$a(a,function(g,f){b.urlParams[f]||e.push(eb(f)+"="+eb(g))});c=c.replace(/\/*$/,"");return c+(e.length?"?"+e.join("&"):"")}};Ra.DEFAULT_ACTIONS={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:true},remove:{method:"DELETE"},"delete":{method:"DELETE"}};Ra.prototype={route:function(a,b,c){function d(i){var h={};t(b||{},function(j,k){h[k]=j.charAt&&j.charAt(0)=="@"?Ja(i,j.substr(1)):j});
-return h}function e(i){U(i||{},this)}var g=this,f=new Xb(a);c=B({},Ra.DEFAULT_ACTIONS,c);t(c,function(i,h){var j=i.method=="POST"||i.method=="PUT";e[h]=function(k,l,n){var q={},o,x=D;switch(arguments.length){case 3:x=n;case 2:if(L(l))x=l;else{q=k;o=l;break}case 1:if(L(k))x=k;else if(j)o=k;else q=k;break;case 0:break;default:throw"Expected between 0-3 arguments [params, data, callback], got "+arguments.length+" arguments.";}var s=this instanceof e?this:i.isArray?[]:new e(o);g.xhr(i.method,f.url(B({},
-i.params||{},d(o),q)),o,function(p,z){if(p==200){if(i.isArray){s.length=0;t(z,function(K){s.push(new e(K))})}else U(z,s);(x||D)(s)}else throw{status:p,response:z,message:p+": "+z};},i.verifyCache);return s};e.bind=function(k){return g.route(a,B({},b,k),c)};e.prototype["$"+h]=function(k,l){var n=d(this),q=D;switch(arguments.length){case 2:n=k;q=l;case 1:if(typeof k==ja)q=k;else n=k;case 0:break;default:throw"Expected between 1-2 arguments [params, callback], got "+arguments.length+" arguments.";}e[h].call(this,
-n,j?this:$,q)}});return e}};var ad=J.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(c){}throw new ba("This browser does not support XMLHttpRequest.");},Nc={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},dc=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,
-cc=/^<\s*\/\s*([\w:-]+)[^>]*>/,Oc=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,Qc=/^</,Pc=/^<\s*\//,Rc=/<!--(.*?)--\>/g,Sc=/<!\[CDATA\[(.*?)]]\>/g,Vc=/^((ftp|https?):\/\/|mailto:|#)/,Tc=/([^\#-~| |!])/g,ac=za("area,br,col,hr,img"),Yb=za("address,blockquote,center,dd,del,dir,div,dl,dt,hr,ins,li,map,menu,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"),Zb=za("a,abbr,acronym,b,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var"),
-$b=za("colgroup,dd,dt,li,p,td,tfoot,th,thead,tr"),bc=za("script,style"),fc=B({},ac,Yb,Zb,$b),gc=za("background,href,longdesc,src,usemap"),Uc=B({},gc,za("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),sb=da.createElement("pre"),Ta={},Sa="ng-"+(new Date).getTime(),
-Yc=1,bd=J.document.addEventListener?function(a,b,c){a.addEventListener(b,c,false)}:function(a,b,c){a.attachEvent("on"+b,c)},Xc=J.document.removeEventListener?function(a,b,c){a.removeEventListener(b,c,false)}:function(a,b,c){a.detachEvent("on"+b,c)};ka&&B(ma.prototype,{text:function(a){var b=this[0];if(b.nodeType==3){if(I(a))b.nodeValue=a;return b.nodeValue}else{if(I(a))b.innerText=a;return b.innerText}}});var Kb=ma.prototype={ready:function(a){function b(){if(!c){c=true;a()}}var c=false;this.bind("DOMContentLoaded",
-b);gb(J).bind("load",b)},toString:function(){var a=[];t(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},length:0,push:T,sort:[].sort,splice:[].splice};t({data:ub,scope:function(a){for(var b;a&&!(b=C(a).data("$scope"));)a=a.parentNode;return b},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:vb,css:function(a,b,c){if(I(c))a.style[b]=c;else return a.style[b]},attr:function(a,b,c){if(I(c))a.setAttribute(b,c);else if(a.getAttribute)return a.getAttribute(b,2)},text:B(ka?function(a,
-b){if(a.nodeType==3){if(N(b))return a.nodeValue;a.nodeValue=b}else{if(N(b))return a.innerText;a.innerText=b}}:function(a,b){if(N(b))return a.textContent;a.textContent=b},{$dv:""}),val:function(a,b){if(N(b))return a.value;a.value=b},html:function(a,b){if(N(b))return a.innerHTML;for(var c=0,d=a.childNodes;c<d.length;c++)Ka(d[c]);a.innerHTML=b}},function(a,b){ma.prototype[b]=function(c,d){if((a.length==2?c:d)===qa)if(X(c)){for(var e=0;e<this.length;e++)for(var g in c)a(this[e],g,c[g]);return this}else{if(this.length)return a(this[0],
-c,d)}else{for(e=0;e<this.length;e++)a(this[e],c,d);return this}return a.$dv}});t({removeData:hc,dealoc:Ka,bind:function(a,b,c){var d=ub(a,"bind"),e;d||ub(a,"bind",d={});t(b.split(" "),function(g){e=d[g];if(!e){d[g]=e=function(f){if(!f.preventDefault)f.preventDefault=function(){f.returnValue=false};if(!f.stopPropagation)f.stopPropagation=function(){f.cancelBubble=true};t(e.fns,function(i){i.call(a,f)})};e.fns=[];bd(a,g,e)}e.fns.push(c)})},replaceWith:function(a,b){var c,d=a.parentNode;Ka(a);t(new ma(b),
-function(e){c?d.insertBefore(e,c.nextSibling):d.replaceChild(e,a);c=e})},children:function(a){var b=[];t(a.childNodes,function(c){c.nodeName!="#text"&&b.push(c)});return b},append:function(a,b){t(new ma(b),function(c){a.appendChild(c)})},remove:function(a){Ka(a);var b=a.parentNode;b&&b.removeChild(a)},after:function(a,b){var c=a,d=a.parentNode;t(new ma(b),function(e){d.insertBefore(e,c.nextSibling);c=e})},addClass:jc,removeClass:ic,toggleClass:function(a,b,c){if(N(c))c=!vb(a,b);(c?jc:ic)(a,b)},parent:function(a){return a.parentNode||
-null},next:function(a){return a.nextSibling},find:function(a,b){return a.getElementsByTagName(b)},clone:function(a){return a.cloneNode(true)}},function(a,b){ma.prototype[b]=function(c,d){for(var e,g=0;g<this.length;g++)if(e==qa){e=a(this[g],c,d);if(e!==qa)e=C(e)}else tb(e,a(this[g],c,d));return e==qa?this:e}});T={typeOf:function(a){if(a===A)return Pa;var b=typeof a;if(b==Bb){if(a instanceof Array)return"array";if(a instanceof Date)return"date";if(a.nodeType==1)return"element"}return b}};ca={copy:U,
-size:function(a){var b=0,c;if(a)if(Ca(a.length))return a.length;else if(X(a))for(c in a)b++;return b},equals:Ha};var cd={extend:B},dd={indexOf:Ga,sum:function(a,b){for(var c=E.Function.compile(b),d=0,e=0;e<a.length;e++){var g=1*c(a[e]);isNaN(g)||(d+=g)}return d},remove:function(a,b){var c=Ga(a,b);c>=0&&a.splice(c,1);return b},filter:function(a,b){var c=[];c.check=function(h){for(var j=0;j<c.length;j++)if(!c[j](h))return false;return true};var d=function(h,j){if(j.charAt(0)==="!")return!d(h,j.substr(1));
-switch(typeof h){case "boolean":case "number":case "string":return(""+h).toLowerCase().indexOf(j)>-1;case "object":for(var k in h)if(k.charAt(0)!=="$"&&d(h[k],j))return true;return false;case "array":for(k=0;k<h.length;k++)if(d(h[k],j))return true;return false;default:return false}};switch(typeof b){case "boolean":case "number":case "string":b={$:b};case "object":for(var e in b)e=="$"?function(){var h=(""+b[e]).toLowerCase();h&&c.push(function(j){return d(j,h)})}():function(){var h=e,j=(""+b[e]).toLowerCase();
-j&&c.push(function(k){return d(Ja(k,h),j)})}();break;case ja:c.push(b);break;default:return a}for(var g=[],f=0;f<a.length;f++){var i=a[f];c.check(i)&&g.push(i)}return g},add:function(a,b){a.push(N(b)?{}:b);return a},count:function(a,b){if(!b)return a.length;var c=E.Function.compile(b),d=0;t(a,function(e){c(e)&&d++});return d},orderBy:function(a,b,c){function d(i,h){return Ea(h)?function(j,k){return i(k,j)}:i}function e(i,h){var j=typeof i,k=typeof h;if(j==k){if(j=="string")i=i.toLowerCase();if(j==
-"string")h=h.toLowerCase();if(i===h)return 0;return i<h?-1:1}else return j<k?-1:1}b=ia(b)?b:[b];b=xc(b,function(i){var h=false,j=i||ra;if(G(i)){if(i.charAt(0)=="+"||i.charAt(0)=="-"){h=i.charAt(0)=="-";i=i.substring(1)}j=xa(i).fnSelf}return d(function(k,l){return e(j(k),j(l))},h)});for(var g=[],f=0;f<a.length;f++)g.push(a[f]);return g.sort(d(function(i,h){for(var j=0;j<b.length;j++){var k=b[j](i,h);if(k!==0)return k}return 0},c))},limitTo:function(a,b){b=parseInt(b,10);var c=[],d,e;if(b>0){d=0;e=
-b}else{d=a.length+b;e=a.length}for(;d<e;d++)c.push(a[d]);return c}},ed=/^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/,ib={quote:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v")+'"'},quoteUnicode:function(a){a=E.String.quote(a);for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);if(d<128)b.push(a.charAt(c));else{d="000"+d.toString(16);b.push("\\u"+
-d.substring(d.length-4))}}return b.join("")},toDate:function(a){var b;if(G(a)&&(b=a.match(ed))){a=new Date(0);a.setUTCFullYear(b[1],b[2]-1,b[3]);a.setUTCHours(b[4]||0,b[5]||0,b[6]||0,b[7]||0);return a}return a}},qc={toString:function(a){return!a?a:a.toISOString?a.toISOString():ga(a.getUTCFullYear(),4)+"-"+ga(a.getUTCMonth()+1,2)+"-"+ga(a.getUTCDate(),2)+"T"+ga(a.getUTCHours(),2)+":"+ga(a.getUTCMinutes(),2)+":"+ga(a.getUTCSeconds(),2)+"."+ga(a.getUTCMilliseconds(),3)+"Z"}};Aa("Global",[T]);Aa("Collection",
-[T,ca]);Aa("Array",[T,ca,dd]);Aa("Object",[T,ca,cd]);Aa("String",[T,ib]);Aa("Date",[T,qc]);E.Date.toString=qc.toString;Aa("Function",[T,ca,{compile:function(a){return L(a)?a:a?xa(a).fnSelf:ra}}]);fa.currency=function(a){this.$element.toggleClass("ng-format-negative",a<0);return"$"+fa.number.apply(this,[a,2])};fa.number=function(a,b){if(isNaN(a)||!isFinite(a))return"";b=typeof b==sa?2:b;var c=a<0;a=Math.abs(a);var d=""+Math.round(a*Math.pow(10,b)),e=d.substring(0,d.length-b);e=e||"0";var g=d.substring(d.length-
-b);d=c?"-":"";for(c=0;c<e.length;c++){if((e.length-c)%3===0&&c!==0)d+=",";d+=e.charAt(c)}if(b>0){for(e=g.length;e<b;e++)g+="0";d+="."+g.substring(0,b)}return d};var fd={yyyy:W("FullYear",4),yy:W("FullYear",2,0,true),MM:W("Month",2,1),M:W("Month",1,1),dd:W("Date",2),d:W("Date",1),HH:W("Hours",2),H:W("Hours",1),hh:W("Hours",2,-12),h:W("Hours",1,-12),mm:W("Minutes",2),m:W("Minutes",1),ss:W("Seconds",2),s:W("Seconds",1),a:function(a){return a.getHours()<12?"am":"pm"},Z:function(a){a=a.getTimezoneOffset();
-return ga(a/60,2)+ga(Math.abs(a%60),2)}},gd=/([^yMdHhmsaZ]*)(y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/,hd=/^\d+$/;fa.date=function(a,b){if(G(a))a=hd.test(a)?parseInt(a,10):ib.toDate(a);if(Ca(a))a=new Date(a);if(!(a instanceof Date))return a;var c=a.toLocaleDateString(),d;if(b&&G(b)){c="";for(var e=[],g;b;)if(g=gd.exec(b)){e=e.concat(ua.call(g,1,g.length));b=e.pop()}else{e.push(b);b=null}t(e,function(f){d=fd[f];c+=d?d(a):f})}return c};fa.json=function(a){this.$element.addClass("ng-monospace");return ea(a,true)};
-fa.lowercase=O;fa.uppercase=Za;fa.html=function(a,b){return new bb(a,b)};fa.linky=function(a){if(!a)return a;for(var b=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,c=a,d=[],e=Db(d),g,f;a=c.match(b);){g=a[0];if(a[2]==a[3])g="mailto:"+g;f=a.index;e.chars(c.substr(0,f));e.start("a",{href:g});e.chars(a[0].replace(/^mailto:/,""));e.end("a");c=c.substring(f+a[0].length)}e.chars(c);return new bb(d.join(""))};var id=/^\s*[-+]?\d*(\.\d*)?\s*$/;pa.noop=Ba(ra,ra);pa.json=Ba(ea,
-function(a){return va(a||"null")});pa["boolean"]=Ba(kc,Ea);pa.number=Ba(kc,function(a){if(a==A||id.exec(a))return a===A||a===""?A:1*a;else throw"Not a number";});pa.list=Ba(function(a){return a?a.join(", "):a},function(a){var b=[];t((a||"").split(","),function(c){(c=Da(c))&&b.push(c)});return b});pa.trim=Ba(function(a){return a?Da(""+a):""});pa.index=Ba(function(a,b){return""+Ga(b||[],a)},function(a,b){return(b||[])[a]});B(pb,{noop:function(){return A},regexp:function(a,b,c){return a.match(b)?A:c||
-"Value does not match expected format "+b+"."},number:function(a,b,c){var d=1*a;if(d==a){if(typeof b!=sa&&d<b)return"Value can not be less than "+b+".";if(typeof b!=sa&&d>c)return"Value can not be greater than "+c+".";return A}else return"Not a number"},integer:function(a,b,c){if(b=pb.number(a,b,c))return b;if(!(""+a).match(/^\s*[\d+]*\s*$/)||a!=Math.round(a))return"Not a whole number";return A},date:function(a){var b=(a=/^(\d\d?)\/(\d\d?)\/(\d\d\d\d)$/.exec(a))?new Date(a[3],a[1]-1,a[2]):0;return b&&
-b.getFullYear()==a[3]&&b.getMonth()==a[1]-1&&b.getDate()==a[2]?A:"Value is not a date. (Expecting format: 12/31/2009)."},email:function(a){if(a.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/))return A;return"Email needs to be in username@host.com format."},phone:function(a){if(a.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/))return A;if(a.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/))return A;return"Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly."},
-url:function(a){if(a.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/))return A;return"URL needs to be in http://server[:port]/path format."},json:function(a){try{va(a);return A}catch(b){return b.toString()}},asynchronous:function(a,b,c){if(a){var d=this,e=d.$element,g=e.data("$asyncValidator");g||e.data("$asyncValidator",g={inputs:{}});g.current=a;var f=g.inputs[a],i=d.$service("$invalidWidgets");if(f)f.inFlight?i.markInvalid(d.$element):(c||D)(f.response);
-else{g.inputs[a]=f={inFlight:true};i.markInvalid(d.$element);e.addClass("ng-input-indicator-wait");b(a,function(h,j){f.response=j;f.error=h;f.inFlight=false;if(g.current==a){e.removeClass("ng-input-indicator-wait");i.markValid(e)}e.data(Ab)();d.$service("$updateView")()})}return f.error}}});Q("$cookieStore",function(a){return{get:function(b){return va(a[b])},put:function(b,c){a[b]=ea(c)},remove:function(b){delete a[b]}}},["$cookies"]);Q("$cookies",function(a){var b=this,c={},d={},e,g=false;a.addPollFn(function(){var f=
-a.cookies();if(e!=f){e=f;U(f,d);U(f,c);g&&b.$eval()}})();g=true;this.$onEval(99999,function(){var f,i,h;for(f in d)N(c[f])&&a.cookies(f,$);for(f in c){i=c[f];if(G(i)){if(i!==d[f]){a.cookies(f,i);h=true}}else if(I(d[f]))c[f]=d[f];else delete c[f]}if(h){i=a.cookies();for(f in c)if(c[f]!==i[f])if(N(i[f]))delete c[f];else c[f]=i[f]}});return c},["$browser"]);Q("$defer",function(a,b,c){return function(d,e){a.defer(function(){try{d()}catch(g){b(g)}finally{c()}},e)}},["$browser","$exceptionHandler","$updateView"]);
-Q("$document",function(a){return C(a.document)},["$window"]);Q("$exceptionHandler",function(a){return function(b){a.error(b)}},["$log"]);Q("$hover",function(a,b){var c,d,e=C(b[0].body);a.hover(function(g,f){if(f&&(d=g.attr(Qa)||g.attr(Ma))){if(!c){c={callout:C('<div id="ng-callout"></div>'),arrow:C("<div></div>"),title:C('<div class="ng-title"></div>'),content:C('<div class="ng-content"></div>')};c.callout.append(c.arrow);c.callout.append(c.title);c.callout.append(c.content);e.append(c.callout)}var i=
-e[0].getBoundingClientRect(),h=g[0].getBoundingClientRect();i=i.right-h.right-10;c.title.text(g.hasClass("ng-exception")?"EXCEPTION:":"Validation error...");c.content.text(d);if(i<300){c.arrow.addClass("ng-arrow-right");c.arrow.css({left:"301px"});c.callout.css({position:"fixed",left:h.left-10-300-4+"px",top:h.top-3+"px",width:"300px"})}else{c.arrow.addClass("ng-arrow-left");c.callout.css({position:"fixed",left:h.right+10+"px",top:h.top-3+"px",width:"300px"})}}else if(c){c.callout.remove();c=A}})},
-["$browser","$document"],true);Q("$invalidWidgets",function(){function a(c){if(c==J.document)return false;c=c.parentNode;return!c||a(c)}var b=[];b.markValid=function(c){c=Ga(b,c);c!=-1&&b.splice(c,1)};b.markInvalid=function(c){Ga(b,c)===-1&&b.push(c)};b.visible=function(){var c=0;t(b,function(d){var e=c;d=d[0].getBoundingClientRect();var g=d.height||d.bottom||0-d.top||0;c=e+((d.width||d.right||0-d.left||0)>0&&g>0?1:0)});return c};this.$onEval(99999,function(){for(var c=0;c<b.length;){var d=b[c];if(a(d[0])){b.splice(c,
-1);d.dealoc&&d.dealoc()}else c++}});return b});var jd=/^(file|ftp|http|https):\/\/(\w+:{0,1}\w*@)?([\w\.-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,kd=/^([^\?]*)?(\?([^\?]*))?$/,rc={http:80,https:443,ftp:21};Q("$location",function(a){function b(k){if(G(k)){var l=B,n=h,q={},o=jd.exec(k);if(o){q.href=k.replace(/#$/,"");q.protocol=o[1];q.host=o[3]||"";q.port=o[5]||rc[q.protocol]||A;q.path=o[6]||"";q.search=db(o[8]);q.hash=o[10]||"";B(q,f(q.hash))}l(n,q)}else{if(I(k.hash))B(k,G(k.hash)?f(k.hash):
-k.hash);B(h,k);if(I(k.hashPath||k.hashSearch))h.hash=g(h);h.href=e(h)}}function c(k,l){var n={};if(G(k)){n.hashPath=k;n.hashSearch=l||{}}else n.hashSearch=k;n.hash=g(n);b({hash:n})}function d(){if(!Ha(h,j)){if(h.href==j.href)if(h.hash!=j.hash){var k=f(h.hash);c(k.hashPath,k.hashSearch)}else{h.hash=g(h);h.href=e(h)}b(h.href)}}function e(k){var l=Ib(k.search),n=k.port==rc[k.protocol]?A:k.port;return k.protocol+"://"+k.host+(n?":"+n:"")+k.path+(l?"?"+l:"")+(k.hash?"#"+k.hash:"")}function g(k){var l=
-Ib(k.hashSearch);return escape(k.hashPath).replace(/%21/gi,"!").replace(/%3A/gi,":").replace(/%24/gi,"$")+(l?"?"+l:"")}function f(k){var l={},n=kd.exec(k);if(n){l.hash=k;l.hashPath=unescape(n[1]||"");l.hashSearch=db(n[3])}return l}var i=this,h={update:b,updateHash:c},j={};a.onHashChange(function(){b(a.getUrl());U(h,j);i.$eval()})();this.$onEval(-99999,d);this.$onEval(99999,function(){d();if(a.getUrl()!=h.href){a.setUrl(h.href);U(h,j)}});return h},["$browser"]);Q("$log",function(a){function b(c){var d=
-a.console||{},e=d[c]||d.log||D;return e.apply?function(){var g=[];t(arguments,function(f){g.push(ab(f))});return e.apply(d,g)}:e}return{log:b("log"),warn:b("warn"),info:b("info"),error:b("error")}},["$window"]);Q("$resource",function(a){a=new Ra(a);return V(a,a.route)},["$xhr.cache"]);Q("$route",function(a,b){var c={},d=[],e=function(h,j,k){var l="^"+j.replace(/[\.\\\(\)\^\$]/g,"$1")+"$",n=[],q={};t(j.split(/\W/),function(x){if(x){var s=RegExp(":"+x+"([\\W])");if(l.match(s)){l=l.replace(s,"([^/]*)$1");
-n.push(x)}}});var o=h.match(RegExp(l));if(o){t(n,function(x,s){q[x]=o[s+1]});k&&this.$set(k,q)}return o?q:A},g=this,f=0,i={routes:c,onChange:function(h){d.push(h);return h},parent:function(h){if(h)g=h},when:function(h,j){if(N(h))return c;var k=c[h];k||(k=c[h]={});j&&B(k,j);f++;return k},otherwise:function(h){i.when(null,h)},reload:function(){f++}};this.$watch(function(){return f+a.hash},function(){var h,j,k,l,n,q;i.current=A;t(c,function(o,x){if(!k)if(k=e(a.hashPath,x))j=o});if(j=j||c[A]){if(j.redirectTo){if(G(j.redirectTo)){q=
-{hashPath:"",hashSearch:B({},a.hashSearch,k)};t(j.redirectTo.split(":"),function(o,x){if(x==0)q.hashPath+=o;else{l=o.match(/(\w+)(.*)/);n=l[1];q.hashPath+=k[n]||a.hashSearch[n];q.hashPath+=l[2]||"";delete q.hashSearch[n]}})}else q={hash:j.redirectTo(k,a.hash,a.hashPath,a.hashSearch)};a.update(q);b();return}h=la(g);i.current=B({},j,{scope:h,params:B({},a.hashSearch,k)})}t(d,g.$tryEval);h&&h.$become(i.current.controller)});return i},["$location","$updateView"]);wb.delay=25;Q("$updateView",wb,["$browser"]);
-Q("$window",V(J,ra,J));Q("$xhr.bulk",function(a,b,c){function d(g,f,i,h){if(L(i)){h=i;i=A}var j;t(d.urls,function(k){if(L(k.match)?k.match(f):k.match.exec(f))j=k});if(j){if(!j.requests)j.requests=[];j.requests.push({method:g,url:f,data:i,callback:h})}else a(g,f,i,h)}var e=this;d.urls={};d.flush=function(g){t(d.urls,function(f,i){var h=f.requests;if(h&&h.length){f.requests=[];f.callbacks=[];a("POST",i,{requests:h},function(j,k){t(k,function(l,n){try{l.status==200?(h[n].callback||D)(l.status,l.response):
-b(h[n],l)}catch(q){c.error(q)}});(g||D)()});e.$eval()}})};this.$onEval(99999,d.flush);return d},["$xhr","$xhr.error","$log"]);Q("$xhr.cache",function(a,b,c){function d(g,f,i,h,j){if(L(i)){h=i;i=A}if(g=="GET"){var k;if(k=d.data[f]){b(function(){h(200,U(k.value))});if(!j)return}if(j=e[f])j.callbacks.push(h);else{e[f]={callbacks:[h]};d.delegate(g,f,i,function(l,n){if(l==200)d.data[f]={value:n};var q=e[f].callbacks;delete e[f];t(q,function(o){try{(o||D)(l,U(n))}catch(x){c.error(x)}})})}}else{d.data={};
-d.delegate(g,f,i,h)}}var e={};d.data={};d.delegate=a;return d},["$xhr.bulk","$defer","$log"]);Q("$xhr.error",function(a){return function(b,c){a.error("ERROR: XHR: "+b.url,b,c)}},["$log"]);Q("$xhr",function(a,b,c,d){return function(e,g,f,i){if(L(f)){i=f;f=A}if(f&&X(f))f=ea(f);a.xhr(e,g,f,function(h,j){try{if(G(j)){if(j.match(/^\)\]\}',\n/))j=j.substr(6);if(/^\s*[\[\{]/.exec(j)&&/[\}\]]\s*$/.exec(j))j=va(j,true)}200<=h&&h<300?i(h,j):b({method:e,url:g,data:f,callback:i},{status:h,body:j})}catch(k){c.error(k)}finally{d()}},
-{"X-XSRF-TOKEN":a.cookies()["XSRF-TOKEN"]})}},["$browser","$xhr.error","$log","$updateView"]);P("ng:init",function(a){return function(b){this.$tryEval(a,b)}});P("ng:controller",function(a){this.scope(true);return function(){var b=Ja(J,a,true)||Ja(this,a,true);if(!b)throw"Can not find '"+a+"' controller.";if(!L(b))throw"Reference '"+a+"' is not a class.";this.$become(b)}});P("ng:eval",function(a){return function(b){this.$onEval(a,b)}});P("ng:bind",function(a,b){b.addClass("ng-binding");return function(c){var d=
-D,e=D;this.$onEval(function(){var g,f,i,h,j;h=this.hasOwnProperty(nc)?this.$element:$;this.$element=c;f=this.$tryEval(a,function(k){g=ab(k)});this.$element=h;if(h=f instanceof bb)f=(i=f).html;if(!(d===f&&e==g)){j=f&&(f.nodeName||f.bind&&f.find);if(!h&&!j&&X(f))f=ea(f,true);if(f!=d||g!=e){d=f;e=g;ta(c,Qa,g);if(g)f=g;if(h)c.html(i.get());else if(j){c.html("");c.append(f)}else c.text(f==$?"":f)}}},c)}});var mc={};P("ng:bind-template",function(a,b){b.addClass("ng-binding");var c=lc(a);return function(d){var e;
-this.$onEval(function(){var g=c.call(this,d,true);if(g!=e){d.text(g);e=g}},d)}});var ld={disabled:"disabled",readonly:"readOnly",checked:"checked",selected:"selected"};P("ng:bind-attr",function(a){return function(b){var c={},d=b.data("$update")||D;this.$onEval(function(){var e=this.$eval(a),g=D,f;for(f in e){var i=lc(e[f]).call(this,b),h=ld[O(f)];if(c[f]!==i){c[f]=i;if(h){if(Ea(i)){b.attr(h,h);b.attr("ng-"+h,i)}else{b.removeAttr(h);b.removeAttr("ng-"+h)}(b.data(Ab)||D)()}else b.attr(f,i);g=d}}g()},
-b)}});P("ng:click",function(a){return B(function(b,c){var d=this;c.bind("click",function(e){d.$tryEval(a,c);b();e.stopPropagation()})},{$inject:["$updateView"]})});P("ng:submit",function(a){return B(function(b,c){var d=this;c.bind("submit",function(e){d.$tryEval(a,c);b();e.preventDefault()})},{$inject:["$updateView"]})});P("ng:class",xb(function(){return true}));P("ng:class-odd",xb(function(a){return a%2===0}));P("ng:class-even",xb(function(a){return a%2===1}));P("ng:show",function(a){return function(b){this.$onEval(function(){b.css("display",
-Ea(this.$eval(a))?"":"none")},b)}});P("ng:hide",function(a){return function(b){this.$onEval(function(){b.css("display",Ea(this.$eval(a))?"none":"")},b)}});P("ng:style",function(a){return function(b){var c=Wc(b);this.$onEval(function(){var d=this.$eval(a)||{},e,g={};for(e in d){if(c[e]===$)c[e]="";g[e]=d[e]}for(e in c)g[e]=g[e]||c[e];b.css(g)},b)}});cb("{{}}",function(a,b,c){var d=Ua(a);if(d.length>1||Va(d[0])!==A)if(yc(c[0]))c.attr("ng:bind-template",a);else{var e=b,g;t(Ua(a),function(f){var i=Va(f);
-if(i){g=C("<span>");g.attr("ng:bind",i)}else g=C(da.createTextNode(f));if(ka&&f.charAt(0)==" "){g=C("<span>&nbsp;</span>");i=g.html();g.text(f.substr(1));g.html(i+g.html())}e.after(g);e=g});b.remove()}});cb("option",function(a,b,c){if(O(Ia(c))=="option")if(ka<=7)Cb(c[0].outerHTML,{start:function(d,e){N(e.value)&&c.attr("value",a)}});else c[0].getAttribute("value")==null&&c.attr("value",a)});var md={"ng:src":"src","ng:href":"href"};Hb("{{}}",function(a,b,c){if(!(P(b)||P("@"+b))){if(ka&&b=="src")a=
-decodeURI(a);var d=Ua(a);if(d.length>1||Va(d[0])!==A){c.removeAttr(b);d=va(c.attr("ng:bind-attr")||"{}");d[md[b]||b]=a;c.attr("ng:bind-attr",ea(d))}}});T=Fa("keydown change",La,zb,Xa(),true);ca=Fa("click",pc,pc,D);var Zc={text:T,textarea:T,hidden:T,password:T,button:ca,submit:ca,reset:ca,image:ca,checkbox:Fa("click",yb,function(a,b){var c=b[0];return{get:function(){return!!c.checked},set:function(d){c.checked=Ea(d)}}},Xa(false)),radio:Fa("click",yb,function(a,b){var c=b[0];return{get:function(){return c.checked?
-c.value:A},set:function(d){c.checked=d==c.value}}},function(a,b,c){var d=a.get(),e=b.get();c=c[0];c.checked=false;c.name=this.$id+"@"+c.name;if(N(d))a.set(d=A);d==A&&e!==A&&a.set(e);b.set(d)}),"select-one":Fa("change",La,zb,Xa(A)),"select-multiple":Fa("change",La,oc,Xa([]))};Z("input",Ya);Z("textarea",Ya);Z("button",Ya);Z("select",function(a){this.descend(true);return Ya.call(this,a)});Z("option",function(){this.descend(true);this.directives(true);return function(a){var b=a.parent(),c=b[0].type==
-"select-multiple",d=b.scope(),e=La(d,b);if(e){var g=yb(d,b),f=c?oc(d,b):zb(d,b),i=a.attr("value"),h=a.attr("ng-selected");a.data("$update",c?function(){f.set(e.get())}:function(){var j=a.attr("value"),k=a.attr("ng-selected"),l=e.get();if(h!=k||i!=j){h=k;i=j;if(k||!l==null||l==qa)g.set(j);j==l&&f.set(i)}})}}});Z("ng:include",function(a){var b=this,c=a.attr("src"),d=a.attr("scope")||"",e=a[0].getAttribute("onload")||"";if(a[0]["ng:compiled"]){this.descend(true);this.directives(true)}else{a[0]["ng:compiled"]=
-true;return B(function(g,f){function i(){k++}var h=this,j,k=0,l=false;this.$watch(c,i);this.$watch(d,i);h.$onEval(function(){if(j&&!l){l=true;try{j.$eval()}finally{l=false}}});this.$watch(function(){return k},function(){var n=this.$eval(c),q=this.$eval(d);if(n)g("GET",n,function(o,x){f.html(x);j=q||la(h);b.compile(f)(j);h.$eval(e)});else{j=null;f.html("")}})},{$inject:["$xhr.cache"]})}});var nd=Z("ng:switch",function(a){var b=this,c=a.attr("on"),d=a.attr("using")||"equals",e=d.split(":"),g=nd[e.shift()],
-f=a.attr("change")||"",i=[];if(!g)throw"Using expression '"+d+"' unknown.";if(!c)throw"Missing 'on' attribute.";Nb(a,function(h){var j=h.attr("ng:switch-when"),k={change:f,element:h,template:b.compile(h)};if(G(j)){k.when=function(l,n){var q=[n,j];t(e,function(o){q.push(o)});return g.apply(l,q)};i.unshift(k)}else if(G(h.attr("ng:switch-default"))){k.when=Na(true);i.push(k)}});t(i,function(h){h.element.remove()});a.html("");return function(h){var j=this,k;this.$watch(c,function(l){var n=false;h.html("");
-k=la(j);t(i,function(q){if(!n&&q.when(k,l)){n=true;k.$tryEval(q.change,h);q.template(k,function(o){h.append(o)})}})});j.$onEval(function(){k&&k.$eval()})}},{equals:function(a,b){return""+a==b}});Z("a",function(){this.descend(true);this.directives(true);return function(a){a.attr("href")===""&&a.bind("click",function(b){b.preventDefault()})}});Z("@ng:repeat",function(a,b){b.removeAttr("ng:repeat");b.replaceWith(C("<!-- ng:repeat: "+a+" --!>"));var c=this.compile(b);return function(d){var e=a.match(/^\s*(.+)\s+in\s+(.*)\s*$/),
-g,f,i,h;if(!e)throw ba("Expected ng:repeat in form of 'item in collection' but got '"+a+"'.");g=e[1];f=e[2];e=g.match(/^([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\)$/);if(!e)throw ba("'item' in 'item in collection' should be identifier or (key, value) but got '"+keyValue+"'.");i=e[3]||e[1];h=e[2];var j=[],k=this;this.$onEval(function(){var l=0,n=j.length,q=d,o=this.$tryEval(f,d),x=0,s,p;if(ia(o))x=o.length;else for(p in o)o.hasOwnProperty(p)&&x++;for(p in o)if(o.hasOwnProperty(p)){if(l<n){s=j[l];s[i]=
-o[p];if(h)s[h]=p;q=s.$element}else{s=la(k);s[i]=o[p];if(h)s[h]=p;s.$index=l;s.$position=l==0?"first":l==x-1?"last":"middle";j.push(s);c(s,function(z){z.attr("ng:repeat-index",l);q.after(z);q=z})}s.$eval();l++}for(;j.length>l;)j.pop().$element.remove()},d)}});Z("@ng:non-bindable",D);Z("ng:view",function(a){var b=this;if(a[0]["ng:compiled"]){this.descend(true);this.directives(true)}else{a[0]["ng:compiled"]=true;return B(function(c,d,e){var g;d.onChange(function(){var f;if(d.current){f=d.current.template;
-g=d.current.scope}f?c("GET",f,function(i,h){e.html(h);b.compile(e)(g)}):e.html("")})();this.$onEval(function(){g&&g.$eval()})},{$inject:["$xhr.cache","$route"]})}});var na;lb("$browser",function(a){if(!na){na=new Mc(J,C(J.document),C(J.document.body),ad,a);var b=na.addPollFn;na.addPollFn=function(){na.addPollFn=b;na.startPoller(100,function(c,d){setTimeout(c,d)});return b.apply(na,arguments)};na.bind()}return na},{$inject:["$log"]});B(E,{element:C,compile:Fb,scope:la,copy:U,extend:B,equals:Ha,forEach:t,
-injector:Tb,noop:D,bind:V,toJson:ea,fromJson:va,identity:ra,isUndefined:N,isDefined:I,isString:G,isFunction:L,isObject:X,isNumber:Ca,isArray:ia});Jb();gb(da).ready(function(){var a=Ac(da),b=da,c=a.autobind;if(c){b=G(c)?b.getElementById(c):b;b=Fb(b)(la({$config:a})).$service("$browser");if(a.css)b.addCss(a.base_url+a.css);else ka<8&&b.addJs(a.base_url+a.ie_compat,a.ie_compat_id)}})})(window,document);angular.element(document).find("head").append('<style type="text/css">@charset "UTF-8";.ng-format-negative{color:red;}.ng-exception{border:2px solid #FF0000;font-family:"Courier New",Courier,monospace;font-size:smaller;white-space:pre;}.ng-validation-error{border:2px solid #FF0000;}#ng-callout{margin:0;padding:0;border:0;outline:0;font-size:13px;font-weight:normal;font-family:Verdana,Arial,Helvetica,sans-serif;vertical-align:baseline;background:transparent;text-decoration:none;}#ng-callout .ng-arrow-left{background-image:url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrSLoc/AG8FeUUIN+sGebWAnbKSJodqqlsOxJtqYooU9vvk+vcJIcTkg+QAAA7");background-repeat:no-repeat;background-position:left top;position:absolute;z-index:101;left:-12px;height:23px;width:10px;top:-3px;}#ng-callout .ng-arrow-right{background-image:url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrCLTcoM29yN6k9socs91e5X3EyJloipYrO4ohTMqA0Fn2XVNswJe+H+SXAAA7");background-repeat:no-repeat;background-position:left top;position:absolute;z-index:101;height:23px;width:11px;top:-2px;}#ng-callout{position:absolute;z-index:100;border:2px solid #CCCCCC;background-color:#fff;}#ng-callout .ng-content{padding:10px 10px 10px 10px;color:#333333;}#ng-callout .ng-title{background-color:#CCCCCC;text-align:left;padding-left:8px;padding-bottom:5px;padding-top:2px;font-weight:bold;}.ng-input-indicator-wait{background-image:url("data:image/png;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==");background-position:right;background-repeat:no-repeat;}</style>');
+(function(s,L,E){function k(a,b,c){var d;if(a)if(m(a))for(d in a)d!="prototype"&&d!=Wb&&d!=Xb&&a.hasOwnProperty(d)&&b.call(c,a[d],d);else if(a.forEach&&a.forEach!==k)a.forEach(b,c);else if(I(a)&&ma(a.length))for(d=0;d<a.length;d++)b.call(c,a[d],d);else for(d in a)b.call(c,a[d],d);return a}function Ga(a,b,c){var d=[],e;for(e in a)d.push(e);d.sort();for(e=0;e<d.length;e++)b.call(c,a[d[e]],d[e]);return d}function Ha(a){if(a instanceof K)a.stack?a=a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+
+a.line);return a}function n(a){k(arguments,function(b){b!==a&&k(b,function(b,d){a[d]=b})});return a}function Yb(a,b){return n(new (n(function(){},{prototype:a})),b)}function q(){}function Z(a){return a}function ua(a){return function(){return a}}function P(a,b,c){var d;return a[b]||(d=a[b]=function(a,b,g){a=(c||Z)(a);x(b)&&(d[a]=n(b,g||{}));return d[a]})}function z(a){return typeof a==$}function x(a){return typeof a!=$}function I(a){return a!=null&&typeof a==gb}function w(a){return typeof a==Zb}function ma(a){return typeof a==
+$b}function Q(a){return a instanceof Array}function m(a){return typeof a==R}function ia(a){return w(a)?a.replace(/^\s*/,"").replace(/\s*$/,""):a}function Ia(a,b){this.html=a;this.get=D(b)=="unsafe"?ua(a):function(){var b=[];hb(a,ib(b));return b.join("")}}function ac(a,b,c){var d=[];k(a,function(a,f,g){d.push(b.call(c,a,f,g))});return d}function jb(a,b){var c=0,d;if(Q(a)||w(a))return a.length;else if(I(a))for(d in a)(!b||a.hasOwnProperty(d))&&c++;return c}function kb(a,b){for(var c=0;c<a.length;c++)if(b===
+a[c])return!0;return!1}function na(a,b){for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1}function bc(a){if(a)switch(a.nodeName){case "OPTION":case "PRE":case "TITLE":return!0}return!1}function A(a,b){if(b)if(Q(a)){for(;b.length;)b.pop();for(var c=0;c<a.length;c++)b.push(A(a[c]))}else for(c in k(b,function(a,c){delete b[c]}),a)b[c]=A(a[c]);else(b=a)&&(Q(a)?b=A(a,[]):a instanceof Date?b=new Date(a.getTime()):I(a)&&(b=A(a,{})));return b}function oa(a,b){if(a==b)return!0;if(a===null||b===null)return!1;
+var c=typeof a,d;if(c==typeof b&&c=="object")if(a instanceof Array){if((c=a.length)==b.length){for(d=0;d<c;d++)if(!oa(a[d],b[d]))return!1;return!0}}else{c={};for(d in a){if(d.charAt(0)!=="$"&&!m(a[d])&&!oa(a[d],b[d]))return!1;c[d]=!0}for(d in b)if(!c[d]&&d.charAt(0)!=="$"&&!m(b[d]))return!1;return!0}return!1}function cc(a){return(a=a&&a[0]&&a[0].nodeName)&&a.charAt(0)!="#"&&!kb(["TR","COL","COLGROUP","TBODY","THEAD","TFOOT"],a)}function aa(a,b,c){for(var d;!cc(a);)if(d=a.parent(),d.length)a=a.parent();
+else return;if(a[0].$NG_ERROR!==c)(a[0].$NG_ERROR=c)?(a.addClass(b),a.attr(b,c.message||c)):(a.removeClass(b),a.removeAttr(b))}function F(a,b){var c=arguments.length>2?ba.call(arguments,2,arguments.length):[];return typeof b==R&&!(b instanceof RegExp)?c.length?function(){return arguments.length?b.apply(a,c.concat(ba.call(arguments,0,arguments.length))):b.apply(a,c)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}:b}function ja(a){a&&a.length!==0?(a=D(""+a),a=!(a=="f"||a=="0"||a==
+"false"||a=="no"||a=="n"||a=="[]")):a=!1;return a}function lb(a){return(new mb(Ja,nb,B,J)).compile(a)}function Ka(a){var b={},c,d;k((a||"").split("&"),function(a){a&&(c=a.split("="),d=unescape(c[0]),b[d]=x(c[1])?unescape(c[1]):!0)});return b}function ob(a){var b=[];k(a,function(a,d){b.push(escape(d)+(a===!0?"":"="+escape(a)))});return b.length?b.join("&"):""}function La(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(b?null:
+/%20/g,"+")}function dc(a,b){pb();var c=a.getElementsByTagName("script"),d;b=n({ie_compat_id:"ng-ie-compat"},b);for(var e=0;e<c.length;e++)if(d=(c[e].src||"").match(ec))b.base_url=d[1],b.ie_compat=d[1]+"angular-ie-compat"+(d[2]||"")+".js",n(b,Ka(d[6])),va(o(c[e]),function(a,c){/^ng:/.exec(c)&&(c=c.substring(3).replace(/-/g,"_"),b[c]=a||!0)});return b}function pb(){(Ma=s.jQuery)?(o=Ma,n(Ma.fn,{scope:qb.scope})):o=Na;u.element=o}function rb(a,b,c){if(!a)throw a=new K("Argument '"+(b||"?")+"' is "+(c||
+"required")),s.console&&s.console.log(a.stack),a;}function M(a,b){var c=[];Oa(c,a,b?"\n  ":null,[]);return c.join("")}function ca(a,b){function c(a){if(w(a)&&a.length===sb)return Pa.toDate(a);else(Q(a)||I(a))&&k(a,function(b,d){a[d]=c(b)});return a}if(!w(a))return a;var d,e,f;try{if(b&&s.JSON&&s.JSON.parse)return d=JSON.parse(a),c(d);e=da(a,!0);f=e.primary();e.assertAllConsumed();return f()}catch(g){throw fc("fromJson error: ",a,g),g;}}function Oa(a,b,c,d){if(I(b)){if(b===s){a.push("WINDOW");return}if(b===
+L){a.push("DOCUMENT");return}if(kb(d,b)){a.push("RECURSION");return}d.push(b)}if(b===null)a.push(wa);else if(b instanceof RegExp)a.push(u.String.quoteUnicode(b.toString()));else if(m(b))return;else if(typeof b==gc)a.push(""+b);else if(ma(b))isNaN(b)?a.push(wa):a.push(""+b);else if(w(b))return a.push(u.String.quoteUnicode(b));else if(I(b))if(Q(b)){a.push("[");for(var e=b.length,f=!1,g=0;g<e;g++){var h=b[g];f&&a.push(",");!(h instanceof RegExp)&&(m(h)||z(h))?a.push(wa):Oa(a,h,c,d);f=!0}a.push("]")}else if(b instanceof
+Date)a.push(u.String.quoteUnicode(u.Date.toString(b)));else{a.push("{");c&&a.push(c);e=!1;f=c?c+"  ":!1;g=[];for(h in b)b[h]!==E&&g.push(h);g.sort();for(h=0;h<g.length;h++){var i=g[h],j=b[i];typeof j!=R&&(e&&(a.push(","),c&&a.push(c)),a.push(u.String.quote(i)),a.push(":"),Oa(a,j,f,d),e=!0)}a.push("}")}I(b)&&d.pop()}function Qa(a){this.paths=[];this.children=[];this.inits=[];this.priority=a;this.newScope=!1}function mb(a,b,c,d){this.markup=a;this.attrMarkup=b;this.directives=c;this.widgets=d}function tb(a,
+b){var c,d=a[0].childNodes||[],e;for(c=0;c<d.length;c++){var f=e=d[c];pa(f)=="#text"||b(o(e),c)}}function va(a,b){var c,d=a[0].attributes||[],e,f,g={};for(c=0;c<d.length;c++)e=d[c],f=e.name,e=e.value,S&&f=="href"&&(e=decodeURIComponent(a[0].getAttribute(f,2))),g[f]=e;Ga(g,b)}function qa(a,b,c){if(!b)return a;for(var d=b.split("."),e,f=a,g=d.length,h=0;h<g;h++){e=d[h];if(!e.match(/^[\$\w][\$\w\d]*$/))throw"Expression '"+b+"' is not a valid expression for accesing variables.";a&&(f=a,a=a[e]);if(z(a)&&
+e.charAt(0)=="$"){var i=u.Global.typeOf(f);if(e=(i=u[i.charAt(0).toUpperCase()+i.substring(1)])?i[[e.substring(1)]]:E)return a=F(f,e,f)}}if(!c&&m(a))return F(f,a);return a}function Ra(a,b,c){b=b.split(".");for(var d=0;b.length>1;d++){var e=b.shift(),f=a[e];f||(f={},a[e]=f);a=f}return a[b.shift()]=c}function ub(a){var b=vb[a];if(b)return b;var c="var l, fn, t;\n";k(a.split("."),function(a){a=wb[a]?'["'+a+'"]':"."+a;c+="if(!s) return s;\nl=s;\ns=s"+a+';\nif(typeof s=="function" && !(s instanceof RegExp)) s = function(){ return l'+
+a+".apply(l, arguments); };\n";a.charAt(1)=="$"&&(a=a.substr(2),c+='if(!s) {\n  t = angular.Global.typeOf(l);\n  fn = (angular[t.charAt(0).toUpperCase() + t.substring(1)]||{})["'+a+'"];\n  if (fn) s = function(){ return fn.apply(l, [l].concat(Array.prototype.slice.call(arguments, 0, arguments.length))); };\n}\n')});c+="return s;";b=Function("s",c);b.toString=function(){return c};return vb[a]=b}function ea(a){if(typeof a===R)return a;var b=xb[a];if(!b){b=da(a);var c=b.statements();b.assertAllConsumed();
+b=xb[a]=n(function(){return c(this)},{fnSelf:c})}return b}function T(a,b,c){function d(){}a=d.prototype=a||{};var e=new d,f={sorted:[]},g,h;n(e,{"this":e,$id:hc++,$parent:a,$bind:F(e,F,e),$get:F(e,qa,e),$set:F(e,Ra,e),$eval:function(a){var b=typeof a,c,d,g;if(b==$){a=0;for(b=f.sorted.length;a<b;a++){g=f.sorted[a];d=g.length;for(c=0;c<d;c++)e.$tryEval(g[c].fn,g[c].handler)}}else if(b===R)return a.call(e);else if(b==="string")return ea(a).call(e)},$tryEval:function(a,b){var c=typeof a;try{if(c==R)return a.call(e);
+else if(c=="string")return ea(a).call(e)}catch(d){g&&g.error(d),m(b)?b(d):b?aa(b,xa,x(d)?Ha(d):d):m(h)&&h(d)}},$watch:function(a,b,c,d){function g(a){var d=f.call(e),i=h;if(a||i!==d)h=d,e.$tryEval(function(){return b.call(e,d,i)},c)}var f=ea(a),h=f.call(e);b=ea(b);e.$onEval(yb,g);z(d)&&(d=!0);d&&g(!0)},$onEval:function(a,b,c){ma(a)||(c=b,b=a,a=0);var d=f[a];if(!d)d=f[a]=[],d.priority=a,f.sorted.push(d),f.sorted.sort(function(a,b){return a.priority-b.priority});d.push({fn:ea(b),handler:c})},$become:function(a){if(m(a))e.constructor=
+a,k(a.prototype,function(a,b){e[b]=F(e,a)}),e.$service.apply(e,[a,e].concat(ba.call(arguments,1,arguments.length))),m(a.prototype.init)&&e.init()},$new:function(a){var b=T(e);b.$become.apply(e,[a].concat(ba.call(arguments,1,arguments.length)));e.$onEval(b.$eval);return b}});if(!a.$root)e.$root=e,e.$parent=e,(e.$service=zb(e,b,c))();g=e.$service("$log");h=e.$service("$exceptionHandler");return e}function zb(a,b,c){b=b||Ta;c=c||{};a=a||{};return function e(f,g){var h,i;if(w(f)){if(!(f in c)){i=b[f];
+if(!i)throw"Unknown provider for '"+f+"'.";c[f]=e(i,a)}h=c[f]}else Q(f)?(h=[],k(f,function(a){h.push(e(a))})):m(f)?(h=e(ic(f)),h=f.apply(g,h.concat(ba.call(arguments,2,arguments.length)))):I(f)?k(b,function(a,b){a.$eager&&e(b);if(a.$creation)throw new K("Failed to register service '"+b+"': $creation property is unsupported. Use $eager:true or see release notes.");}):h=e(a);return h}}function C(a,b,c,d){Ta(a,b,{$inject:c,$eager:d})}function ic(a){rb(m(a,void 0,"not a function"));if(!a.$inject){var b=
+a.$inject=[],c=a.toString().replace(jc,"").match(kc);k(c[1].split(lc),function(a){a.replace(mc,function(a,c,d,h,i){rb(b,c,"after non-injectable arg");h||i?b.push(d):b=null})})}return a.$inject}function nc(a,b){function c(a){return a.indexOf(t)!=-1}function d(){return l+1<a.length?a.charAt(l+1):!1}function e(a){return"0"<=a&&a<="9"}function f(a){return"a"<=a&&a<="z"||"A"<=a&&a<="Z"||"_"==a||a=="$"}function g(a){return a=="-"||a=="+"||e(a)}function h(b,c,d){d=d||l;throw K("Lexer Error: "+b+" at column"+
+(x(c)?"s "+c+"-"+l+" ["+a.substring(c,d)+"]":" "+d)+" in expression ["+a+"].");}function i(){for(var b="",c=l;l<a.length;){var f=D(a.charAt(l));if(f=="."||e(f))b+=f;else{var i=d();if(f=="e"&&g(i))b+=f;else if(g(f)&&i&&e(i)&&b.charAt(b.length-1)=="e")b+=f;else if(g(f)&&(!i||!e(i))&&b.charAt(b.length-1)=="e")h("Invalid exponent");else break}l++}b*=1;r.push({index:c,text:b,json:!0,fn:function(){return b}})}function j(){for(var b="",c=l,d;l<a.length;){d=a.charAt(l);if(d=="."||f(d)||e(d))b+=d;else break;
+l++}d=Ua[b];r.push({index:c,text:b,json:d,fn:d||n(ub(b),{assign:function(a,c){return Ra(a,b,c)}})})}function v(b){var c=l;l++;for(var d="",e=b,f=!1;l<a.length;){var g=a.charAt(l);e+=g;if(f)g=="u"?(g=a.substring(l+1,l+5),g.match(/[\da-f]{4}/i)||h("Invalid unicode escape [\\u"+g+"]"),l+=4,d+=String.fromCharCode(parseInt(g,16))):(f=oc[g],d+=f?f:g),f=!1;else if(g=="\\")f=!0;else if(g==b){l++;r.push({index:c,text:e,string:d,json:!0,fn:function(){return d.length==p?u.String.toDate(d):d}});return}else d+=
+g;l++}h("Unterminated quote",c)}for(var p=b?sb:-1,r=[],y,l=0,k=[],t,U=":";l<a.length;){t=a.charAt(l);if(c("\"'"))v(t);else if(e(t)||c(".")&&e(d()))i();else if(f(t)){if(j(),"{,".indexOf(U)!=-1&&k[0]=="{"&&(y=r[r.length-1]))y.json=y.text.indexOf(".")==-1}else if(c("(){}[].,;:"))r.push({index:l,text:t,json:":[,".indexOf(U)!=-1&&c("{[")||c("}]:,")}),c("{[")&&k.unshift(t),c("}]")&&k.shift(),l++;else if(t==" "||t=="\r"||t=="\t"||t=="\n"||t=="\u000b"||t=="\u00a0"){l++;continue}else{var ka=t+d(),o=Ua[t],
+q=Ua[ka];q?(r.push({index:l,text:ka,fn:q}),l+=2):o?(r.push({index:l,text:t,fn:o,json:"[,:".indexOf(U)!=-1&&c("+-")}),l+=1):h("Unexpected next character ",l,l+1)}U=t}return r}function da(a,b){function c(b,c){throw K("Parse Error: Token '"+c.text+"' "+b+" at column "+(c.index+1)+" of expression ["+a+"] starting at ["+a.substring(c.index)+"].");}function d(){if(s.length===0)throw K("Unexpected end of expression: "+a);return s[0]}function e(a,b,c,d){if(s.length>0){var e=s[0],g=e.text;if(g==a||g==b||g==
+c||g==d||!a&&!b&&!c&&!d)return e}return!1}function f(a,d,g,f){if(a=e(a,d,g,f)){if(b&&!a.json)index=a.index,c("is not valid json",a);s.shift();return this.currentToken=a}return!1}function g(a){f(a)||c("is unexpected, expecting ["+a+"]",e())}function h(a,b){return function(c){return a(c,b(c))}}function i(a,b,c){return function(d){return b(d,a(d),c(d))}}function j(){s.length!==0&&c("is extra token not part of expression",s[0])}function v(){for(var a=[];;)if(s.length>0&&!e("}",")",";","]")&&a.push(A()),
+!f(";"))return function(b){for(var c,d=0;d<a.length;d++){var e=a[d];e&&(c=e(b))}return c}}function p(){return G(N)}function r(){for(var a=y(),b;;)if(b=f("||"))a=i(a,b.fn,y());else return a}function y(){var a=l(),b;if(b=f("&&"))a=i(a,b.fn,y());return a}function l(){var a=k(),b;if(b=f("==","!="))a=i(a,b.fn,l());return a}function k(){var a;a=t();for(var b;b=f("+","-");)a=i(a,b.fn,t());if(b=f("<",">","<=",">="))a=i(a,b.fn,k());return a}function t(){for(var a=U(),b;b=f("*","/","%");)a=i(a,b.fn,U());return a}
+function U(){var a;return f("+")?ka():(a=f("-"))?i(x,a.fn,U()):(a=f("!"))?h(a.fn,U()):ka()}function ka(){var a;if(f("("))a=A(),g(")");else if(f("["))a=o();else if(f("{"))a=u();else{var b=f();(a=b.fn)||c("not a primary expression",b)}for(;b=f("(","[",".");)b.text==="("?a=B(a):b.text==="["?a=D(a):b.text==="."?a=C(a):c("IMPOSSIBLE");return a}function o(){var a=[];if(d().text!="]"){do a.push(m());while(f(","))}g("]");return function(b){for(var c=[],d=0;d<a.length;d++)c.push(a[d](b));return c}}function u(){var a=
+[];if(d().text!="}"){do{var b=f();b=b.string||b.text;g(":");var c=m();a.push({key:b,value:c})}while(f(","))}g("}");return function(b){for(var c={},d=0;d<a.length;d++){var e=a[d],g=e.value(b);c[e.key]=g}return c}}function w(){var a=f().text;g(":");var b;d().text=="{"?(g("{"),b=v(),g("}")):b=m();return function(){return{name:a,fn:b}}}var x=ua(0),s=nc(a,b),m=function(){var b=r(),d,e;return(e=f("="))?(b.assign||c("implies assignment but ["+a.substring(0,e.index)+"] can not be assigned to",e),d=r(),function(a){return b.assign(a,
+d(a))}):b},z=r,B=function(a){var b=[];if(d().text!=")"){do b.push(m());while(f(","))}g(")");return function(c){for(var d=[],e=0;e<b.length;e++)d.push(b[e](c));e=a(c)||q;return e.apply?e.apply(c,d):e(d[0],d[1],d[2],d[3],d[4])}},C=function(a){var b=f().text,c=ub(b);return n(function(b){return c(a(b))},{assign:function(c,d){return Ra(a(c),b,d)}})},D=function(a){var b=m();g("]");return n(function(c){var d=a(c);c=b(c);return d?d[c]:E},{assign:function(c,d){return a(c)[b(c)]=d}})},A=function(){for(var a=
+m(),b;;)if(b=f("|"))a=i(a,b.fn,p());else return a},F=function(a){for(var b=f(),d=b.text.split("."),e,g=0;g<d.length;g++)e=d[g],a&&(a=a[e]);typeof a!=R&&c("should be a function",b);return a},G=function(a){for(var b=F(a),c=[];;)if(f(":"))c.push(m());else{var d=function(a,d){for(var e=[d],g=0;g<c.length;g++)e.push(c[g](a));return b.apply(a,e)};return function(){return d}}};b&&(m=r,B=C=D=z=A=F=G=function(){c("is not valid json",{text:a,index:0})});return{assertAllConsumed:j,assignable:z,primary:ka,statements:v,
+validator:function(){return G(Va)},formatter:function(){function a(b){return function(a,c){for(var d=[c],g=0;g<e.length;g++)d.push(e[g](a));return b.apply(a,d)}}var b=f(),d=Y[b.text],e=[];for(d||c("is not a valid formatter.",b);;)if(b=f(":"))e.push(m());else return ua({format:a(d.format),parse:a(d.parse)})},filter:p,watch:function(){for(var a=[];s.length>0;)a.push(w()),f(";")||j();j();return function(b){for(var c=0;c<a.length;c++){var d=a[c](b);b.addListener(d.name,d.fn)}}}}}function Ab(a,b){this.template=
+a+="#";this.defaults=b||{};var c=this.urlParams={};k(a.split(/\W/),function(b){b&&a.match(RegExp(":"+b+"\\W"))&&(c[b]=!0)})}function ya(a){this.xhr=a}function qc(a,b,c,d,e){function f(a){try{a.apply(null,ba.call(arguments,1))}finally{if(v--,v===0)for(;p.length;)try{p.pop()()}catch(b){e.error(b)}}}var g=this,h=a.location,i=a.setTimeout;g.isMock=!1;var j=0,v=0,p=[];g.xhr=function(b,e,g,i,h){v++;if(D(b)=="json"){var p=("angular_"+Math.random()+"_"+j++).replace(/\d\./,""),r=o("<script>").attr({type:"text/javascript",
+src:e.replace("JSON_CALLBACK",p)});a[p]=function(b){a[p]=E;r.remove();f(i,200,b)};c.append(r)}else{var l=new d;l.open(b,e,!0);k(n(rc,h||{}),function(a,b){a&&l.setRequestHeader(b,a)});l.onreadystatechange=function(){l.readyState==4&&f(i,l.status||200,l.responseText)};l.send(g||"")}};g.notifyWhenNoOutstandingRequests=function(a){v===0?a():p.push(a)};var r=[];g.poll=function(){k(r,function(a){a()})};g.addPollFn=function(a){r.push(a);return a};g.startPoller=function(a,b){(function pc(){g.poll();b(pc,
+a)})()};g.setUrl=function(a){h.href.match(/#/);a.match(/#/)||(a+="#");h.href=a};g.getUrl=function(){return h.href};g.onHashChange=function(b){if("onhashchange"in a)o(a).bind("hashchange",b);else{var c=g.getUrl();g.addPollFn(function(){c!=g.getUrl()&&(b(),c=g.getUrl())})}return b};var y=b[0],l={},Sa="";g.cookies=function(a,b){var c,d,g,f;if(a)if(b===E)y.cookie=escape(a)+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";else{if(w(b))y.cookie=escape(a)+"="+escape(b),c=a.length+b.length+1,c>4096&&e.warn("Cookie '"+
+a+"' possibly not set or overflowed because it was too large ("+c+" > 4096 bytes)!"),l.length>20&&e.warn("Cookie '"+a+"' possibly not set or overflowed because too many cookies were already set ("+l.length+" > 20 )")}else{if(y.cookie!==Sa){Sa=y.cookie;c=Sa.split("; ");l={};for(g=0;g<c.length;g++)d=c[g],f=d.indexOf("="),f>0&&(l[unescape(d.substring(0,f))]=unescape(d.substring(f+1)))}return l}};g.defer=function(a,b){v++;i(function(){f(a)},b||0)};var t=q;g.hover=function(a){t=a};g.bind=function(){b.bind("mouseover",
+function(a){t(o(S?a.srcElement:a.target),!0);return!0});b.bind("mouseleave mouseout click dblclick keypress keyup",function(a){t(o(a.target),!1);return!0})};g.addCss=function(a){var b=o(y.createElement("link"));b.attr("rel","stylesheet");b.attr("type","text/css");b.attr("href",a);c.append(b)};g.addJs=function(a,b){var d=o(y.createElement("script"));d.attr("type","text/javascript");d.attr("src",a);b&&d.attr("id",b);c.append(d)}}function hb(a,b){function c(a,c,e,f){c=D(c);if(Bb[c])for(;g.last()&&Cb[g.last()];)d("",
+g.last());Db[c]&&g.last()==c&&d("",c);(f=Eb[c]||!!f)||g.push(c);var h={};e.replace(sc,function(a,b,c,d,e){h[b]=Wa(c||d||e||"")});b.start&&b.start(c,h,f)}function d(a,c){var d=0,e;if(c=D(c))for(d=g.length-1;d>=0;d--)if(g[d]==c)break;if(d>=0){for(e=g.length-1;e>=d;e--)b.end&&b.end(g[e]);g.length=d}}var e,f,g=[],h=a;for(g.last=function(){return g[g.length-1]};a;){f=!0;if(!g.last()||!Fb[g.last()]){if(a.indexOf("<\!--")===0)e=a.indexOf("--\>"),e>=0&&(b.comment&&b.comment(a.substring(4,e)),a=a.substring(e+
+3),f=!1);else if(tc.test(a)){if(e=a.match(Gb))a=a.substring(e[0].length),e[0].replace(Gb,d),f=!1}else if(uc.test(a)&&(e=a.match(Hb)))a=a.substring(e[0].length),e[0].replace(Hb,c),f=!1;f&&(e=a.indexOf("<"),f=e<0?a:a.substring(0,e),a=e<0?"":a.substring(e),b.chars&&b.chars(Wa(f)))}else a=a.replace(RegExp("(.*)<\\s*\\/\\s*"+g.last()+"[^>]*>","i"),function(a,c){c=c.replace(vc,"$1").replace(wc,"$1");b.chars&&b.chars(Wa(c));return""}),d("",g.last());if(a==h)throw"Parse Error: "+a;h=a}d()}function fa(a){var b=
+{};a=a.split(",");var c;for(c=0;c<a.length;c++)b[a[c]]=!0;return b}function Wa(a){Xa.innerHTML=a.replace(/</g,"&lt;");return Xa.innerText||Xa.textContent||""}function Ib(a){return a.replace(/&/g,"&amp;").replace(xc,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function ib(a){var b=!1,c=F(a,a.push);return{start:function(a,e,f){a=D(a);!b&&Fb[a]&&(b=a);!b&&Jb[a]==!0&&(c("<"),c(a),k(e,function(a,b){var d=D(b);if(yc[d]==!0&&(Kb[d]!==!0||a.match(zc)))c(" "),c(b),
+c('="'),c(Ib(a)),c('"')}),c(f?"/>":">"))},end:function(a){a=D(a);!b&&Jb[a]==!0&&(c("</"),c(a),c(">"));a==b&&(b=!1)},chars:function(a){b||c(Ib(a))}}}function Ac(a){var b={};a=a[0].style;var c,d;if(typeof a.length=="number")for(c=0;c<a.length;c++)d=a[c],b[d]=a[d];else for(d in a)c=a[d],1*d!=d&&d!="cssText"&&c&&typeof c=="string"&&c!="false"&&(b[d]=c);return b}function Na(a){if(w(a)&&a.charAt(0)!="<")throw new K("selectors not implemented");return new V(a)}function V(a){if(a instanceof V)return a;else if(w(a)){var b=
+L.createElement("div");b.innerHTML="<div>&nbsp;</div>"+a;b.removeChild(b.firstChild);Ya(this,b.childNodes);this.remove()}else Ya(this,a)}function ra(a){Lb(a);var b=0;for(a=a.childNodes||[];b<a.length;b++)ra(a[b])}function Lb(a){var b=a[za],c=Aa[b];c&&(k(c.bind||{},function(b,c){Bc(a,c,b)}),delete Aa[b],a[za]=E)}function Za(a,b,c){var d=a[za];d=Aa[d||-1];if(x(c))d||(a[za]=d=Cc++,d=Aa[d]={}),d[b]=c;else return d?d[b]:null}function $a(a,b){var c;return(" "+a.className+" ").replace(/[\n\t]/g," ").indexOf(" "+
+b+" ")>-1}function Mb(a,b){a.className=ia((" "+a.className+" ").replace(/[\n\t]/g," ").replace(" "+b+" ",""))}function Nb(a,b){if(!$a(a,b))a.className=ia(a.className+" "+b)}function Ya(a,b){if(b){b=!b.nodeName&&x(b.length)&&(!b||!b.document||!b.location||!b.alert||!b.setInterval)?b:[b];for(var c=0;c<b.length;c++)a.push(b[c])}}function ga(a,b){u[a]=u[a]||{};k(b,function(b){n(u[a],b)})}function O(a,b,c){var d="";a<0&&(d="-",a=-a);for(a=""+a;a.length<b;)a="0"+a;c&&(a=a.substr(a.length-b));return d+a}
+function G(a,b,c,d){return function(e){e=e["get"+a]();if(c>0||e>-c)e+=c;e===0&&c==-12&&(e=12);return O(e,b,d)}}function ha(a,b){return{format:a,parse:b||a}}function Ob(a){return x(a)&&a!==null?""+a:a}function ab(a){function b(){d=!1;c.$eval()}var c=this,d;return a.isMock?b:function(){d||(d=!0,a.defer(b,ab.delay))}}function Pb(a){var b=Qb[a];if(!b){var c=[];k(Ba(a),function(a){var b=Ca(a);c.push(b?function(a){var c,d=this.$tryEval(b,function(a){c=M(a)});aa(a,xa,c);return c?c:d}:function(){return a})});
+Qb[a]=b=function(a,b){var f=[],g=this.hasOwnProperty(Rb)?this.$element:E;this.$element=a;for(var h=0;h<c.length;h++){var i=c[h].call(this,a);i&&(i.nodeName||i.bind&&i.find)?i="":I(i)&&(i=M(i,b));f.push(i)}this.$element=g;return f.join("")}}return b}function bb(a){return function(b,c){var d=c[0].className+" ";return function(c){this.$onEval(function(){if(a(this.$index)){var f=this.$eval(b);Q(f)&&(f=f.join(" "));c[0].className=ia(d+f)}},c)}}}function Ba(a){for(var b=[],c=0,d;(d=a.indexOf("{{",c))>-1;)c<
+d&&b.push(a.substr(c,d-c)),c=d,d=a.indexOf("}}",d),d=d<0?a.length:d+2,b.push(a.substr(c,d-c)),c=d;c!=a.length&&b.push(a.substr(c,a.length-c));return b.length===0?[a]:b}function Ca(a){return(a=a.replace(/\n/gm," ").match(/^\{\{(.*)\}\}$/))?a[1]:null}function sa(a,b){var c=b.attr("name"),d;if(c){d=da(c).assignable().assign;if(!d)throw new K("Expression '"+c+"' is not assignable.");return{get:function(){return a.$eval(c)},set:function(c){if(c!==E)return a.$tryEval(function(){d(a,c)},b)}}}}function cb(a,
+b){var c=sa(a,b),d=b.attr("ng:format")||Da,e=da(d).formatter()();if(c)return{get:function(){return e.format(a,c.get())},set:function(b){return c.set(e.parse(a,b))}}}function db(a,b){function c(){var c=ia(b.val());if(b[0].disabled||b[0].readOnly)aa(b,ta,null),p.markValid(b);else{var d=Yb(a,{$element:b});c=v&&!c?"Required":c?e(d,c):null;aa(b,ta,c);(j=c)?p.markInvalid(b):p.markValid(b)}}var d=b.attr("ng:validate")||Da,e=da(d).validator()(),f=b.attr("ng:required"),g=b.attr("ng:format")||Da;g=da(g).formatter()();
+var h,i,j,v,p=a.$service("$invalidWidgets")||{markValid:q,markInvalid:q};if(!e)throw"Validator named '"+d+"' not found.";h=g.format;i=g.parse;f?a.$watch(f,function(a){v=a;c()}):v=f==="";b.data(eb,c);return{get:function(){j&&aa(b,ta,null);try{var d=i(a,b.val());c();return d}catch(e){j=e,aa(b,ta,e)}},set:function(d){var e=b.val();d=h(a,d);e!=d&&b.val(d||"");c()}}}function Sb(a,b){var c=b.attr("ng:format")||Da,d=da(c).formatter()();return{get:function(){var c=[];k(b[0].options,function(b){b.selected&&
+c.push(d.parse(a,b.value))});return c},set:function(c){var f={};k(c,function(b){f[d.format(a,b)]=!0});k(b[0].options,function(a){a.selected=f[a.value]})}}}function Tb(){return{get:q,set:q}}function Ea(a){return function(b,c){var d=c.get();!d&&x(a)&&(d=A(a));z(b.get())&&x(d)&&b.set(d)}}function la(a,b,c,d,e){return n(function(f,g,h){var i=this,j=b(i,h),v=c(i,h),p=h.attr("ng:change")||"",r;j&&(d.call(i,j,v,h),this.$eval(h.attr("ng:init")||""),h.bind(a,function(a){function b(){var a=v.get();if(!e||a!=
+r)j.set(a),r=j.get(),i.$tryEval(p,h),f()}a.type=="keydown"?g(b):b()}),i.$watch(j.get,function(a){r!==a&&v.set(r=a)}))},{$inject:["$updateView","$defer"]})}function Fa(a){this.directives(!0);this.descend(!0);return Dc[D(a[0].type)]||q}if(typeof L.getAttribute==$)L.getAttribute=function(){};var D=function(a){return w(a)?a.toLowerCase():a},fb=function(a){return w(a)?a.toUpperCase():a},Rb="$element",eb="$validate",gc="boolean",R="function",Wb="length",Xb="name",wa="null",$b="number",gb="object",Zb="string",
+$="undefined",xa="ng-exception",ta="ng-validation-error",Da="noop",yb=-1E3,Ec={FIRST:-99999,LAST:99999,WATCH:yb},K=s.Error,S=parseInt((/msie (\d+)/.exec(D(navigator.userAgent))||[])[1],10),o,Ma,ba=[].slice,H=[].push,fc=s.console?F(s.console,s.console.error||q):q,u=s.angular||(s.angular={}),Ja=P(u,"markup"),nb=P(u,"attrMarkup"),B=P(u,"directive"),J=P(u,"widget",D),Va=P(u,"validator"),N=P(u,"filter"),Y=P(u,"formatter"),Ta=P(u,"service");P(u,"callbacks");var pa,ec=/^(|.*\/)angular(-.*?)?(\.min)?.js(\?[^#]*)?(#(.*))?$/,
+sb=24;pa=S?function(a){a=a.nodeName?a:a[0];return a.scopeName&&a.scopeName!="HTML"?fb(a.scopeName+":"+a.nodeName):a.nodeName}:function(a){return a.nodeName?a.nodeName:a[0].nodeName};u.toJson=M;u.fromJson=ca;Qa.prototype={attach:function(a,b){var c={};this.collectInits(a,c,b);Ga(c,function(a){k(a,function(a){a()})})},collectInits:function(a,b,c){var d=b[this.priority],e=c;d||(b[this.priority]=d=[]);this.newScope&&(e=T(c),c.$onEval(e.$eval),a.data("$scope",e));k(this.inits,function(b){d.push(function(){e.$tryEval(function(){return e.$service(b,
+e,a)},a)})});var f=a[0].childNodes,g=this.children,h=this.paths,i=h.length;for(c=0;c<i;c++)g[c].collectInits(o(f[h[c]]),b,e)},addInit:function(a){a&&this.inits.push(a)},addChild:function(a,b){b&&(this.paths.push(a),this.children.push(b))},empty:function(){return this.inits.length===0&&this.paths.length===0}};mb.prototype={compile:function(a){a=o(a);var b=0,c,d=a.parent();if(d&&d[0]){d=d[0];for(var e=0;e<d.childNodes.length;e++)d.childNodes[e]==a[0]&&(b=e)}c=this.templatize(a,b,0)||new Qa;return function(b,
+d){var e=d?qb.clone.call(a):a;b=b||T();e.data("$scope",b);b.$element=e;(d||q)(e,b);c.attach(e,b);b.$eval();return b}},templatize:function(a,b,c){var d=this,e,f,g=d.directives,h=!0,i=!0,j=pa(a),v=j.indexOf(":")>0?D(j).replace(":","-"):"",p,r={compile:F(d,d.compile),descend:function(a){x(a)&&(h=a);return h},directives:function(a){x(a)&&(i=a);return i},scope:function(a){if(x(a))p.newScope=p.newScope||a;return p.newScope}};try{c=a.attr("ng:eval-order")||c||0}catch(y){c=c||0}a.addClass(v);w(c)&&(c=Ec[fb(c)]||
+parseInt(c,10));p=new Qa(c);va(a,function(b,c){if(!e&&(e=d.widgets("@"+c)))a.addClass("ng-attr-widget"),e=F(r,e,b,a)});if(!e&&(e=d.widgets(j)))v&&a.addClass("ng-widget"),e=F(r,e,a);e&&(i=h=!1,j=a.parent(),p.addInit(e.call(r,a)),j&&j[0]&&(a=o(j[0].childNodes[b])));if(h)for(var l=0,n=a[0].childNodes;l<n.length;l++)pa(n[l])=="#text"&&k(d.markup,function(b){if(l<n.length){var c=o(n[l]);b.call(r,c.text(),c,a)}});i&&(va(a,function(b,c){k(d.attrMarkup,function(d){d.call(r,b,c,a)})}),va(a,function(b,c){if(f=
+g[c])a.addClass("ng-directive"),p.addInit(g[c].call(r,b,a))}));h&&tb(a,function(a,b){p.addChild(b,d.templatize(a,b,c))});return p.empty()?null:p}};var hc=0,vb={},xb={},wb={};k("abstract,boolean,break,byte,case,catch,char,class,const,continue,debugger,default,delete,do,double,else,enum,export,extends,false,final,finally,float,for,function,goto,if,implements,import,ininstanceof,intinterface,long,native,new,null,package,private,protected,public,return,short,static,super,switch,synchronized,this,throw,throws,transient,true,try,typeof,var,volatile,void,undefined,while,with".split(/,/),
+function(a){wb[a]=!0});var kc=/^function\s*[^\(]*\(([^\)]*)\)/,lc=/,/,mc=/^\s*(((\$?).+?)(_?))\s*$/,jc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ua={"null":function(){return null},"true":function(){return!0},"false":function(){return!1},$undefined:q,"+":function(a,b,c){return(x(b)?b:0)+(x(c)?c:0)},"-":function(a,b,c){return(x(b)?b:0)-(x(c)?c:0)},"*":function(a,b,c){return b*c},"/":function(a,b,c){return b/c},"%":function(a,b,c){return b%c},"^":function(a,b,c){return b^c},"=":q,"==":function(a,b,c){return b==
+c},"!=":function(a,b,c){return b!=c},"<":function(a,b,c){return b<c},">":function(a,b,c){return b>c},"<=":function(a,b,c){return b<=c},">=":function(a,b,c){return b>=c},"&&":function(a,b,c){return b&&c},"||":function(a,b,c){return b||c},"&":function(a,b,c){return b&c},"|":function(a,b,c){return c(a,b)},"!":function(a,b){return!b}},oc={n:"\n",f:"\u000c",r:"\r",t:"\t",v:"\u000b","'":"'",'"':'"'};Ab.prototype={url:function(a){var b=this,c=this.template,d;a=a||{};k(this.urlParams,function(e,g){d=La(a[g]||
+b.defaults[g]||"",!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+");c=c.replace(RegExp(":"+g+"(\\W)"),d+"$1")});c=c.replace(/\/?#$/,"");var e=[];Ga(a,function(a,c){b.urlParams[c]||e.push(La(c)+"="+La(a))});c=c.replace(/\/*$/,"");return c+(e.length?"?"+e.join("&"):"")}};ya.DEFAULT_ACTIONS={get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}};ya.prototype={route:function(a,b,c){function d(a){var c={};k(b||{},function(b,
+d){c[d]=b.charAt&&b.charAt(0)=="@"?qa(a,b.substr(1)):b});return c}function e(a){A(a||{},this)}var f=this,g=new Ab(a);c=n({},ya.DEFAULT_ACTIONS,c);k(c,function(h,i){var j=h.method=="POST"||h.method=="PUT";e[i]=function(a,b,c){var i={},l,o=q;switch(arguments.length){case 3:o=c;case 2:if(m(b))o=b;else{i=a;l=b;break}case 1:m(a)?o=a:j?l=a:i=a;break;case 0:break;default:throw"Expected between 0-3 arguments [params, data, callback], got "+arguments.length+" arguments.";}var t=this instanceof e?this:h.isArray?
+[]:new e(l);f.xhr(h.method,g.url(n({},h.params||{},d(l),i)),l,function(a,b){if(a==200){if(b)h.isArray?(t.length=0,k(b,function(a){t.push(new e(a))})):A(b,t);(o||q)(t)}else throw{status:a,response:b,message:a+": "+b};},h.verifyCache);return t};e.bind=function(d){return f.route(a,n({},b,d),c)};e.prototype["$"+i]=function(a,b){var c=d(this),g=q;switch(arguments.length){case 2:c=a,g=b;case 1:typeof a==R?g=a:c=a;case 0:break;default:throw"Expected between 1-2 arguments [params, callback], got "+arguments.length+
+" arguments.";}e[i].call(this,c,j?this:E,g)}});return e}};var Fc=s.XMLHttpRequest||function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(c){}throw new K("This browser does not support XMLHttpRequest.");},rc={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json, text/plain, */*","X-Requested-With":"XMLHttpRequest"},Hb=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,
+Gb=/^<\s*\/\s*([\w:-]+)[^>]*>/,sc=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,uc=/^</,tc=/^<\s*\//,vc=/<\!--(.*?)--\>/g,wc=/<!\[CDATA\[(.*?)]]\>/g,zc=/^((ftp|https?):\/\/|mailto:|#)/,xc=/([^\#-~| |!])/g,Eb=fa("area,br,col,hr,img"),Bb=fa("address,blockquote,center,dd,del,dir,div,dl,dt,hr,ins,li,map,menu,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul"),Cb=fa("a,abbr,acronym,b,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var"),
+Db=fa("colgroup,dd,dt,li,p,td,tfoot,th,thead,tr"),Fb=fa("script,style"),Jb=n({},Eb,Bb,Cb,Db),Kb=fa("background,href,longdesc,src,usemap"),yc=n({},Kb,fa("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,span,start,summary,target,title,type,valign,value,vspace,width")),Xa=L.createElement("pre"),Aa={},za="ng-"+(new Date).getTime(),
+Cc=1,Gc=s.document.addEventListener?function(a,b,c){a.addEventListener(b,c,!1)}:function(a,b,c){a.attachEvent("on"+b,c)},Bc=s.document.removeEventListener?function(a,b,c){a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent("on"+b,c)};S&&n(V.prototype,{text:function(a){var b=this[0];if(b.nodeType==3){if(x(a))b.nodeValue=a;return b.nodeValue}else{if(x(a))b.innerText=a;return b.innerText}}});var qb=V.prototype={ready:function(a){function b(){c||(c=!0,a())}var c=!1;this.bind("DOMContentLoaded",
+b);Na(s).bind("load",b)},toString:function(){var a=[];k(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},length:0,push:H,sort:[].sort,splice:[].splice};k({data:Za,scope:function(a){for(var b;a&&!(b=o(a).data("$scope"));)a=a.parentNode;return b},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:$a,css:function(a,b,c){if(x(c))a.style[b]=c;else return a.style[b]},attr:function(a,b,c){if(x(c))a.setAttribute(b,c);else if(a.getAttribute)return a.getAttribute(b,2)},text:n(S?function(a,b){if(a.nodeType==
+3){if(z(b))return a.nodeValue;a.nodeValue=b}else{if(z(b))return a.innerText;a.innerText=b}}:function(a,b){if(z(b))return a.textContent;a.textContent=b},{$dv:""}),val:function(a,b){if(z(b))return a.value;a.value=b},html:function(a,b){if(z(b))return a.innerHTML;for(var c=0,d=a.childNodes;c<d.length;c++)ra(d[c]);a.innerHTML=b}},function(a,b){V.prototype[b]=function(b,d){var e,f;if((a.length==2?b:d)===E)if(I(b)){for(e=0;e<this.length;e++)for(f in b)a(this[e],f,b[f]);return this}else{if(this.length)return a(this[0],
+b,d)}else{for(e=0;e<this.length;e++)a(this[e],b,d);return this}return a.$dv}});k({removeData:Lb,dealoc:ra,bind:function(a,b,c){var d=Za(a,"bind"),e;d||Za(a,"bind",d={});k(b.split(" "),function(b){e=d[b];if(!e)d[b]=e=function(b){if(!b.preventDefault)b.preventDefault=function(){b.returnValue=!1};if(!b.stopPropagation)b.stopPropagation=function(){b.cancelBubble=!0};k(e.fns,function(c){c.call(a,b)})},e.fns=[],Gc(a,b,e);e.fns.push(c)})},replaceWith:function(a,b){var c,d=a.parentNode;ra(a);k(new V(b),function(b){c?
+d.insertBefore(b,c.nextSibling):d.replaceChild(b,a);c=b})},children:function(a){var b=[];k(a.childNodes,function(a){a.nodeName!="#text"&&b.push(a)});return b},append:function(a,b){k(new V(b),function(b){a.nodeType===1&&a.appendChild(b)})},remove:function(a){ra(a);var b=a.parentNode;b&&b.removeChild(a)},after:function(a,b){var c=a,d=a.parentNode;k(new V(b),function(a){d.insertBefore(a,c.nextSibling);c=a})},addClass:Nb,removeClass:Mb,toggleClass:function(a,b,c){z(c)&&(c=!$a(a,b));(c?Nb:Mb)(a,b)},parent:function(a){return(a=
+a.parentNode)&&a.nodeType!==11?a:null},next:function(a){return a.nextSibling},find:function(a,b){return a.getElementsByTagName(b)},clone:function(a){return a.cloneNode(!0)}},function(a,b){V.prototype[b]=function(b,d){for(var e,f=0;f<this.length;f++)e==E?(e=a(this[f],b,d),e!==E&&(e=o(e))):Ya(e,a(this[f],b,d));return e==E?this:e}});H={typeOf:function(a){if(a===null)return wa;var b=typeof a;if(b==gb){if(a instanceof Array)return"array";if(a instanceof Date)return"date";if(a.nodeType==1)return"element"}return b}};
+var W={copy:A,size:jb,equals:oa},Hc={extend:n},Ic={indexOf:na,sum:function(a,b){for(var c=u.Function.compile(b),d=0,e=0;e<a.length;e++){var f=1*c(a[e]);isNaN(f)||(d+=f)}return d},remove:function(a,b){var c=na(a,b);c>=0&&a.splice(c,1);return b},filter:function(a,b){var c=[];c.check=function(a){for(var b=0;b<c.length;b++)if(!c[b](a))return!1;return!0};var d=function(a,b){if(b.charAt(0)==="!")return!d(a,b.substr(1));switch(typeof a){case "boolean":case "number":case "string":return(""+a).toLowerCase().indexOf(b)>
+-1;case "object":for(var c in a)if(c.charAt(0)!=="$"&&d(a[c],b))return!0;return!1;case "array":for(c=0;c<a.length;c++)if(d(a[c],b))return!0;return!1;default:return!1}};switch(typeof b){case "boolean":case "number":case "string":b={$:b};case "object":for(var e in b)e=="$"?function(){var a=(""+b[e]).toLowerCase();a&&c.push(function(b){return d(b,a)})}():function(){var a=e,g=(""+b[e]).toLowerCase();g&&c.push(function(b){return d(qa(b,a),g)})}();break;case R:c.push(b);break;default:return a}for(var f=
+[],g=0;g<a.length;g++){var h=a[g];c.check(h)&&f.push(h)}return f},add:function(a,b){a.push(z(b)?{}:b);return a},count:function(a,b){if(!b)return a.length;var c=u.Function.compile(b),d=0;k(a,function(a){c(a)&&d++});return d},orderBy:function(a,b,c){function d(a,b){return ja(b)?function(b,c){return a(c,b)}:a}function e(a,b){var c=typeof a,d=typeof b;if(c==d){c=="string"&&(a=a.toLowerCase());c=="string"&&(b=b.toLowerCase());if(a===b)return 0;return a<b?-1:1}else return c<d?-1:1}b=Q(b)?b:[b];b=ac(b,function(a){var b=
+!1,c=a||Z;if(w(a)){if(a.charAt(0)=="+"||a.charAt(0)=="-")b=a.charAt(0)=="-",a=a.substring(1);c=ea(a).fnSelf}return d(function(a,b){return e(c(a),c(b))},b)});for(var f=[],g=0;g<a.length;g++)f.push(a[g]);return f.sort(d(function(a,c){for(var d=0;d<b.length;d++){var e=b[d](a,c);if(e!==0)return e}return 0},c))},limitTo:function(a,b){b=parseInt(b,10);var c=[],d,e;b>0?(d=0,e=b):(d=a.length+b,e=a.length);for(;d<e;d++)c.push(a[d]);return c}},Jc=/^(\d{4})-(\d\d)-(\d\d)(?:T(\d\d)(?:\:(\d\d)(?:\:(\d\d)(?:\.(\d{3}))?)?)?Z)?$/,
+Pa={quote:function(a){return'"'+a.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/\t/g,"\\t").replace(/\v/g,"\\v")+'"'},quoteUnicode:function(a){a=u.String.quote(a);for(var b=[],c=0;c<a.length;c++){var d=a.charCodeAt(c);d<128?b.push(a.charAt(c)):(d="000"+d.toString(16),b.push("\\u"+d.substring(d.length-4)))}return b.join("")},toDate:function(a){var b;if(w(a)&&(b=a.match(Jc)))a=new Date(0),a.setUTCFullYear(b[1],b[2]-1,b[3]),a.setUTCHours(b[4]||
+0,b[5]||0,b[6]||0,b[7]||0);return a}},Ub={toString:function(a){return!a?a:a.toISOString?a.toISOString():O(a.getUTCFullYear(),4)+"-"+O(a.getUTCMonth()+1,2)+"-"+O(a.getUTCDate(),2)+"T"+O(a.getUTCHours(),2)+":"+O(a.getUTCMinutes(),2)+":"+O(a.getUTCSeconds(),2)+"."+O(a.getUTCMilliseconds(),3)+"Z"}};ga("Global",[H]);ga("Collection",[H,W]);ga("Array",[H,W,Ic]);ga("Object",[H,W,Hc]);ga("String",[H,Pa]);ga("Date",[H,Ub]);u.Date.toString=Ub.toString;ga("Function",[H,W,{compile:function(a){return m(a)?a:a?
+ea(a).fnSelf:Z}}]);N.currency=function(a){this.$element.toggleClass("ng-format-negative",a<0);return"$"+N.number.apply(this,[a,2])};N.number=function(a,b){if(isNaN(a)||!isFinite(a))return"";b=typeof b==$?2:b;var c=a<0;a=Math.abs(a);var d=""+Math.round(a*Math.pow(10,b)),e=d.substring(0,d.length-b);e=e||"0";var f=d.substring(d.length-b);d=c?"-":"";for(c=0;c<e.length;c++)(e.length-c)%3===0&&c!==0&&(d+=","),d+=e.charAt(c);if(b>0){for(e=f.length;e<b;e++)f+="0";d+="."+f.substring(0,b)}return d};var Kc=
+{yyyy:G("FullYear",4),yy:G("FullYear",2,0,!0),MM:G("Month",2,1),M:G("Month",1,1),dd:G("Date",2),d:G("Date",1),HH:G("Hours",2),H:G("Hours",1),hh:G("Hours",2,-12),h:G("Hours",1,-12),mm:G("Minutes",2),m:G("Minutes",1),ss:G("Seconds",2),s:G("Seconds",1),a:function(a){return a.getHours()<12?"am":"pm"},Z:function(a){a=a.getTimezoneOffset();return O(a/60,2)+O(Math.abs(a%60),2)}},Lc=/([^yMdHhmsaZ]*)(y+|M+|d+|H+|h+|m+|s+|a|Z)(.*)/,Mc=/^\d+$/;N.date=function(a,b){w(a)&&(a=Mc.test(a)?parseInt(a,10):Pa.toDate(a));
+ma(a)&&(a=new Date(a));if(!(a instanceof Date))return a;var c=a.toLocaleDateString(),d;if(b&&w(b)){c="";for(var e=[],f;b;)(f=Lc.exec(b))?(e=e.concat(ba.call(f,1,f.length)),b=e.pop()):(e.push(b),b=null);k(e,function(b){d=Kc[b];c+=d?d(a):b})}return c};N.json=function(a){this.$element.addClass("ng-monospace");return M(a,!0)};N.lowercase=D;N.uppercase=fb;N.html=function(a,b){return new Ia(a,b)};N.linky=function(a){if(!a)return a;for(var b=/((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/,
+c=a,d=[],e=ib(d),f,g;a=c.match(b);)f=a[0],a[2]==a[3]&&(f="mailto:"+f),g=a.index,e.chars(c.substr(0,g)),e.start("a",{href:f}),e.chars(a[0].replace(/^mailto:/,"")),e.end("a"),c=c.substring(g+a[0].length);e.chars(c);return new Ia(d.join(""))};var Nc=/^\s*[-+]?\d*(\.\d*)?\s*$/;Y.noop=ha(Z,Z);Y.json=ha(M,function(a){return ca(a||"null")});Y["boolean"]=ha(Ob,ja);Y.number=ha(Ob,function(a){if(a==null||Nc.exec(a))return a===null||a===""?null:1*a;else throw"Not a number";});Y.list=ha(function(a){return a?
+a.join(", "):a},function(a){var b=[];k((a||"").split(","),function(a){(a=ia(a))&&b.push(a)});return b});Y.trim=ha(function(a){return a?ia(""+a):""});Y.index=ha(function(a,b){return""+na(b||[],a)},function(a,b){return(b||[])[a]});n(Va,{noop:function(){return null},regexp:function(a,b,c){return a.match(b)?null:c||"Value does not match expected format "+b+"."},number:function(a,b,c){var d=1*a;if(d==a){if(typeof b!=$&&d<b)return"Value can not be less than "+b+".";if(typeof b!=$&&d>c)return"Value can not be greater than "+
+c+".";return null}else return"Not a number"},integer:function(a,b,c){if(b=Va.number(a,b,c))return b;if(!(""+a).match(/^\s*[\d+]*\s*$/)||a!=Math.round(a))return"Not a whole number";return null},date:function(a){var b=(a=/^(\d\d?)\/(\d\d?)\/(\d\d\d\d)$/.exec(a))?new Date(a[3],a[1]-1,a[2]):0;return b&&b.getFullYear()==a[3]&&b.getMonth()==a[1]-1&&b.getDate()==a[2]?null:"Value is not a date. (Expecting format: 12/31/2009)."},email:function(a){if(a.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/))return null;
+return"Email needs to be in username@host.com format."},phone:function(a){if(a.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/))return null;if(a.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/))return null;return"Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly."},url:function(a){if(a.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/))return null;return"URL needs to be in http://server[:port]/path format."},json:function(a){try{return ca(a),
+null}catch(b){return b.toString()}},asynchronous:function(a,b,c){if(a){var d=this,e=d.$element,f=e.data("$asyncValidator");f||e.data("$asyncValidator",f={inputs:{}});f.current=a;var g=f.inputs[a],h=d.$service("$invalidWidgets");g?g.inFlight?h.markInvalid(d.$element):(c||q)(g.response):(f.inputs[a]=g={inFlight:!0},h.markInvalid(d.$element),e.addClass("ng-input-indicator-wait"),b(a,function(b,c){g.response=c;g.error=b;g.inFlight=!1;f.current==a&&(e.removeClass("ng-input-indicator-wait"),h.markValid(e));
+e.data(eb)();d.$service("$updateView")()}));return g.error}}});C("$cookieStore",function(a){return{get:function(b){return ca(a[b])},put:function(b,c){a[b]=M(c)},remove:function(b){delete a[b]}}},["$cookies"]);C("$cookies",function(a){var b=this,c={},d={},e,f=!1;a.addPollFn(function(){var g=a.cookies();e!=g&&(e=g,A(g,d),A(g,c),f&&b.$eval())})();f=!0;this.$onEval(99999,function(){var b,e,f;for(b in d)z(c[b])&&a.cookies(b,E);for(b in c)e=c[b],w(e)?e!==d[b]&&(a.cookies(b,e),f=!0):x(d[b])?c[b]=d[b]:delete c[b];
+if(f)for(b in e=a.cookies(),c)c[b]!==e[b]&&(z(e[b])?delete c[b]:c[b]=e[b])});return c},["$browser"]);C("$defer",function(a,b,c){return function(d,e){a.defer(function(){try{d()}catch(a){b(a)}finally{c()}},e)}},["$browser","$exceptionHandler","$updateView"]);C("$document",function(a){return o(a.document)},["$window"]);C("$exceptionHandler",function(a){return function(b){a.error(b)}},["$log"]);C("$hover",function(a,b){var c,d,e=o(b[0].body);a.hover(function(a,b){if(b&&(d=a.attr(xa)||a.attr(ta))){c||
+(c={callout:o('<div id="ng-callout"></div>'),arrow:o("<div></div>"),title:o('<div class="ng-title"></div>'),content:o('<div class="ng-content"></div>')},c.callout.append(c.arrow),c.callout.append(c.title),c.callout.append(c.content),e.append(c.callout));var h=e[0].getBoundingClientRect(),i=a[0].getBoundingClientRect();h=h.right-i.right-10;c.title.text(a.hasClass("ng-exception")?"EXCEPTION:":"Validation error...");c.content.text(d);h<300?(c.arrow.addClass("ng-arrow-right"),c.arrow.css({left:"301px"}),
+c.callout.css({position:"fixed",left:i.left-10-300-4+"px",top:i.top-3+"px",width:"300px"})):(c.arrow.addClass("ng-arrow-left"),c.callout.css({position:"fixed",left:i.right+10+"px",top:i.top-3+"px",width:"300px"}))}else c&&(c.callout.remove(),c=null)})},["$browser","$document"],!0);C("$invalidWidgets",function(){function a(b){if(b==s.document)return!1;b=b.parentNode;return!b||a(b)}var b=[];b.markValid=function(a){a=na(b,a);a!=-1&&b.splice(a,1)};b.markInvalid=function(a){na(b,a)===-1&&b.push(a)};b.visible=
+function(){var a=0;k(b,function(b){var e=a;b=b[0].getBoundingClientRect();var f=b.height||b.bottom||0-b.top||0;a=e+((b.width||b.right||0-b.left||0)>0&&f>0?1:0)});return a};this.$onEval(99999,function(){for(var c=0;c<b.length;){var d=b[c];a(d[0])?(b.splice(c,1),d.dealoc&&d.dealoc()):c++}});return b});var Oc=/^(file|ftp|http|https):\/\/(\w+:{0,1}\w*@)?([\w\.-]*)(:([0-9]+))?(\/[^\?#]*)?(\?([^#]*))?(#(.*))?$/,Pc=/^([^\?]*)?(\?([^\?]*))?$/,Vb={http:80,https:443,ftp:21};C("$location",function(a){function b(a){if(w(a)){var b=
+n,c=i,d={},h=Oc.exec(a);if(h)d.href=a.replace(/#$/,""),d.protocol=h[1],d.host=h[3]||"",d.port=h[5]||Vb[d.protocol]||null,d.path=h[6]||"",d.search=Ka(h[8]),d.hash=h[10]||"",n(d,g(d.hash));b(c,d)}else{x(a.hash)&&n(a,w(a.hash)?g(a.hash):a.hash);n(i,a);if(x(a.hashPath||a.hashSearch))i.hash=f(i);i.href=e(i)}}function c(a,c){var d={};w(a)?(d.hashPath=a,d.hashSearch=c||{}):d.hashSearch=a;d.hash=f(d);b({hash:d})}function d(){if(!oa(i,j)){if(i.href==j.href)if(i.hash!=j.hash){var a=g(i.hash);c(a.hashPath,a.hashSearch)}else i.hash=
+f(i),i.href=e(i);b(i.href)}}function e(a){var b=ob(a.search),c=a.port==Vb[a.protocol]?null:a.port;return a.protocol+"://"+a.host+(c?":"+c:"")+a.path+(b?"?"+b:"")+(a.hash?"#"+a.hash:"")}function f(a){var b=ob(a.hashSearch);return escape(a.hashPath).replace(/%21/gi,"!").replace(/%3A/gi,":").replace(/%24/gi,"$")+(b?"?"+b:"")}function g(a){var b={},c=Pc.exec(a);if(c)b.hash=a,b.hashPath=unescape(c[1]||""),b.hashSearch=Ka(c[3]);return b}var h=this,i={update:b,updateHash:c},j={};a.onHashChange(function(){b(a.getUrl());
+A(i,j);h.$eval()})();this.$onEval(-99999,d);this.$onEval(99999,function(){d();a.getUrl()!=i.href&&(a.setUrl(i.href),A(i,j))});return i},["$browser"]);C("$log",function(a){function b(b){var d=a.console||{},e=d[b]||d.log||q;return e.apply?function(){var a=[];k(arguments,function(b){a.push(Ha(b))});return e.apply(d,a)}:e}return{log:b("log"),warn:b("warn"),info:b("info"),error:b("error")}},["$window"]);C("$resource",function(a){a=new ya(a);return F(a,a.route)},["$xhr.cache"]);C("$route",function(a,b){var c=
+{},d=[],e=function(a,b,c){var d="^"+b.replace(/[\.\\\(\)\^\$]/g,"$1")+"$",e=[],g={};k(b.split(/\W/),function(a){if(a){var b=RegExp(":"+a+"([\\W])");d.match(b)&&(d=d.replace(b,"([^/]*)$1"),e.push(a))}});var f=a.match(RegExp(d));f&&(k(e,function(a,b){g[a]=f[b+1]}),c&&this.$set(c,g));return f?g:null},f=this,g=0,h={routes:c,onChange:function(a){d.push(a);return a},parent:function(a){a&&(f=a)},when:function(a,b){if(z(a))return c;var d=c[a];d||(d=c[a]={});b&&n(d,b);g++;return d},otherwise:function(a){h.when(null,
+a)},reload:function(){g++}};this.$watch(function(){return g+a.hash},function(){var g,j,v,p,r,y;h.current=null;k(c,function(b,c){if(!v&&(v=e(a.hashPath,c)))j=b});if(j=j||c[null]){if(j.redirectTo){w(j.redirectTo)?(y={hashPath:"",hashSearch:n({},a.hashSearch,v)},k(j.redirectTo.split(":"),function(b,c){c==0?y.hashPath+=b:(p=b.match(/(\w+)(.*)/),r=p[1],y.hashPath+=v[r]||a.hashSearch[r],y.hashPath+=p[2]||"",delete y.hashSearch[r])})):y={hash:j.redirectTo(v,a.hash,a.hashPath,a.hashSearch)};a.update(y);b();
+return}g=T(f);h.current=n({},j,{scope:g,params:n({},a.hashSearch,v)})}k(d,f.$tryEval);g&&g.$become(h.current.controller)});return h},["$location","$updateView"]);ab.delay=25;C("$updateView",ab,["$browser"]);C("$window",F(s,Z,s));C("$xhr.bulk",function(a,b,c){function d(b,c,e,i){m(e)&&(i=e,e=null);var j;k(d.urls,function(a){if(m(a.match)?a.match(c):a.match.exec(c))j=a});if(j){if(!j.requests)j.requests=[];j.requests.push({method:b,url:c,data:e,callback:i})}else a(b,c,e,i)}var e=this;d.urls={};d.flush=
+function(f){k(d.urls,function(d,h){var i=d.requests;if(i&&i.length)d.requests=[],d.callbacks=[],a("POST",h,{requests:i},function(a,d){k(d,function(a,d){try{a.status==200?(i[d].callback||q)(a.status,a.response):b(i[d],a)}catch(e){c.error(e)}});(f||q)()}),e.$eval()})};this.$onEval(99999,d.flush);return d},["$xhr","$xhr.error","$log"]);C("$xhr.cache",function(a,b,c){function d(a,g,h,i,j,v){m(h)&&(i=h,h=null);if(a=="GET"){var p;if(p=d.data[g])if(v?i(200,A(p.value)):b(function(){i(200,A(p.value))}),!j)return;
+(j=e[g])?j.callbacks.push(i):(e[g]={callbacks:[i]},d.delegate(a,g,h,function(a,b){a==200&&(d.data[g]={value:b});var f=e[g].callbacks;delete e[g];k(f,function(d){try{(d||q)(a,A(b))}catch(e){c.error(e)}})}))}else d.data={},d.delegate(a,g,h,i)}var e={};d.data={};d.delegate=a;return d},["$xhr.bulk","$defer","$log"]);C("$xhr.error",function(a){return function(b,c){a.error("ERROR: XHR: "+b.url,b,c)}},["$log"]);C("$xhr",function(a,b,c,d){return function(e,f,g,h){m(g)&&(h=g,g=null);g&&I(g)&&(g=M(g));a.xhr(e,
+f,g,function(a,j){try{w(j)&&(j.match(/^\)\]\}',\n/)&&(j=j.substr(6)),/^\s*[\[\{]/.exec(j)&&/[\}\]]\s*$/.exec(j)&&(j=ca(j,!0))),200<=a&&a<300?h(a,j):b({method:e,url:f,data:g,callback:h},{status:a,body:j})}catch(k){c.error(k)}finally{d()}},{"X-XSRF-TOKEN":a.cookies()["XSRF-TOKEN"]})}},["$browser","$xhr.error","$log","$updateView"]);B("ng:init",function(a){return function(b){this.$tryEval(a,b)}});B("ng:controller",function(a){this.scope(!0);return function(){var b=qa(s,a,!0)||qa(this,a,!0);if(!b)throw"Can not find '"+
+a+"' controller.";if(!m(b))throw"Reference '"+a+"' is not a class.";this.$become(b)}});B("ng:eval",function(a){return function(b){this.$onEval(a,b)}});B("ng:bind",function(a,b){b.addClass("ng-binding");return function(b){var d=q,e=q;this.$onEval(function(){var f,g,h,i,j;i=this.hasOwnProperty(Rb)?this.$element:E;this.$element=b;g=this.$tryEval(a,function(a){f=Ha(a)});this.$element=i;if(i=g instanceof Ia)g=(h=g).html;if(!(d===g&&e==f)&&(j=g&&(g.nodeName||g.bind&&g.find),!i&&!j&&I(g)&&(g=M(g,!0)),g!=
+d||f!=e))d=g,e=f,aa(b,xa,f),f&&(g=f),i?b.html(h.get()):j?(b.html(""),b.append(g)):b.text(g==E?"":g)},b)}});var Qb={};B("ng:bind-template",function(a,b){b.addClass("ng-binding");var c=Pb(a);return function(a){var b;this.$onEval(function(){var f=c.call(this,a,!0);f!=b&&(a.text(f),b=f)},a)}});var Qc={disabled:"disabled",readonly:"readOnly",checked:"checked",selected:"selected"};B("ng:bind-attr",function(a){return function(b){var c={},d=b.data("$update")||q;this.$onEval(function(){var e=this.$eval(a),
+f=q,g;for(g in e){var h=Pb(e[g]).call(this,b),i=Qc[D(g)];c[g]!==h&&(c[g]=h,i?(ja(h)?(b.attr(i,i),b.attr("ng-"+i,h)):(b.removeAttr(i),b.removeAttr("ng-"+i)),(b.data(eb)||q)()):b.attr(g,h),f=d)}f()},b)}});B("ng:click",function(a){return n(function(b,c){var d=this;c.bind("click",function(e){d.$tryEval(a,c);b();e.stopPropagation()})},{$inject:["$updateView"]})});B("ng:submit",function(a){return n(function(b,c){var d=this;c.bind("submit",function(e){d.$tryEval(a,c);b();e.preventDefault()})},{$inject:["$updateView"]})});
+B("ng:class",bb(function(){return!0}));B("ng:class-odd",bb(function(a){return a%2===0}));B("ng:class-even",bb(function(a){return a%2===1}));B("ng:show",function(a){return function(b){this.$onEval(function(){b.css("display",ja(this.$eval(a))?"":"none")},b)}});B("ng:hide",function(a){return function(b){this.$onEval(function(){b.css("display",ja(this.$eval(a))?"none":"")},b)}});B("ng:style",function(a){return function(b){var c=Ac(b);this.$onEval(function(){var d=this.$eval(a)||{},e,f={};for(e in d)c[e]===
+E&&(c[e]=""),f[e]=d[e];for(e in c)f[e]=f[e]||c[e];b.css(f)},b)}});Ja("{{}}",function(a,b,c){var d=Ba(a);if(d.length>1||Ca(d[0])!==null)if(bc(c[0]))c.attr("ng:bind-template",a);else{var e=b,f;k(Ba(a),function(a){var b=Ca(a);b?(f=o("<span>"),f.attr("ng:bind",b)):f=o(L.createTextNode(a));S&&a.charAt(0)==" "&&(f=o("<span>&nbsp;</span>"),b=f.html(),f.text(a.substr(1)),f.html(b+f.html()));e.after(f);e=f});b.remove()}});Ja("option",function(a,b,c){D(pa(c))=="option"&&(S<=7?hb(c[0].outerHTML,{start:function(b,
+e){z(e.value)&&c.attr("value",a)}}):c[0].getAttribute("value")==null&&c.attr("value",a))});var Rc={"ng:src":"src","ng:href":"href"};nb("{{}}",function(a,b,c){if(!B(b)&&!B("@"+b)){S&&b=="src"&&(a=decodeURI(a));var d=Ba(a);if(d.length>1||Ca(d[0])!==null)c.removeAttr(b),d=ca(c.attr("ng:bind-attr")||"{}"),d[Rc[b]||b]=a,c.attr("ng:bind-attr",M(d))}});H=la("keydown change",sa,db,Ea(),!0);W=la("click",Tb,Tb,q);var Dc={text:H,textarea:H,hidden:H,password:H,button:W,submit:W,reset:W,image:W,checkbox:la("click",
+cb,function(a,b){var c=b[0];return{get:function(){return!!c.checked},set:function(a){c.checked=ja(a)}}},Ea(!1)),radio:la("click",cb,function(a,b){var c=b[0];return{get:function(){return c.checked?c.value:null},set:function(a){c.checked=a==c.value}}},function(a,b,c){var d=a.get(),e=b.get();c=c[0];c.checked=!1;c.name=this.$id+"@"+c.name;z(d)&&a.set(d=null);d==null&&e!==null&&a.set(e);b.set(d)}),"select-one":la("change",sa,db,Ea(null)),"select-multiple":la("change",sa,Sb,Ea([]))};J("input",Fa);J("textarea",
+Fa);J("button",Fa);J("select",function(a){this.descend(!0);return Fa.call(this,a)});J("option",function(){this.descend(!0);this.directives(!0);return function(a){var b=a.parent(),c=b[0].type=="select-multiple",d=b.scope(),e=sa(d,b);if(e){var f=cb(d,b),g=c?Sb(d,b):db(d,b),h=a.attr("value"),i=a.attr("ng-selected");a.data("$update",c?function(){g.set(e.get())}:function(){var b=a.attr("value"),c=a.attr("ng-selected"),d=e.get();if(i!=c||h!=b)i=c,h=b,(c||!d==null||d==E)&&f.set(b),b==d&&g.set(h)})}}});J("ng:include",
+function(a){var b=this,c=a.attr("src"),d=a.attr("scope")||"",e=a[0].getAttribute("onload")||"";if(a[0]["ng:compiled"])this.descend(!0),this.directives(!0);else return a[0]["ng:compiled"]=!0,n(function(a,g){function h(){k++}var i=this,j,k=0,p=!1;this.$watch(c,h);this.$watch(d,h);i.$onEval(function(){if(j&&!p){p=!0;try{j.$eval()}finally{p=!1}}});this.$watch(function(){return k},function(){var h=this.$eval(c),k=this.$eval(d);h?a("GET",h,null,function(a,c){g.html(c);j=k||T(i);b.compile(g)(j);i.$eval(e)},
+!1,!0):(j=null,g.html(""))})},{$inject:["$xhr.cache"]})});var Sc=J("ng:switch",function(a){var b=this,c=a.attr("on"),d=a.attr("using")||"equals",e=d.split(":"),f=Sc[e.shift()],g=a.attr("change")||"",h=[];if(!f)throw"Using expression '"+d+"' unknown.";if(!c)throw"Missing 'on' attribute.";tb(a,function(a){var c=a.attr("ng:switch-when"),d={change:g,element:a,template:b.compile(a)};if(w(c))d.when=function(a,b){var d=[b,c];k(e,function(a){d.push(a)});return f.apply(a,d)},h.unshift(d);else if(w(a.attr("ng:switch-default")))d.when=
+ua(!0),h.push(d)});k(h,function(a){a.element.remove()});a.html("");return function(a){var b=this,d;this.$watch(c,function(c){var e=!1;a.html("");d=T(b);k(h,function(b){!e&&b.when(d,c)&&(e=!0,d.$tryEval(b.change,a),b.template(d,function(b){a.append(b)}))})});b.$onEval(function(){d&&d.$eval()})}},{equals:function(a,b){return""+a==b}});J("a",function(){this.descend(!0);this.directives(!0);return function(a){a.attr("href")===""&&a.bind("click",function(a){a.preventDefault()})}});J("@ng:repeat",function(a,
+b){b.removeAttr("ng:repeat");b.replaceWith(o("<\!-- ng:repeat: "+a+" --!>"));var c=this.compile(b);return function(d){var e=a.match(/^\s*(.+)\s+in\s+(.*)\s*$/),f,g,h,i;if(!e)throw K("Expected ng:repeat in form of 'item in collection' but got '"+a+"'.");f=e[1];g=e[2];e=f.match(/^([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\)$/);if(!e)throw K("'item' in 'item in collection' should be identifier or (key, value) but got '"+keyValue+"'.");h=e[3]||e[1];i=e[2];var j=[],k=this;this.$onEval(function(){var a=0,e=
+j.length,f=d,l=this.$tryEval(g,d),n=jb(l,!0),t=b[0].nodeName!="OPTION"?L.createDocumentFragment():null,s,m,q;for(q in l)if(l.hasOwnProperty(q))a<e?(m=j[a],m[h]=l[q],i&&(m[i]=q),f=m.$element,m.$eval()):(m=T(k),m[h]=l[q],i&&(m[i]=q),m.$index=a,m.$position=a==0?"first":a==n-1?"last":"middle",j.push(m),c(m,function(b){b.attr("ng:repeat-index",a);t?(t.appendChild(b[0]),s=!0):(f.after(b),f=b)})),a++;for(s&&f.after(o(t));j.length>a;)j.pop().$element.remove()},d)}});J("@ng:non-bindable",q);J("ng:view",function(a){var b=
+this;if(a[0]["ng:compiled"])this.descend(!0),this.directives(!0);else return a[0]["ng:compiled"]=!0,n(function(a,d,e){var f;d.onChange(function(){var g;if(d.current)g=d.current.template,f=d.current.scope;g?a("GET",g,null,function(a,c){e.html(c);b.compile(e)(f)},!1,!0):e.html("")})();this.$onEval(function(){f&&f.$eval()})},{$inject:["$xhr.cache","$route"]})});var X;Ta("$browser",function(a){if(!X){X=new qc(s,o(s.document),o(s.document.body),Fc,a);var b=X.addPollFn;X.addPollFn=function(){X.addPollFn=
+b;X.startPoller(100,function(a,b){setTimeout(a,b)});return b.apply(X,arguments)};X.bind()}return X},{$inject:["$log"]});n(u,{element:o,compile:lb,scope:T,copy:A,extend:n,equals:oa,forEach:k,injector:zb,noop:q,bind:F,toJson:M,fromJson:ca,identity:Z,isUndefined:z,isDefined:x,isString:w,isFunction:m,isObject:I,isNumber:ma,isArray:Q});pb();Na(L).ready(function(){var a=dc(L),b=L,c=a.autobind;c&&(b=w(c)?b.getElementById(c):b,b=lb(b)(T({$config:a})).$service("$browser"),a.css?b.addCss(a.base_url+a.css):
+S<8&&b.addJs(a.base_url+a.ie_compat,a.ie_compat_id))})})(window,document);angular.element(document).find("head").append('<style type="text/css">@charset "UTF-8";.ng-format-negative{color:red;}.ng-exception{border:2px solid #FF0000;font-family:"Courier New",Courier,monospace;font-size:smaller;white-space:pre;}.ng-validation-error{border:2px solid #FF0000;}#ng-callout{margin:0;padding:0;border:0;outline:0;font-size:13px;font-weight:normal;font-family:Verdana,Arial,Helvetica,sans-serif;vertical-align:baseline;background:transparent;text-decoration:none;}#ng-callout .ng-arrow-left{background-image:url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrSLoc/AG8FeUUIN+sGebWAnbKSJodqqlsOxJtqYooU9vvk+vcJIcTkg+QAAA7");background-repeat:no-repeat;background-position:left top;position:absolute;z-index:101;left:-12px;height:23px;width:10px;top:-3px;}#ng-callout .ng-arrow-right{background-image:url("data:image/gif;base64,R0lGODlhCwAXAKIAAMzMzO/v7/f39////////wAAAAAAAAAAACH5BAUUAAQALAAAAAALABcAAAMrCLTcoM29yN6k9socs91e5X3EyJloipYrO4ohTMqA0Fn2XVNswJe+H+SXAAA7");background-repeat:no-repeat;background-position:left top;position:absolute;z-index:101;height:23px;width:11px;top:-2px;}#ng-callout{position:absolute;z-index:100;border:2px solid #CCCCCC;background-color:#fff;}#ng-callout .ng-content{padding:10px 10px 10px 10px;color:#333333;}#ng-callout .ng-title{background-color:#CCCCCC;text-align:left;padding-left:8px;padding-bottom:5px;padding-top:2px;font-weight:bold;}.ng-input-indicator-wait{background-image:url("data:image/png;base64,R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==");background-position:right;background-repeat:no-repeat;}</style>');
index 558e71e..fc31806 100644 (file)
@@ -111,7 +111,7 @@ function MockBrowser() {
       throw new Error("Unexpected request for method '" + method + "' and url '" + url + "'.");
     }
     requests.push(function(){
-      forEach(expectation.headers, function(value, key){
+      angular.forEach(expectation.headers, function(value, key){
         if (headers[key] !== value) {
           throw new Error("Missing HTTP request header: " + key + ": " + value);
         }
index d3400ba..ed6ff69 100644 (file)
@@ -6317,9 +6317,7 @@ if ('i' !== 'I'.toLowerCase()) {
 function fromCharCode(code) { return String.fromCharCode(code); }
 
 
-var _undefined        = undefined,
-    _null             = null,
-    $$element         = '$element',
+var $$element         = '$element',
     $$update          = '$update',
     $$scope           = '$scope',
     $$validate        = '$validate',
@@ -6580,7 +6578,7 @@ function isDefined(value){ return typeof value != $undefined; }
  * @param {*} value Reference to check.
  * @returns {boolean} True if `value` is an `Object` but not `null`.
  */
-function isObject(value){ return value!=_null && typeof value == $object;}
+function isObject(value){ return value!=null && typeof value == $object;}
 
 
 /**
@@ -6728,12 +6726,14 @@ function map(obj, iterator, context) {
  * @function
  *
  * @description
- * Determines the number of elements in an array or number of properties of an object.
+ * Determines the number of elements in an array, number of properties of an object or string
+ * length.
  *
  * Note: this function is used to augment the Object type in angular expressions. See
  * {@link angular.Object} for more info.
  *
- * @param {Object|Array} obj Object or array to inspect.
+ * @param {Object|Array|string} obj Object, array or string to inspect.
+ * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object
  * @returns {number} The size of `obj` or `0` if `obj` is neither an object or an array.
  *
  * @example
@@ -6750,18 +6750,21 @@ function map(obj, iterator, context) {
  *  </doc:scenario>
  * </doc:example>
  */
-function size(obj) {
+function size(obj, ownPropsOnly) {
   var size = 0, key;
-  if (obj) {
-    if (isNumber(obj.length)) {
-      return obj.length;
-    } else if (isObject(obj)){
-      for (key in obj)
+
+  if (isArray(obj) || isString(obj)) {
+    return obj.length;
+  } else if (isObject(obj)){
+    for (key in obj)
+      if (!ownPropsOnly || obj.hasOwnProperty(key))
         size++;
-    }
   }
+
   return size;
 }
+
+
 function includes(array, obj) {
   for ( var i = 0; i < array.length; i++) {
     if (obj === array[i]) return true;
@@ -6964,10 +6967,19 @@ function isRenderableElement(element) {
   return name && name.charAt(0) != '#' &&
     !includes(['TR', 'COL', 'COLGROUP', 'TBODY', 'THEAD', 'TFOOT'], name);
 }
+
 function elementError(element, type, error) {
+  var parent;
+
   while (!isRenderableElement(element)) {
-    element = element.parent() || jqLite(document.body);
+    parent = element.parent();
+    if (parent.length) {
+      element = element.parent();
+    } else {
+      return;
+    }
   }
+
   if (element[0]['$NG_ERROR'] !== error) {
     element[0]['$NG_ERROR'] = error;
     if (error) {
@@ -7073,20 +7085,44 @@ function toKeyValue(obj) {
 
 /**
  * we need our custom mehtod because encodeURIComponent is too agressive and doesn't follow
- * http://www.ietf.org/rfc/rfc2396.txt with regards to the character set (pchar) allowed in path
- * segments
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ *    segment       = *pchar
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
  */
 function encodeUriSegment(val) {
+  return encodeUriQuery(val, true).
+             replace(/%26/gi, '&').
+             replace(/%3D/gi, '=').
+             replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method becuase encodeURIComponent is too agressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ *    query       = *( pchar / "/" / "?" )
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
   return encodeURIComponent(val).
              replace(/%40/gi, '@').
              replace(/%3A/gi, ':').
-             replace(/%26/gi, '&').
-             replace(/%3D/gi, '=').
-             replace(/%2B/gi, '+').
              replace(/%24/g, '$').
-             replace(/%2C/gi, ',');
+             replace(/%2C/gi, ',').
+             replace((pctEncodeSpaces ? null : /%20/g), '+');
 }
 
+
 /**
  * @workInProgress
  * @ngdoc directive
@@ -7294,11 +7330,11 @@ function assertArg(arg, name, reason) {
     if (window.console) window.console.log(error.stack);
     throw error;
   }
-};
+}
 
 function assertArgFn(arg, name) {
   assertArg(isFunction(arg, name, 'not a function'));
-};
+}
 var array = [].constructor;
 
 /**
@@ -7316,7 +7352,7 @@ var array = [].constructor;
  */
 function toJson(obj, pretty) {
   var buf = [];
-  toJsonArray(buf, obj, pretty ? "\n  " : _null, []);
+  toJsonArray(buf, obj, pretty ? "\n  " : null, []);
   return buf.join('');
 }
 
@@ -7388,7 +7424,7 @@ function toJsonArray(buf, obj, pretty, stack) {
     }
     stack.push(obj);
   }
-  if (obj === _null) {
+  if (obj === null) {
     buf.push($null);
   } else if (obj instanceof RegExp) {
     buf.push(angular['String']['quoteUnicode'](obj.toString()));
@@ -7429,7 +7465,7 @@ function toJsonArray(buf, obj, pretty, stack) {
       var childPretty = pretty ? pretty + "  " : false;
       var keys = [];
       for(var k in obj) {
-        if (obj[k] === _undefined)
+        if (obj[k] === undefined)
           continue;
         keys.push(k);
       }
@@ -7787,7 +7823,7 @@ Compiler.prototype = {
         template.addChild(i, self.templatize(child, i, priority));
       });
     }
-    return template.empty() ? _null : template;
+    return template.empty() ? null : template;
   }
 };
 
@@ -7831,7 +7867,7 @@ function getter(instance, path, unboundFn) {
     if (isUndefined(instance)  && key.charAt(0) == '$') {
       var type = angular['Global']['typeOf'](lastInstance);
       type = angular[type.charAt(0).toUpperCase()+type.substring(1)];
-      var fn = type ? type[[key.substring(1)]] : _undefined;
+      var fn = type ? type[[key.substring(1)]] : undefined;
       if (fn) {
         instance = bind(lastInstance, fn, lastInstance);
         return instance;
@@ -8535,7 +8571,7 @@ function createInjector(providerScope, providers, cache) {
 }
 
 function injectService(services, fn) {
-  return extend(fn, {$inject:services});;
+  return extend(fn, {$inject:services});
 }
 
 function injectUpdateView(fn) {
@@ -8574,9 +8610,9 @@ function injectionArgs(fn) {
     });
   }
   return fn.$inject;
-};
+}
 var OPERATORS = {
-    'null':function(self){return _null;},
+    'null':function(self){return null;},
     'true':function(self){return true;},
     'false':function(self){return false;},
     $undefined:noop,
@@ -8939,7 +8975,6 @@ function parser(text, json){
     var token = expect();
     var formatter = angularFormatter[token.text];
     var argFns = [];
-    var token;
     if (!formatter) throwError('is not a valid formatter.', token);
     while(true) {
       if ((token = expect(':'))) {
@@ -9143,7 +9178,7 @@ function parser(text, json){
       function (self){
         var o = obj(self);
         var i = indexFn(self);
-        return (o) ? o[i] : _undefined;
+        return (o) ? o[i] : undefined;
       }, {
         assign:function(self, value){
           return obj(self)[indexFn(self)] = value;
@@ -9272,14 +9307,14 @@ Route.prototype = {
 
     params = params || {};
     forEach(this.urlParams, function(_, urlParam){
-      encodedVal = encodeUriSegment(params[urlParam] || self.defaults[urlParam] || "")
+      encodedVal = encodeUriSegment(params[urlParam] || self.defaults[urlParam] || "");
       url = url.replace(new RegExp(":" + urlParam + "(\\W)"), encodedVal + "$1");
     });
     url = url.replace(/\/?#$/, '');
     var query = [];
     forEachSorted(params, function(value, key){
       if (!self.urlParams[key]) {
-        query.push(encodeUriSegment(key) + '=' + encodeUriSegment(value));
+        query.push(encodeUriQuery(key) + '=' + encodeUriQuery(value));
       }
     });
     url = url.replace(/\/*$/, '');
@@ -9350,13 +9385,15 @@ ResourceFactory.prototype = {
           data,
           function(status, response, clear) {
             if (status == 200) {
-              if (action.isArray) {
-                value.length = 0;
-                forEach(response, function(item){
-                  value.push(new Resource(item));
-                });
-              } else {
-                copy(response, value);
+              if (response) {
+                if (action.isArray) {
+                  value.length = 0;
+                  forEach(response, function(item){
+                    value.push(new Resource(item));
+                  });
+                } else {
+                  copy(response, value);
+                }
               }
               (callback||noop)(value);
             } else {
@@ -9381,7 +9418,7 @@ ResourceFactory.prototype = {
         default:
           throw "Expected between 1-2 arguments [params, callback], got " + arguments.length + " arguments.";
         }
-        var data = isPostOrPut ? this : _undefined;
+        var data = isPostOrPut ? this : undefined;
         Resource[name].call(this, params, data, callback);
       };
     });
@@ -9485,7 +9522,7 @@ function Browser(window, document, body, XHR, $log) {
       var script = jqLite('<script>')
           .attr({type: 'text/javascript', src: url.replace('JSON_CALLBACK', callbackId)});
       window[callbackId] = function(data){
-        window[callbackId] = _undefined;
+        window[callbackId] = undefined;
         script.remove();
         completeOutstandingRequest(callback, 200, data);
       };
@@ -9680,7 +9717,7 @@ function Browser(window, document, body, XHR, $log) {
     var cookieLength, cookieArray, cookie, i, keyValue, index;
 
     if (name) {
-      if (value === _undefined) {
+      if (value === undefined) {
         rawDocument.cookie = escape(name) + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
       } else {
         if (isString(value)) {
@@ -10164,7 +10201,7 @@ function JQLite(element) {
     div.innerHTML = '<div>&nbsp;</div>' + element; // IE insanity to make NoScope elements work!
     div.removeChild(div.firstChild); // remove the superfluous div
     JQLiteAddNodes(this, div.childNodes);
-    this.remove(); // detach the elements form the temporary DOM div.
+    this.remove(); // detach the elements from the temporary DOM div.
   } else {
     JQLiteAddNodes(this, element);
   }
@@ -10203,7 +10240,7 @@ function JQLiteData(element, key, value) {
     }
     cache[key] = value;
   } else {
-    return cache ? cache[key] : _null;
+    return cache ? cache[key] : null;
   }
 }
 
@@ -10234,8 +10271,7 @@ function JQLiteAddNodes(root, elements) {
       ? elements
       : [ elements ];
     for(var i=0; i < elements.length; i++) {
-      if (elements[i].nodeType != 11)
-        root.push(elements[i]);
+      root.push(elements[i]);
     }
   }
 }
@@ -10349,11 +10385,13 @@ forEach({
    * Properties: writes return selection, reads return first value
    */
   JQLite.prototype[name] = function(arg1, arg2) {
+    var i, key;
+
     if ((fn.length == 2 ? arg1 : arg2) === undefined) {
       if (isObject(arg1)) {
         // we are a write, but the object properties are the key/values
-        for(var i=0; i < this.length; i++) {
-          for ( var key in arg1) {
+        for(i=0; i < this.length; i++) {
+          for (key in arg1) {
             fn(this[i], key, arg1[key]);
           }
         }
@@ -10366,7 +10404,7 @@ forEach({
       }
     } else {
       // we are a write, so apply to all children
-      for(var i=0; i < this.length; i++) {
+      for(i=0; i < this.length; i++) {
         fn(this[i], arg1, arg2);
       }
       // return self for chaining
@@ -10439,7 +10477,8 @@ forEach({
 
   append: function(element, node) {
     forEach(new JQLite(node), function(child){
-      element.appendChild(child);
+      if (element.nodeType === 1)
+        element.appendChild(child);
     });
   },
 
@@ -10468,8 +10507,8 @@ forEach({
   },
 
   parent: function(element) {
-    // in IE it returns undefined, but we need differentiate it from functions which have no return
-    return element.parentNode || null;
+    var parent = element.parentNode;
+    return parent && parent.nodeType !== 11 ? parent : null;
   },
 
   next: function(element) {
@@ -10503,7 +10542,7 @@ forEach({
 });
 var angularGlobal = {
   'typeOf':function(obj){
-    if (obj === _null) return $null;
+    if (obj === null) return $null;
     var type = typeof obj;
     if (type == $object) {
       if (obj instanceof Array) return $array;
@@ -11815,7 +11854,7 @@ angularFilter.linky = function(text){
 };
 function formatter(format, parse) {return {'format':format, 'parse':parse || format};}
 function toString(obj) {
-  return (isDefined(obj) && obj !== _null) ? "" + obj : obj;
+  return (isDefined(obj) && obj !== null) ? "" + obj : obj;
 }
 
 var NUMBER = /^\s*[-+]?\d*(\.\d*)?\s*$/;
@@ -11909,8 +11948,8 @@ angularFormatter['boolean'] = formatter(toString, toBoolean);
    </doc:example>
  */
 angularFormatter.number = formatter(toString, function(obj){
-  if (obj == _null || NUMBER.exec(obj)) {
-    return obj===_null || obj === '' ? _null : 1*obj;
+  if (obj == null || NUMBER.exec(obj)) {
+    return obj===null || obj === '' ? null : 1*obj;
   } else {
     throw "Not a number";
   }
@@ -12051,7 +12090,7 @@ angularFormatter.index = formatter(
   }
 );
 extend(angularValidator, {
-  'noop': function() { return _null; },
+  'noop': function() { return null; },
 
   /**
    * @workInProgress
@@ -12094,7 +12133,7 @@ extend(angularValidator, {
       return msg ||
         "Value does not match expected format " + regexp + ".";
     } else {
-      return _null;
+      return null;
     }
   },
 
@@ -12146,7 +12185,7 @@ extend(angularValidator, {
       if (typeof min != $undefined && num > max) {
         return "Value can not be greater than " + max + ".";
       }
-      return _null;
+      return null;
     } else {
       return "Not a number";
     }
@@ -12196,7 +12235,7 @@ extend(angularValidator, {
     if (!("" + value).match(/^\s*[\d+]*\s*$/) || value != Math.round(value)) {
       return "Not a whole number";
     }
-    return _null;
+    return null;
   },
 
   /**
@@ -12234,7 +12273,7 @@ extend(angularValidator, {
             date.getFullYear() == fields[3] &&
             date.getMonth() == fields[1]-1 &&
             date.getDate() == fields[2])
-              ? _null 
+              ? null
               : "Value is not a date. (Expecting format: 12/31/2009).";
   },
 
@@ -12267,7 +12306,7 @@ extend(angularValidator, {
    */
   'email': function(value) {
     if (value.match(/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/)) {
-      return _null;
+      return null;
     }
     return "Email needs to be in username@host.com format.";
   },
@@ -12301,10 +12340,10 @@ extend(angularValidator, {
    */
   'phone': function(value) {
     if (value.match(/^1\(\d\d\d\)\d\d\d-\d\d\d\d$/)) {
-      return _null;
+      return null;
     }
     if (value.match(/^\+\d{2,3} (\(\d{1,5}\))?[\d ]+\d$/)) {
-      return _null;
+      return null;
     }
     return "Phone number needs to be in 1(987)654-3210 format in North America or +999 (123) 45678 906 internationaly.";
   },
@@ -12338,7 +12377,7 @@ extend(angularValidator, {
    */
   'url': function(value) {
     if (value.match(/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/)) {
-      return _null;
+      return null;
     }
     return "URL needs to be in http://server[:port]/path format.";
   },
@@ -12374,7 +12413,7 @@ extend(angularValidator, {
   'json': function(value) {
     try {
       fromJson(value);
-      return _null;
+      return null;
     } catch (e) {
       return e.toString();
     }
@@ -12616,7 +12655,7 @@ angularServiceInject('$cookies', function($browser) {
     //delete any cookies deleted in $cookies
     for (name in lastCookies) {
       if (isUndefined(cookies[name])) {
-        $browser.cookies(name, _undefined);
+        $browser.cookies(name, undefined);
       }
     }
 
@@ -12772,7 +12811,7 @@ angularServiceInject("$hover", function(browser, document) {
       }
     } else if (tooltip) {
       tooltip.callout.remove();
-      tooltip = _null;
+      tooltip = null;
     }
   });
 }, ['$browser', '$document'], true);
@@ -13044,7 +13083,7 @@ angularServiceInject("$location", function($browser) {
    */
   function composeHref(loc) {
     var url = toKeyValue(loc.search);
-    var port = (loc.port == DEFAULT_PORTS[loc.protocol] ? _null : loc.port);
+    var port = (loc.port == DEFAULT_PORTS[loc.protocol] ? null : loc.port);
 
     return loc.protocol  + '://' + loc.host +
           (port ? ':' + port : '') + loc.path +
@@ -13078,7 +13117,7 @@ angularServiceInject("$location", function($browser) {
       loc.href = href.replace(/#$/, '');
       loc.protocol = match[1];
       loc.host = match[3] || '';
-      loc.port = match[5] || DEFAULT_PORTS[loc.protocol] || _null;
+      loc.port = match[5] || DEFAULT_PORTS[loc.protocol] || null;
       loc.path = match[6] || '';
       loc.search = parseKeyValue(match[8]);
       loc.hash = match[10] || '';
@@ -13601,14 +13640,14 @@ angularServiceInject('$route', function(location, $updateView) {
       });
       if (dstName) this.$set(dstName, dst);
     }
-    return match ? dst : _null;
+    return match ? dst : null;
   }
 
 
   function updateRoute(){
     var childScope, routeParams, pathParams, segmentMatch, key, redir;
 
-    $route.current = _null;
+    $route.current = null;
     forEach(routes, function(rParams, rPath) {
       if (!pathParams) {
         if (pathParams = matcher(location.hashPath, rPath)) {
@@ -13618,7 +13657,7 @@ angularServiceInject('$route', function(location, $updateView) {
     });
 
     // "otherwise" fallback
-    routeParams = routeParams || routes[_null];
+    routeParams = routeParams || routes[null];
 
     if(routeParams) {
       if (routeParams.redirectTo) {
@@ -13771,7 +13810,7 @@ angularServiceInject('$xhr.bulk', function($xhr, $error, $log){
   function bulkXHR(method, url, post, callback) {
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     var currentQueue;
     forEach(bulkXHR.urls, function(queue){
@@ -13836,18 +13875,25 @@ angularServiceInject('$xhr.bulk', function($xhr, $error, $log){
  * @param {boolean=} [verifyCache=false] If `true` then a result is immediately returned from cache
  *   (if present) while a request is sent to the server for a fresh response that will update the
  *   cached entry. The `callback` function will be called when the response is received.
+ * @param {boolean=} [sync=false] in case of cache hit execute `callback` synchronously.
  */
 angularServiceInject('$xhr.cache', function($xhr, $defer, $log){
   var inflight = {}, self = this;
-  function cache(method, url, post, callback, verifyCache){
+  function cache(method, url, post, callback, verifyCache, sync){
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     if (method == 'GET') {
       var data, dataCached;
       if (dataCached = cache.data[url]) {
-        $defer(function() { callback(200, copy(dataCached.value)); });
+
+        if (sync) {
+          callback(200, copy(dataCached.value));
+        } else {
+          $defer(function() { callback(200, copy(dataCached.value)); });
+        }
+
         if (!verifyCache)
           return;
       }
@@ -14052,7 +14098,7 @@ angularServiceInject('$xhr', function($browser, $error, $log, $updateView){
   return function(method, url, post, callback){
     if (isFunction(post)) {
       callback = post;
-      post = _null;
+      post = null;
     }
     if (post && isObject(post)) {
       post = toJson(post);
@@ -14287,7 +14333,7 @@ angularDirective("ng:bind", function(expression, element){
     var lastValue = noop, lastError = noop;
     this.$onEval(function() {
       var error, value, html, isHtml, isDomElement,
-          oldElement = this.hasOwnProperty($$element) ? this.$element : _undefined;
+          oldElement = this.hasOwnProperty($$element) ? this.$element : undefined;
       this.$element = element;
       value = this.$tryEval(expression, function(e){
         error = formatError(e);
@@ -14314,7 +14360,7 @@ angularDirective("ng:bind", function(expression, element){
           element.html('');
           element.append(value);
         } else {
-          element.text(value == _undefined ? '' : value);
+          element.text(value == undefined ? '' : value);
         }
       }
     }, element);
@@ -14342,7 +14388,7 @@ function compileBindTemplate(template){
     });
     bindTemplateCache[template] = fn = function(element, prettyPrintJson){
       var parts = [], self = this,
-         oldElement = this.hasOwnProperty($$element) ? self.$element : _undefined;
+         oldElement = this.hasOwnProperty($$element) ? self.$element : undefined;
       self.$element = element;
       for ( var i = 0; i < bindings.length; i++) {
         var value = bindings[i].call(self, element);
@@ -14852,7 +14898,7 @@ angularDirective("ng:style", function(expression, element){
     this.$onEval(function(){
       var style = this.$eval(expression) || {}, key, mergedStyle = {};
       for(key in style) {
-        if (resetStyle[key] === _undefined) resetStyle[key] = '';
+        if (resetStyle[key] === undefined) resetStyle[key] = '';
         mergedStyle[key] = style[key];
       }
       for(key in resetStyle) {
@@ -14885,11 +14931,11 @@ function parseBindings(string) {
 
 function binding(string) {
   var binding = string.replace(/\n/gm, ' ').match(/^\{\{(.*)\}\}$/);
-  return binding ? binding[1] : _null;
+  return binding ? binding[1] : null;
 }
 
 function hasBindings(bindings) {
-  return bindings.length > 1 || binding(bindings[0]) !== _null;
+  return bindings.length > 1 || binding(bindings[0]) !== null;
 }
 
 angularTextMarkup('{{}}', function(text, textNode, parentElement) {
@@ -15164,7 +15210,7 @@ function modelAccessor(scope, element) {
         return scope.$eval(expr);
       },
       set: function(value) {
-        if (value !== _undefined) {
+        if (value !== undefined) {
           return scope.$tryEval(function(){
             assign(scope, value);
           }, element);
@@ -15326,7 +15372,7 @@ function valueAccessor(scope, element) {
   return {
     get: function(){
       if (lastError)
-        elementError(element, NG_VALIDATION_ERROR, _null);
+        elementError(element, NG_VALIDATION_ERROR, null);
       try {
         var value = parse(scope, element.val());
         validate();
@@ -15349,13 +15395,13 @@ function valueAccessor(scope, element) {
   function validate() {
     var value = trim(element.val());
     if (element[0].disabled || element[0].readOnly) {
-      elementError(element, NG_VALIDATION_ERROR, _null);
+      elementError(element, NG_VALIDATION_ERROR, null);
       invalidWidgets.markValid(element);
     } else {
       var error, validateScope = inherit(scope, {$element:element});
       error = required && !value
               ? 'Required'
-              : (value ? validator(validateScope, value) : _null);
+              : (value ? validator(validateScope, value) : null);
       elementError(element, NG_VALIDATION_ERROR, error);
       lastError = error;
       if (error) {
@@ -15383,7 +15429,7 @@ function radioAccessor(scope, element) {
   var domElement = element[0];
   return {
     get: function(){
-      return domElement.checked ? domElement.value : _null;
+      return domElement.checked ? domElement.value : null;
     },
     set: function(value){
       domElement.checked = value == domElement.value;
@@ -15441,7 +15487,7 @@ var textWidget = inputWidget('keydown change', modelAccessor, valueAccessor, ini
       'image':           buttonWidget,
       'checkbox':        inputWidget('click', modelFormattedAccessor, checkedAccessor, initWidgetValue(false)),
       'radio':           inputWidget('click', modelFormattedAccessor, radioAccessor, radioInit),
-      'select-one':      inputWidget('change', modelAccessor, valueAccessor, initWidgetValue(_null)),
+      'select-one':      inputWidget('change', modelAccessor, valueAccessor, initWidgetValue(null)),
       'select-multiple': inputWidget('change', modelAccessor, optionsAccessor, initWidgetValue([]))
 //      'file':            fileWidget???
     };
@@ -15464,9 +15510,9 @@ function radioInit(model, view, element) {
  input.checked = false;
  input.name = this.$id + '@' + input.name;
  if (isUndefined(modelValue)) {
-   model.set(modelValue = _null);
+   model.set(modelValue = null);
  }
- if (modelValue == _null && viewValue !== _null) {
+ if (modelValue == null && viewValue !== null) {
    model.set(viewValue);
  }
  view.set(modelValue);
@@ -15689,12 +15735,12 @@ angularWidget('ng:include', function(element){
             useScope = this.$eval(scopeExp);
 
         if (src) {
-          xhr('GET', src, function(code, response){
+          xhr('GET', src, null, function(code, response){
             element.html(response);
             childScope = useScope || createScope(scope);
             compiler.compile(element)(childScope);
             scope.$eval(onloadExp);
-          });
+          }, false, true);
         } else {
           childScope = null;
           element.html('');
@@ -15929,19 +15975,12 @@ angularWidget('@ng:repeat', function(expression, element){
           childCount = children.length,
           lastIterElement = iterStartElement,
           collection = this.$tryEval(rhs, iterStartElement),
-          is_array = isArray(collection),
-          collectionLength = 0,
+          collectionLength = size(collection, true),
+          fragment = (element[0].nodeName != 'OPTION') ? document.createDocumentFragment() : null,
+          addFragment,
           childScope,
           key;
 
-      if (is_array) {
-        collectionLength = collection.length;
-      } else {
-        for (key in collection)
-          if (collection.hasOwnProperty(key))
-            collectionLength++;
-      }
-
       for (key in collection) {
         if (collection.hasOwnProperty(key)) {
           if (index < childCount) {
@@ -15950,6 +15989,7 @@ angularWidget('@ng:repeat', function(expression, element){
             childScope[valueIdent] = collection[key];
             if (keyIdent) childScope[keyIdent] = key;
             lastIterElement = childScope.$element;
+            childScope.$eval();
           } else {
             // grow children
             childScope = createScope(currentScope);
@@ -15962,14 +16002,26 @@ angularWidget('@ng:repeat', function(expression, element){
             children.push(childScope);
             linker(childScope, function(clone){
               clone.attr('ng:repeat-index', index);
-              lastIterElement.after(clone);
-              lastIterElement = clone;
+
+              if (fragment) {
+                fragment.appendChild(clone[0]);
+                addFragment = true;
+              } else {
+                //temporarily preserve old way for option element
+                lastIterElement.after(clone);
+                lastIterElement = clone;
+              }
             });
           }
-          childScope.$eval();
           index ++;
         }
       }
+
+      //attach new nodes buffered in doc fragment
+      if (addFragment) {
+        lastIterElement.after(jqLite(fragment));
+      }
+
       // shrink children
       while(children.length > index) {
         children.pop().$element.remove();
@@ -16082,10 +16134,10 @@ angularWidget('ng:view', function(element) {
         }
 
         if (src) {
-          $xhr('GET', src, function(code, response){
+          $xhr('GET', src, null, function(code, response){
             element.html(response);
             compiler.compile(element)(childScope);
-          });
+          }, false, true);
         } else {
           element.html('');
         }