react 0.13.0-alpha.1 → 0.13.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist/JSXTransformer.js +452 -360
  2. package/dist/react-with-addons.js +1407 -1021
  3. package/dist/react-with-addons.min.js +5 -6
  4. package/dist/react.js +1317 -933
  5. package/dist/react.min.js +5 -6
  6. package/lib/AutoFocusMixin.js +1 -1
  7. package/lib/BeforeInputEventPlugin.js +4 -4
  8. package/lib/CSSProperty.js +1 -1
  9. package/lib/CSSPropertyOperations.js +1 -1
  10. package/lib/CallbackQueue.js +2 -2
  11. package/lib/ChangeEventPlugin.js +1 -1
  12. package/lib/ClientReactRootIndex.js +1 -1
  13. package/lib/DOMChildrenOperations.js +6 -4
  14. package/lib/DOMProperty.js +1 -1
  15. package/lib/DOMPropertyOperations.js +1 -1
  16. package/lib/Danger.js +6 -5
  17. package/lib/DefaultEventPluginOrder.js +1 -1
  18. package/lib/EnterLeaveEventPlugin.js +1 -1
  19. package/lib/EventConstants.js +1 -1
  20. package/lib/EventPluginHub.js +9 -7
  21. package/lib/EventPluginRegistry.js +1 -1
  22. package/lib/EventPluginUtils.js +1 -1
  23. package/lib/EventPropagators.js +1 -1
  24. package/lib/FallbackCompositionState.js +6 -4
  25. package/lib/HTMLDOMPropertyConfig.js +12 -7
  26. package/lib/LinkedStateMixin.js +1 -1
  27. package/lib/LinkedValueUtils.js +3 -3
  28. package/lib/LocalEventTrapMixin.js +1 -1
  29. package/lib/MobileSafariClickEventPlugin.js +1 -1
  30. package/lib/Object.assign.js +1 -1
  31. package/lib/PooledClass.js +1 -1
  32. package/lib/React.js +4 -2
  33. package/lib/ReactBrowserComponentMixin.js +1 -1
  34. package/lib/ReactBrowserEventEmitter.js +2 -2
  35. package/lib/ReactCSSTransitionGroup.js +1 -1
  36. package/lib/ReactCSSTransitionGroupChild.js +4 -2
  37. package/lib/ReactChildReconciler.js +2 -2
  38. package/lib/ReactChildren.js +10 -8
  39. package/lib/ReactClass.js +30 -72
  40. package/lib/ReactComponent.js +10 -1
  41. package/lib/ReactComponentBase.js +126 -0
  42. package/lib/ReactComponentBrowserEnvironment.js +1 -1
  43. package/lib/ReactComponentEnvironment.js +2 -2
  44. package/lib/ReactComponentWithPureRenderMixin.js +1 -1
  45. package/lib/ReactCompositeComponent.js +90 -17
  46. package/lib/ReactContext.js +1 -1
  47. package/lib/ReactCurrentOwner.js +1 -1
  48. package/lib/ReactDOM.js +1 -1
  49. package/lib/ReactDOMButton.js +1 -1
  50. package/lib/ReactDOMComponent.js +23 -8
  51. package/lib/ReactDOMForm.js +1 -1
  52. package/lib/ReactDOMIDOperations.js +1 -1
  53. package/lib/ReactDOMImg.js +1 -1
  54. package/lib/ReactDOMInput.js +1 -1
  55. package/lib/ReactDOMOption.js +1 -1
  56. package/lib/ReactDOMSelect.js +2 -2
  57. package/lib/ReactDOMSelection.js +1 -1
  58. package/lib/ReactDOMTextComponent.js +1 -1
  59. package/lib/ReactDOMTextarea.js +1 -1
  60. package/lib/ReactDefaultBatchingStrategy.js +1 -1
  61. package/lib/ReactDefaultInjection.js +1 -1
  62. package/lib/ReactDefaultPerf.js +1 -1
  63. package/lib/ReactElement.js +5 -4
  64. package/lib/ReactElementValidator.js +91 -1
  65. package/lib/ReactEmptyComponent.js +12 -1
  66. package/lib/ReactEventEmitterMixin.js +1 -1
  67. package/lib/ReactEventListener.js +3 -3
  68. package/lib/ReactInjection.js +1 -1
  69. package/lib/ReactInputSelection.js +1 -1
  70. package/lib/ReactInstanceHandles.js +3 -2
  71. package/lib/ReactInstanceMap.js +1 -1
  72. package/lib/ReactLink.js +1 -1
  73. package/lib/ReactMarkupChecksum.js +1 -1
  74. package/lib/ReactMount.js +10 -3
  75. package/lib/ReactMultiChild.js +12 -3
  76. package/lib/ReactMultiChildUpdateTypes.js +1 -1
  77. package/lib/ReactNativeComponent.js +1 -1
  78. package/lib/ReactOwner.js +1 -1
  79. package/lib/ReactPerf.js +1 -1
  80. package/lib/ReactPropTransferer.js +2 -2
  81. package/lib/ReactPropTypeLocationNames.js +1 -1
  82. package/lib/ReactPropTypeLocations.js +1 -1
  83. package/lib/ReactPropTypes.js +13 -5
  84. package/lib/ReactPutListenerQueue.js +1 -1
  85. package/lib/ReactReconcileTransaction.js +1 -1
  86. package/lib/ReactRef.js +1 -1
  87. package/lib/ReactRootIndex.js +1 -1
  88. package/lib/ReactServerRendering.js +3 -2
  89. package/lib/ReactServerRenderingTransaction.js +1 -1
  90. package/lib/ReactStateSetters.js +1 -1
  91. package/lib/ReactTestUtils.js +1 -1
  92. package/lib/ReactTransitionChildMapping.js +1 -1
  93. package/lib/ReactTransitionEvents.js +1 -1
  94. package/lib/ReactTransitionGroup.js +1 -1
  95. package/lib/ReactUpdates.js +4 -4
  96. package/lib/ReactWithAddons.js +1 -1
  97. package/lib/SVGDOMPropertyConfig.js +1 -1
  98. package/lib/SelectEventPlugin.js +3 -3
  99. package/lib/ServerReactRootIndex.js +1 -1
  100. package/lib/SimpleEventPlugin.js +1 -1
  101. package/lib/SyntheticClipboardEvent.js +1 -2
  102. package/lib/SyntheticCompositionEvent.js +1 -2
  103. package/lib/SyntheticDragEvent.js +1 -1
  104. package/lib/SyntheticEvent.js +11 -3
  105. package/lib/SyntheticFocusEvent.js +1 -1
  106. package/lib/SyntheticInputEvent.js +1 -2
  107. package/lib/SyntheticKeyboardEvent.js +1 -1
  108. package/lib/SyntheticMouseEvent.js +1 -1
  109. package/lib/SyntheticTouchEvent.js +1 -1
  110. package/lib/SyntheticUIEvent.js +1 -1
  111. package/lib/SyntheticWheelEvent.js +1 -1
  112. package/lib/Transaction.js +3 -3
  113. package/lib/ViewportMetrics.js +1 -1
  114. package/lib/accumulate.js +1 -1
  115. package/lib/accumulateInto.js +1 -1
  116. package/lib/adler32.js +1 -1
  117. package/lib/cloneWithProps.js +1 -1
  118. package/lib/createFullPageComponent.js +1 -1
  119. package/lib/dangerousStyleValue.js +1 -1
  120. package/lib/escapeTextForBrowser.js +6 -6
  121. package/lib/findDOMNode.js +8 -9
  122. package/lib/flattenChildren.js +10 -8
  123. package/lib/forEachAccumulated.js +1 -1
  124. package/lib/getEventCharCode.js +1 -1
  125. package/lib/getEventKey.js +1 -1
  126. package/lib/getEventModifierState.js +1 -1
  127. package/lib/getEventTarget.js +1 -1
  128. package/lib/getIteratorFn.js +1 -1
  129. package/lib/getNodeForCharacterOffset.js +2 -2
  130. package/lib/getReactRootElementInContainer.js +1 -1
  131. package/lib/getTextContentAccessor.js +1 -1
  132. package/lib/instantiateReactComponent.js +1 -1
  133. package/lib/isEventSupported.js +1 -1
  134. package/lib/isTextInputElement.js +1 -1
  135. package/lib/joinClasses.js +1 -1
  136. package/lib/keyMirror.js +1 -1
  137. package/lib/memoizeStringOnly.js +4 -5
  138. package/lib/onlyChild.js +1 -1
  139. package/lib/setInnerHTML.js +12 -1
  140. package/lib/shallowEqual.js +1 -1
  141. package/lib/shouldUpdateReactComponent.js +41 -7
  142. package/lib/traverseAllChildren.js +1 -1
  143. package/lib/update.js +1 -1
  144. package/lib/warning.js +8 -1
  145. package/package.json +1 -1
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var SyntheticUIEvent = require("./SyntheticUIEvent");
16
16
 
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var SyntheticEvent = require("./SyntheticEvent");
16
16
 
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var SyntheticMouseEvent = require("./SyntheticMouseEvent");
16
16
 
@@ -9,7 +9,7 @@
9
9
  * @providesModule Transaction
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var invariant = require("./invariant");
15
15
 
@@ -203,8 +203,8 @@ var Mixin = {
203
203
  // close -- if it's still set to true in the finally block, it means
204
204
  // wrapper.close threw.
205
205
  errorThrown = true;
206
- if (initData !== Transaction.OBSERVED_ERROR) {
207
- wrapper.close && wrapper.close.call(this, initData);
206
+ if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
207
+ wrapper.close.call(this, initData);
208
208
  }
209
209
  errorThrown = false;
210
210
  } finally {
@@ -9,7 +9,7 @@
9
9
  * @providesModule ViewportMetrics
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var ViewportMetrics = {
15
15
 
package/lib/accumulate.js CHANGED
@@ -9,7 +9,7 @@
9
9
  * @providesModule accumulate
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var invariant = require("./invariant");
15
15
 
@@ -9,7 +9,7 @@
9
9
  * @providesModule accumulateInto
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var invariant = require("./invariant");
15
15
 
package/lib/adler32.js CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  /* jslint bitwise:true */
13
13
 
14
- "use strict";
14
+ 'use strict';
15
15
 
16
16
  var MOD = 65521;
17
17
 
@@ -10,7 +10,7 @@
10
10
  * @providesModule cloneWithProps
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var ReactElement = require("./ReactElement");
16
16
  var ReactPropTransferer = require("./ReactPropTransferer");
@@ -10,7 +10,7 @@
10
10
  * @typechecks
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  // Defeat circular references by requiring this directly.
16
16
  var ReactClass = require("./ReactClass");
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var CSSProperty = require("./CSSProperty");
16
16
 
@@ -10,14 +10,14 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var ESCAPE_LOOKUP = {
16
- "&": "&",
17
- ">": ">",
18
- "<": "&lt;",
19
- "\"": "&quot;",
20
- "'": "&#x27;"
16
+ '&': '&amp;',
17
+ '>': '&gt;',
18
+ '<': '&lt;',
19
+ '"': '&quot;',
20
+ '\'': '&#x27;'
21
21
  };
22
22
 
23
23
  var ESCAPE_REGEX = /[&><"']/g;
@@ -10,9 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
14
-
15
- var ReactComponent = require("./ReactComponent");
13
+ 'use strict';
16
14
  var ReactInstanceMap = require("./ReactInstanceMap");
17
15
  var ReactMount = require("./ReactMount");
18
16
 
@@ -22,7 +20,7 @@ var isNode = require("./isNode");
22
20
  /**
23
21
  * Returns the DOM node rendered by this element.
24
22
  *
25
- * @param {ReactComponent|DOMElement} element
23
+ * @param {ReactComponent|DOMElement} componentOrElement
26
24
  * @return {DOMElement} The root node of this element.
27
25
  */
28
26
  function findDOMNode(componentOrElement) {
@@ -36,12 +34,13 @@ function findDOMNode(componentOrElement) {
36
34
  return ReactMount.getNodeFromInstance(componentOrElement);
37
35
  }
38
36
  ("production" !== process.env.NODE_ENV ? invariant(
39
- !(componentOrElement.render != null && typeof(componentOrElement.render) === 'function'),
40
- 'Component contains `render` method but is not mounted in the DOM',
37
+ componentOrElement.render == null ||
38
+ typeof componentOrElement.render !== 'function',
39
+ 'Component (with keys: %s) contains `render` method ' +
40
+ 'but is not mounted in the DOM',
41
41
  Object.keys(componentOrElement)
42
- ) : invariant(
43
- !(componentOrElement.render != null && typeof(componentOrElement.render) === 'function')
44
- ));
42
+ ) : invariant(componentOrElement.render == null ||
43
+ typeof componentOrElement.render !== 'function'));
45
44
  ("production" !== process.env.NODE_ENV ? invariant(
46
45
  false,
47
46
  'Element appears to be neither ReactComponent nor DOMNode (keys: %s)',
@@ -9,7 +9,7 @@
9
9
  * @providesModule flattenChildren
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var traverseAllChildren = require("./traverseAllChildren");
15
15
  var warning = require("./warning");
@@ -23,13 +23,15 @@ function flattenSingleChildIntoContext(traverseContext, child, name) {
23
23
  // We found a component instance.
24
24
  var result = traverseContext;
25
25
  var keyUnique = !result.hasOwnProperty(name);
26
- ("production" !== process.env.NODE_ENV ? warning(
27
- keyUnique,
28
- 'flattenChildren(...): Encountered two children with the same key, ' +
29
- '`%s`. Child keys must be unique; when two children share a key, only ' +
30
- 'the first child will be used.',
31
- name
32
- ) : null);
26
+ if ("production" !== process.env.NODE_ENV) {
27
+ ("production" !== process.env.NODE_ENV ? warning(
28
+ keyUnique,
29
+ 'flattenChildren(...): Encountered two children with the same key, ' +
30
+ '`%s`. Child keys must be unique; when two children share a key, only ' +
31
+ 'the first child will be used.',
32
+ name
33
+ ) : null);
34
+ }
33
35
  if (keyUnique && child != null) {
34
36
  result[name] = child;
35
37
  }
@@ -9,7 +9,7 @@
9
9
  * @providesModule forEachAccumulated
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  /**
15
15
  * @param {array} an "accumulation" of items which is either an Array or
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /**
16
16
  * `charCode` represents the actual "character code" and is safe to use with
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var getEventCharCode = require("./getEventCharCode");
16
16
 
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /**
16
16
  * Translation from modifier key to the associated property in the event.
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /**
16
16
  * Gets the target node from a native browser event by accounting for
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /* global Symbol */
16
16
  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
@@ -9,7 +9,7 @@
9
9
  * @providesModule getNodeForCharacterOffset
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  /**
15
15
  * Given any node return the first leaf node without children.
@@ -53,7 +53,7 @@ function getNodeForCharacterOffset(root, offset) {
53
53
  var nodeEnd = 0;
54
54
 
55
55
  while (node) {
56
- if (node.nodeType == 3) {
56
+ if (node.nodeType === 3) {
57
57
  nodeEnd = nodeStart + node.textContent.length;
58
58
 
59
59
  if (nodeStart <= offset && nodeEnd >= offset) {
@@ -9,7 +9,7 @@
9
9
  * @providesModule getReactRootElementInContainer
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var DOC_NODE_TYPE = 9;
15
15
 
@@ -9,7 +9,7 @@
9
9
  * @providesModule getTextContentAccessor
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var ExecutionEnvironment = require("./ExecutionEnvironment");
15
15
 
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var ReactCompositeComponent = require("./ReactCompositeComponent");
16
16
  var ReactEmptyComponent = require("./ReactEmptyComponent");
@@ -9,7 +9,7 @@
9
9
  * @providesModule isEventSupported
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  var ExecutionEnvironment = require("./ExecutionEnvironment");
15
15
 
@@ -9,7 +9,7 @@
9
9
  * @providesModule isTextInputElement
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  /**
15
15
  * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /**
16
16
  * Combines multiple className strings into one.
package/lib/keyMirror.js CHANGED
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  var invariant = require("./invariant");
16
16
 
@@ -10,7 +10,7 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
14
 
15
15
  /**
16
16
  * Memoizes the return value of a function that accepts one string argument.
@@ -21,11 +21,10 @@
21
21
  function memoizeStringOnly(callback) {
22
22
  var cache = {};
23
23
  return function(string) {
24
- if (cache.hasOwnProperty(string)) {
25
- return cache[string];
26
- } else {
27
- return cache[string] = callback.call(this, string);
24
+ if (!cache.hasOwnProperty(string)) {
25
+ cache[string] = callback.call(this, string);
28
26
  }
27
+ return cache[string];
29
28
  };
30
29
  }
31
30
 
package/lib/onlyChild.js CHANGED
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * @providesModule onlyChild
10
10
  */
11
- "use strict";
11
+ 'use strict';
12
12
 
13
13
  var ReactElement = require("./ReactElement");
14
14
 
@@ -9,7 +9,9 @@
9
9
  * @providesModule setInnerHTML
10
10
  */
11
11
 
12
- "use strict";
12
+ /* globals MSApp */
13
+
14
+ 'use strict';
13
15
 
14
16
  var ExecutionEnvironment = require("./ExecutionEnvironment");
15
17
 
@@ -28,6 +30,15 @@ var setInnerHTML = function(node, html) {
28
30
  node.innerHTML = html;
29
31
  };
30
32
 
33
+ // Win8 apps: Allow all html to be inserted
34
+ if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
35
+ setInnerHTML = function(node, html) {
36
+ MSApp.execUnsafeLocalFunction(function() {
37
+ node.innerHTML = html;
38
+ });
39
+ };
40
+ }
41
+
31
42
  if (ExecutionEnvironment.canUseDOM) {
32
43
  // IE8: When updating a just created node with innerHTML only leading
33
44
  // whitespace is removed. When updating an existing node with innerHTML
@@ -9,7 +9,7 @@
9
9
  * @providesModule shallowEqual
10
10
  */
11
11
 
12
- "use strict";
12
+ 'use strict';
13
13
 
14
14
  /**
15
15
  * Performs equality by iterating through keys on an object and returning
@@ -10,7 +10,9 @@
10
10
  * @typechecks static-only
11
11
  */
12
12
 
13
- "use strict";
13
+ 'use strict';
14
+
15
+ var monitorCodeUse = require("./monitorCodeUse");
14
16
 
15
17
  /**
16
18
  * Given a `prevElement` and `nextElement`, determines if the existing
@@ -30,12 +32,44 @@ function shouldUpdateReactComponent(prevElement, nextElement) {
30
32
  if (prevType === 'string' || prevType === 'number') {
31
33
  return (nextType === 'string' || nextType === 'number');
32
34
  } else {
33
- return (
34
- nextType === 'object' &&
35
- prevElement.type === nextElement.type &&
36
- prevElement.key === nextElement.key &&
37
- prevElement._owner === nextElement._owner
38
- );
35
+ if (nextType === 'object' &&
36
+ prevElement.type === nextElement.type &&
37
+ prevElement.key === nextElement.key) {
38
+ var ownersMatch = prevElement._owner === nextElement._owner;
39
+ var prevName = null;
40
+ var nextName = null;
41
+ var nextDisplayName = null;
42
+ if ("production" !== process.env.NODE_ENV) {
43
+ if (!ownersMatch) {
44
+ if (prevElement._owner != null &&
45
+ prevElement._owner.getPublicInstance() != null &&
46
+ prevElement._owner.getPublicInstance().constructor != null) {
47
+ prevName =
48
+ prevElement._owner.getPublicInstance().constructor.displayName;
49
+ }
50
+ if (nextElement._owner != null &&
51
+ nextElement._owner.getPublicInstance() != null &&
52
+ nextElement._owner.getPublicInstance().constructor != null) {
53
+ nextName =
54
+ nextElement._owner.getPublicInstance().constructor.displayName;
55
+ }
56
+ if (nextElement.type != null &&
57
+ nextElement.type.displayName != null) {
58
+ nextDisplayName = nextElement.type.displayName;
59
+ }
60
+ monitorCodeUse(
61
+ 'react_should_update_owner_is_useful',
62
+ {
63
+ key: prevElement.key,
64
+ prevOwner: prevName,
65
+ nextOwner: nextName,
66
+ nextDisplayName: nextDisplayName
67
+ }
68
+ );
69
+ }
70
+ }
71
+ return ownersMatch;
72
+ }
39
73
  }
40
74
  }
41
75
  return false;