OLD | NEW |
(Empty) | |
| 1 { |
| 2 "version": 3, |
| 3 "file": "platform.concat.js", |
| 4 "sources": [ |
| 5 "../WeakMap/weakmap.js", |
| 6 "../observe-js/src/observe.js", |
| 7 "build/if-poly.js", |
| 8 "../ShadowDOM/src/wrappers.js", |
| 9 "../ShadowDOM/src/microtask.js", |
| 10 "../ShadowDOM/src/MutationObserver.js", |
| 11 "../ShadowDOM/src/wrappers/events.js", |
| 12 "../ShadowDOM/src/wrappers/NodeList.js", |
| 13 "../ShadowDOM/src/wrappers/Node.js", |
| 14 "../ShadowDOM/src/querySelector.js", |
| 15 "../ShadowDOM/src/wrappers/node-interfaces.js", |
| 16 "../ShadowDOM/src/wrappers/CharacterData.js", |
| 17 "../ShadowDOM/src/wrappers/Text.js", |
| 18 "../ShadowDOM/src/wrappers/Element.js", |
| 19 "../ShadowDOM/src/wrappers/HTMLElement.js", |
| 20 "../ShadowDOM/src/wrappers/HTMLCanvasElement.js", |
| 21 "../ShadowDOM/src/wrappers/HTMLContentElement.js", |
| 22 "../ShadowDOM/src/wrappers/HTMLImageElement.js", |
| 23 "../ShadowDOM/src/wrappers/HTMLShadowElement.js", |
| 24 "../ShadowDOM/src/wrappers/HTMLTemplateElement.js", |
| 25 "../ShadowDOM/src/wrappers/HTMLMediaElement.js", |
| 26 "../ShadowDOM/src/wrappers/HTMLAudioElement.js", |
| 27 "../ShadowDOM/src/wrappers/HTMLOptionElement.js", |
| 28 "../ShadowDOM/src/wrappers/HTMLUnknownElement.js", |
| 29 "../ShadowDOM/src/wrappers/SVGElement.js", |
| 30 "../ShadowDOM/src/wrappers/SVGUseElement.js", |
| 31 "../ShadowDOM/src/wrappers/SVGElementInstance.js", |
| 32 "../ShadowDOM/src/wrappers/CanvasRenderingContext2D.js", |
| 33 "../ShadowDOM/src/wrappers/WebGLRenderingContext.js", |
| 34 "../ShadowDOM/src/wrappers/Range.js", |
| 35 "../ShadowDOM/src/wrappers/generic.js", |
| 36 "../ShadowDOM/src/wrappers/ShadowRoot.js", |
| 37 "../ShadowDOM/src/ShadowRenderer.js", |
| 38 "../ShadowDOM/src/wrappers/elements-with-form-property.js", |
| 39 "../ShadowDOM/src/wrappers/Selection.js", |
| 40 "../ShadowDOM/src/wrappers/Document.js", |
| 41 "../ShadowDOM/src/wrappers/Window.js", |
| 42 "../ShadowDOM/src/wrappers/override-constructors.js", |
| 43 "src/patches-shadowdom-polyfill.js", |
| 44 "src/ShadowCSS.js", |
| 45 "build/else.js", |
| 46 "src/patches-shadowdom-native.js", |
| 47 "build/end-if.js", |
| 48 "../URL/url.js", |
| 49 "src/lang.js", |
| 50 "src/dom.js", |
| 51 "src/template.js", |
| 52 "src/inspector.js", |
| 53 "src/unresolved.js", |
| 54 "src/module.js", |
| 55 "src/microtask.js", |
| 56 "src/url.js", |
| 57 "../MutationObservers/MutationObserver.js", |
| 58 "../HTMLImports/src/scope.js", |
| 59 "../HTMLImports/src/Loader.js", |
| 60 "../HTMLImports/src/Parser.js", |
| 61 "../HTMLImports/src/HTMLImports.js", |
| 62 "../HTMLImports/src/Observer.js", |
| 63 "../HTMLImports/src/boot.js", |
| 64 "../CustomElements/src/scope.js", |
| 65 "../CustomElements/src/Observer.js", |
| 66 "../CustomElements/src/CustomElements.js", |
| 67 "../CustomElements/src/Parser.js", |
| 68 "../CustomElements/src/boot.js", |
| 69 "src/patches-custom-elements.js", |
| 70 "src/loader.js", |
| 71 "../PointerEvents/src/boot.js", |
| 72 "../PointerEvents/src/touch-action.js", |
| 73 "../PointerEvents/src/PointerEvent.js", |
| 74 "../PointerEvents/src/pointermap.js", |
| 75 "../PointerEvents/src/dispatcher.js", |
| 76 "../PointerEvents/src/installer.js", |
| 77 "../PointerEvents/src/mouse.js", |
| 78 "../PointerEvents/src/touch.js", |
| 79 "../PointerEvents/src/ms.js", |
| 80 "../PointerEvents/src/platform-events.js", |
| 81 "../PointerEvents/src/capture.js", |
| 82 "../PointerGestures/src/PointerGestureEvent.js", |
| 83 "../PointerGestures/src/initialize.js", |
| 84 "../PointerGestures/src/pointermap.js", |
| 85 "../PointerGestures/src/dispatcher.js", |
| 86 "../PointerGestures/src/hold.js", |
| 87 "../PointerGestures/src/track.js", |
| 88 "../PointerGestures/src/flick.js", |
| 89 "../PointerGestures/src/pinch.js", |
| 90 "../PointerGestures/src/tap.js", |
| 91 "../NodeBind/src/NodeBind.js", |
| 92 "../TemplateBinding/src/TemplateBinding.js", |
| 93 "../polymer-expressions/third_party/esprima/esprima.js", |
| 94 "../polymer-expressions/src/polymer-expressions.js", |
| 95 "src/patches-mdv.js" |
| 96 ], |
| 97 "names": [], |
| 98 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;A;AC5kDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtDA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1YA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChDA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnXA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;A;ACryBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;A;AC9sBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxEA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7IA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;A;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxCA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC1CA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;A;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtEA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;A;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzCA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9DA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9BA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACfA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7CA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACl
EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjDA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC9FA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;A;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;A;ACvpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClEA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;A;ACvTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;A;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA,oB;AC5lBA,Q;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,K;AC1DA,C;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpjBA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,oB;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;A;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACTA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC7LA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;A;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,W;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;A;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;A;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjiBA;AACA;AACA;AACA;AACA;AACA,s
D;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;A;ACrJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;A;ACzQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;A;AC9PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzDA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;A;ACvDA;AACA;AACA;AACA;AACA;AACA,4D;ACLA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;A;ACvVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0B;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACnEA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxFA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;A;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;A;AClKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACpHA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC3GA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACjVA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;A;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;A;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;A;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;A;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;A;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;A;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;A;AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;A;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACxMA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AChIA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;A;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvXA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AClnCA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;AC5gCA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACzmBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A", |
| 99 "sourcesContent": [ |
| 100 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\nif (typeof WeakMap === 'undefined') {\n (function() {\n
var defineProperty = Object.defineProperty;\n var counter = Date.now() % 1
e9;\n\n var WeakMap = function() {\n this.name = '__st' + (Math.random()
* 1e9 >>> 0) + (counter++ + '__');\n };\n\n WeakMap.prototype = {\n
set: function(key, value) {\n var entry = key[this.name];\n if (en
try && entry[0] === key)\n entry[1] = value;\n else\n d
efineProperty(key, this.name, {value: [key, value], writable: true});\n },\
n get: function(key) {\n var entry;\n return (entry = key[thi
s.name]) && entry[0] === key ?\n entry[1] : undefined;\n },\n
delete: function(key) {\n this.set(key, undefined);\n }\n };\n
\n window.WeakMap = WeakMap;\n })();\n}\n", |
| 101 "// Copyright 2012 Google Inc.\n//\n// Licensed under the Apache License, Ve
rsion 2.0 (the \"License\");\n// you may not use this file except in compliance
with the License.\n// You may obtain a copy of the License at\n//\n// http:/
/www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o
r agreed to in writing, software\n// distributed under the License is distribute
d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe
r express or implied.\n// See the License for the specific language governing pe
rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use
strict';\n\n var PROP_ADD_TYPE = 'add';\n var PROP_UPDATE_TYPE = 'update';\n
var PROP_RECONFIGURE_TYPE = 'reconfigure';\n var PROP_DELETE_TYPE = 'delete';\n
var ARRAY_SPLICE_TYPE = 'splice';\n\n // Detect and do basic sanity checking
on Object/Array.observe.\n function detectObjectObserve() {\n if (typeof Obj
ect.observe !== 'function' ||\n typeof Array.observe !== 'function') {\n
return false;\n }\n\n var records = [];\n\n function callback(recs
) {\n records = recs;\n }\n\n var test = {};\n Object.observe(test
, callback);\n test.id = 1;\n test.id = 2;\n delete test.id;\n Objec
t.deliverChangeRecords(callback);\n if (records.length !== 3)\n return f
alse;\n\n // TODO(rafaelw): Remove this when new change record type names mak
e it to\n // chrome release.\n if (records[0].type == 'new' &&\n re
cords[1].type == 'updated' &&\n records[2].type == 'deleted') {\n PR
OP_ADD_TYPE = 'new';\n PROP_UPDATE_TYPE = 'updated';\n PROP_RECONFIGUR
E_TYPE = 'reconfigured';\n PROP_DELETE_TYPE = 'deleted';\n } else if (re
cords[0].type != 'add' ||\n records[1].type != 'update' ||\n
records[2].type != 'delete') {\n console.error('Unexpected change
record names for Object.observe. ' +\n 'Using dirty-checking
instead');\n return false;\n }\n Object.unobserve(test, callback);\n\
n test = [0];\n Array.observe(test, callback);\n test[1] = 1;\n test
.length = 0;\n Object.deliverChangeRecords(callback);\n if (records.length
!= 2)\n return false;\n if (records[0].type != ARRAY_SPLICE_TYPE ||\n
records[1].type != ARRAY_SPLICE_TYPE) {\n return false;\n }\n A
rray.unobserve(test, callback);\n\n return true;\n }\n\n var hasObserve = d
etectObjectObserve();\n\n function detectEval() {\n // don't test for eval i
f document has CSP securityPolicy object and we can see that\n // eval is not
supported. This avoids an error message in console even when the exception\n
// is caught\n if (global.document &&\n 'securityPolicy' in global.do
cument &&\n !global.document.securityPolicy.allowsEval) {\n return f
alse;\n }\n\n try {\n var f = new Function('', 'return true;');\n
return f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasE
val = detectEval();\n\n function isIndex(s) {\n return +s === s >>> 0;\n }\
n\n function toNumber(s) {\n return +s;\n }\n\n function isObject(obj) {\n
return obj === Object(obj);\n }\n\n var numberIsNaN = global.Number.isNaN
|| function isNaN(value) {\n return typeof value === 'number' && global.isNaN
(value);\n }\n\n function areSameValue(left, right) {\n if (left === right)
\n return left !== 0 || 1 / left === 1 / right;\n if (numberIsNaN(left)
&& numberIsNaN(right))\n return true;\n\n return left !== left && right
!== right;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj)
{ return obj; } :\n function(obj) {\n var proto = obj.__proto__;\n
if (!proto)\n return obj;\n var newObject = Object.create(proto);\n
Object.getOwnPropertyNames(obj).forEach(function(name) {\n Object.d
efineProperty(newObject, name,\n Object.getOwnProper
tyDescriptor(obj, name));\n });\n return newObject;\n };\n\n var i
dentStart = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var ident =
identStart + '+' + identPart + '*';\n var elementIndex = '(?:[0-9]|[1-9]+[0-9]
+)';\n var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';\n v
ar path = '(?:' + identOrElementIndex + ')(?:\\\\s*\\\\.\\\\s*' + identOrElement
Index + ')*';\n var pathRegExp = new RegExp('^' + path + '$');\n\n function is
PathValid(s) {\n if (typeof s != 'string')\n return false;\n s = s.tr
im();\n\n if (s == '')\n return true;\n\n if (s[0] == '.')\n ret
urn false;\n\n return pathRegExp.test(s);\n }\n\n var constructorIsPrivate
= {};\n\n function Path(s, privateToken) {\n if (privateToken !== constructo
rIsPrivate)\n throw Error('Use Path.get to retrieve path objects');\n\n
if (s.trim() == '')\n return this;\n\n if (isIndex(s)) {\n this.pus
h(s);\n return this;\n }\n\n s.split(/\\s*\\.\\s*/).filter(function(p
art) {\n return part;\n }).forEach(function(part) {\n this.push(par
t);\n }, this);\n\n if (hasEval && this.length) {\n this.getValueFrom
= this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make simple
LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n if (p
athString instanceof Path)\n return pathString;\n\n if (pathString == nu
ll)\n pathString = '';\n\n if (typeof pathString !== 'string')\n pa
thString = String(pathString);\n\n var path = pathCache[pathString];\n if
(path)\n return path;\n if (!isPathValid(pathString))\n return inva
lidPath;\n var path = new Path(pathString, constructorIsPrivate);\n pathCa
che[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n Pat
h.prototype = createObject({\n __proto__: [],\n valid: true,\n\n toStri
ng: function() {\n return this.join('.');\n },\n\n getValueFrom: func
tion(obj, directObserver) {\n for (var i = 0; i < this.length; i++) {\n
if (obj == null)\n return;\n obj = obj[this[i]];\n }\n
return obj;\n },\n\n iterateObjects: function(obj, observe) {\n
for (var i = 0; i < this.length; i++) {\n if (i)\n obj = obj[thi
s[i - 1]];\n if (!obj)\n return;\n observe(obj);\n }
\n },\n\n compiledGetValueFromFn: function() {\n var accessors = this
.map(function(ident) {\n return isIndex(ident) ? '[\"' + ident + '\"]' :
'.' + ident;\n });\n\n var str = '';\n var pathString = 'obj';\n
str += 'if (obj != null';\n var i = 0;\n for (; i < (this.length
- 1); i++) {\n var ident = this[i];\n pathString += accessors[i];\
n str += ' &&\\n ' + pathString + ' != null';\n }\n str +=
')\\n';\n\n pathString += accessors[i];\n\n str += ' return ' + pathS
tring + ';\\nelse\\n return undefined;';\n return new Function('obj', str)
;\n },\n\n setValueFrom: function(obj, value) {\n if (!this.length)\n
return false;\n\n for (var i = 0; i < this.length - 1; i++) {\n
if (!isObject(obj))\n return false;\n obj = obj[this[i]];\n
}\n\n if (!isObject(obj))\n return false;\n\n obj[this[i]]
= value;\n return true;\n }\n });\n\n var invalidPath = new Path('',
constructorIsPrivate);\n invalidPath.valid = false;\n invalidPath.getValueFrom
= invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY_CHECK_CYCLES = 1
000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\n while (cycle
s < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycles++;\n }\n
if (global.testingExposeCycleCount)\n global.dirtyCheckCycleCount = cycles;
\n\n return cycles > 0;\n }\n\n function objectIsEmpty(object) {\n for (
var prop in object)\n return false;\n return true;\n }\n\n function di
ffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n objectIsE
mpty(diff.removed) &&\n objectIsEmpty(diff.changed);\n }\n\n functio
n diffObjectFromOldObject(object, oldObject) {\n var added = {};\n var rem
oved = {};\n var changed = {};\n\n for (var prop in oldObject) {\n va
r newValue = object[prop];\n\n if (newValue !== undefined && newValue === o
ldObject[prop])\n continue;\n\n if (!(prop in object)) {\n re
moved[prop] = undefined;\n continue;\n }\n\n if (newValue !== o
ldObject[prop])\n changed[prop] = newValue;\n }\n\n for (var prop i
n object) {\n if (prop in oldObject)\n continue;\n\n added[prop
] = object[prop];\n }\n\n if (Array.isArray(object) && object.length !== o
ldObject.length)\n changed.length = object.length;\n\n return {\n a
dded: added,\n removed: removed,\n changed: changed\n };\n }\n\n
var eomTasks = [];\n function runEOMTasks() {\n if (!eomTasks.length)\n
return false;\n\n for (var i = 0; i < eomTasks.length; i++) {\n eomTask
s[i]();\n }\n eomTasks.length = 0;\n return true;\n }\n\n var runEOM
= hasObserve ? (function(){\n var eomObj = { pingPong: true };\n var eomRu
nScheduled = false;\n\n Object.observe(eomObj, function() {\n runEOMTask
s();\n eomRunScheduled = false;\n });\n\n return function(fn) {\n
eomTasks.push(fn);\n if (!eomRunScheduled) {\n eomRunScheduled = t
rue;\n eomObj.pingPong = !eomObj.pingPong;\n }\n };\n })() :\n
(function() {\n return function(fn) {\n eomTasks.push(fn);\n };\n })
();\n\n var observedObjectCache = [];\n\n function newObservedObject() {\n
var observer;\n var object;\n var discardRecords = false;\n var first =
true;\n\n function callback(records) {\n if (observer && observer.state
_ === OPENED && !discardRecords)\n observer.check_(records);\n }\n\n
return {\n open: function(obs) {\n if (observer)\n throw
Error('ObservedObject in use');\n\n if (!first)\n Object.deliver
ChangeRecords(callback);\n\n observer = obs;\n first = false;\n
},\n observe: function(obj, arrayObserve) {\n object = obj;\n
if (arrayObserve)\n Array.observe(object, callback);\n else\
n Object.observe(object, callback);\n },\n deliver: function(
discard) {\n discardRecords = discard;\n Object.deliverChangeRecor
ds(callback);\n discardRecords = false;\n },\n close: function(
) {\n observer = undefined;\n Object.unobserve(object, callback);\
n observedObjectCache.push(this);\n }\n };\n }\n\n function get
ObservedObject(observer, object, arrayObserve) {\n var dir = observedObjectCa
che.pop() || newObservedObject();\n dir.open(observer);\n dir.observe(obje
ct, arrayObserve);\n return dir;\n }\n\n var emptyArray = [];\n var observ
edSetCache = [];\n\n function newObservedSet() {\n var observers = [];\n
var observerCount = 0;\n var objects = [];\n var toRemove = emptyArray;\n
var resetNeeded = false;\n var resetScheduled = false;\n\n function obs
erve(obj) {\n if (!isObject(obj))\n return;\n\n var index = toR
emove.indexOf(obj);\n if (index >= 0) {\n toRemove[index] = undefine
d;\n objects.push(obj);\n } else if (objects.indexOf(obj) < 0) {\n
objects.push(obj);\n Object.observe(obj, callback);\n }\n\n
observe(Object.getPrototypeOf(obj));\n }\n\n function reset() {\n
resetScheduled = false;\n if (!resetNeeded)\n return;\n\n var o
bjs = toRemove === emptyArray ? [] : toRemove;\n toRemove = objects;\n
objects = objs;\n\n var observer;\n for (var id in observers) {\n
observer = observers[id];\n if (!observer || observer.state_ != OPENE
D)\n continue;\n\n observer.iterateObjects_(observe);\n }\n
\n for (var i = 0; i < toRemove.length; i++) {\n var obj = toRemove[
i];\n if (obj)\n Object.unobserve(obj, callback);\n }\n\n
toRemove.length = 0;\n }\n\n function scheduleReset() {\n if (res
etScheduled)\n return;\n\n resetNeeded = true;\n resetScheduled
= true;\n runEOM(reset);\n }\n\n function callback() {\n var ob
server;\n\n for (var id in observers) {\n observer = observers[id];\
n if (!observer || observer.state_ != OPENED)\n continue;\n\n
observer.check_();\n }\n\n scheduleReset();\n }\n\n var rec
ord = {\n object: undefined,\n objects: objects,\n open: function
(obs) {\n observers[obs.id_] = obs;\n observerCount++;\n ob
s.iterateObjects_(observe);\n },\n close: function(obs) {\n var
anyLeft = false;\n\n observers[obs.id_] = undefined;\n observerCo
unt--;\n\n if (observerCount) {\n scheduleReset();\n re
turn;\n }\n resetNeeded = false;\n\n for (var i = 0; i < ob
jects.length; i++) {\n Object.unobserve(objects[i], callback);\n
Observer.unobservedCount++;\n }\n\n observers.length = 0;\n
objects.length = 0;\n observedSetCache.push(this);\n },\n r
eset: scheduleReset\n };\n\n return record;\n }\n\n var lastObservedSet;
\n\n function getObservedSet(observer, obj) {\n if (!lastObservedSet || last
ObservedSet.object !== obj) {\n lastObservedSet = observedSetCache.pop() ||
newObservedSet();\n lastObservedSet.object = obj;\n }\n lastObserved
Set.open(observer);\n return lastObservedSet;\n }\n\n var UNOPENED = 0;\n
var OPENED = 1;\n var CLOSED = 2;\n var RESETTING = 3;\n\n var nextObserverId
= 1;\n\n function Observer() {\n this.state_ = UNOPENED;\n this.callback
_ = undefined;\n this.target_ = undefined; // TODO(rafaelw): Should be WeakRe
f\n this.directObserver_ = undefined;\n this.value_ = undefined;\n this
.id_ = nextObserverId++;\n }\n\n Observer.prototype = {\n open: function(ca
llback, target) {\n if (this.state_ != UNOPENED)\n throw Error('Obse
rver has already been opened.');\n\n addToAll(this);\n this.callback_
= callback;\n this.target_ = target;\n this.state_ = OPENED;\n th
is.connect_();\n return this.value_;\n },\n\n close: function() {\n
if (this.state_ != OPENED)\n return;\n\n removeFromAll(this);\n
this.state_ = CLOSED;\n this.disconnect_();\n this.value_ = undef
ined;\n this.callback_ = undefined;\n this.target_ = undefined;\n }
,\n\n deliver: function() {\n if (this.state_ != OPENED)\n return
;\n\n dirtyCheck(this);\n },\n\n report_: function(changes) {\n
try {\n this.callback_.apply(this.target_, changes);\n } catch (ex)
{\n Observer._errorThrownDuringCallback = true;\n console.error('E
xception caught during observer callback: ' +\n (ex.stack
|| ex));\n }\n },\n\n discardChanges: function() {\n this.check_
(undefined, true);\n return this.value_;\n }\n }\n\n var collectObserv
ers = !hasObserve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n
if (collectObservers) {\n allObservers = [];\n }\n\n function addToAll(obs
erver) {\n Observer._allObserversCount++;\n if (!collectObservers)\n
return;\n\n allObservers.push(observer);\n }\n\n function removeFromAll(obs
erver) {\n Observer._allObserversCount--;\n }\n\n var runningMicrotaskCheck
point = false;\n\n var hasDebugForceFullDelivery = typeof Object.deliverAllChan
geRecords == 'function';\n\n global.Platform = global.Platform || {};\n\n glob
al.Platform.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskC
heckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n Object.
deliverAllChangeRecords();\n return;\n }\n\n if (!collectObservers)\n
return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n
var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = allOb
servers;\n allObservers = [];\n anyChanged = false;\n\n for (var
i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n i
f (observer.state_ != OPENED)\n continue;\n\n if (observer.check
_())\n anyChanged = true;\n\n allObservers.push(observer);\n
}\n if (runEOMTasks())\n anyChanged = true;\n } while (cycles <
MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycleCoun
t)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoin
t = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObserver
s = function() {\n allObservers = [];\n };\n }\n\n function ObjectObse
rver(object) {\n Observer.call(this);\n this.value_ = object;\n this.ol
dObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n _
_proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: funct
ion(callback, target) {\n if (hasObserve) {\n this.directObserver_ =
getObservedObject(this, this.value_,\n
this.arrayObserve);\n } else {\n this.oldObject_ = this.copy
Object(this.value_);\n }\n\n },\n\n copyObject: function(object) {\n
var copy = Array.isArray(object) ? [] : {};\n for (var prop in object)
{\n copy[prop] = object[prop];\n };\n if (Array.isArray(object
))\n copy.length = object.length;\n return copy;\n },\n\n chec
k_: function(changeRecords, skipChanges) {\n var diff;\n var oldValues
;\n if (hasObserve) {\n if (!changeRecords)\n return false;
\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this.val
ue_, changeRecords,\n oldValues);\n
} else {\n oldValues = this.oldObject_;\n diff = diffObjectFrom
OldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff)
)\n return false;\n\n if (!hasObserve)\n this.oldObject_ = th
is.copyObject(this.value_);\n\n this.report_([\n diff.added || {},\n
diff.removed || {},\n diff.changed || {},\n function(prope
rty) {\n return oldValues[property];\n }\n ]);\n\n ret
urn true;\n },\n\n disconnect_: function() {\n if (hasObserve) {\n
this.directObserver_.close();\n this.directObserver_ = undefined;\n
} else {\n this.oldObject_ = undefined;\n }\n },\n\n deli
ver: function() {\n if (this.state_ != OPENED)\n return;\n\n if
(hasObserve)\n this.directObserver_.deliver(false);\n else\n
dirtyCheck(this);\n },\n\n discardChanges: function() {\n if (this.d
irectObserver_)\n this.directObserver_.deliver(true);\n else\n
this.oldObject_ = this.copyObject(this.value_);\n\n return this.value_;\n
}\n });\n\n function ArrayObserver(array) {\n if (!Array.isArray(array)
)\n throw Error('Provided object is not an Array');\n ObjectObserver.cal
l(this, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __prot
o__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject: fun
ction(arr) {\n return arr.slice();\n },\n\n check_: function(changeRe
cords) {\n var splices;\n if (hasObserve) {\n if (!changeRecord
s)\n return false;\n splices = projectArraySplices(this.value_,
changeRecords);\n } else {\n splices = calcSplices(this.value_, 0, t
his.value_.length,\n this.oldObject_, 0, this.oldOb
ject_.length);\n }\n\n if (!splices || !splices.length)\n retur
n false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(th
is.value_);\n\n this.report_([splices]);\n return true;\n }\n });\
n\n ArrayObserver.applySplices = function(previous, current, splices) {\n sp
lices.forEach(function(splice) {\n var spliceArgs = [splice.index, splice.r
emoved.length];\n var addIndex = splice.index;\n while (addIndex < spl
ice.index + splice.addedCount) {\n spliceArgs.push(current[addIndex]);\n
addIndex++;\n }\n\n Array.prototype.splice.apply(previous, spli
ceArgs);\n });\n };\n\n function PathObserver(object, path) {\n Observer
.call(this);\n\n this.object_ = object;\n this.path_ = path instanceof Pat
h ? path : getPath(path);\n this.directObserver_ = undefined;\n }\n\n PathO
bserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n co
nnect_: function() {\n if (hasObserve)\n this.directObserver_ = getO
bservedSet(this, this.object_);\n\n this.check_(undefined, true);\n },\n
\n disconnect_: function() {\n this.value_ = undefined;\n\n if (thi
s.directObserver_) {\n this.directObserver_.close(this);\n this.di
rectObserver_ = undefined;\n }\n },\n\n iterateObjects_: function(obs
erve) {\n this.path_.iterateObjects(this.object_, observe);\n },\n\n
check_: function(changeRecords, skipChanges) {\n var oldValue = this.value_
;\n this.value_ = this.path_.getValueFrom(this.object_);\n if (skipCha
nges || areSameValue(this.value_, oldValue))\n return false;\n\n thi
s.report_([this.value_, oldValue]);\n return true;\n },\n\n setValue:
function(newValue) {\n if (this.path_)\n this.path_.setValueFrom(th
is.object_, newValue);\n }\n });\n\n function CompoundObserver() {\n Obs
erver.call(this);\n\n this.value_ = [];\n this.directObserver_ = undefined
;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n CompoundOb
server.prototype = createObject({\n __proto__: Observer.prototype,\n\n con
nect_: function() {\n this.check_(undefined, true);\n\n if (!hasObserv
e)\n return;\n\n var object;\n var needsDirectObserver = false;
\n for (var i = 0; i < this.observed_.length; i += 2) {\n object = t
his.observed_[i]\n if (object !== observerSentinel) {\n needsDir
ectObserver = true;\n break;\n }\n }\n\n if (this.dire
ctObserver_) {\n if (needsDirectObserver) {\n this.directObserve
r_.reset();\n return;\n }\n this.directObserver_.close();
\n this.directObserver_ = undefined;\n return;\n }\n\n i
f (needsDirectObserver)\n this.directObserver_ = getObservedSet(this, obj
ect);\n },\n\n closeObservers_: function() {\n for (var i = 0; i < th
is.observed_.length; i += 2) {\n if (this.observed_[i] === observerSentin
el)\n this.observed_[i + 1].close();\n }\n this.observed_.len
gth = 0;\n },\n\n disconnect_: function() {\n this.value_ = undefined
;\n\n if (this.directObserver_) {\n this.directObserver_.close(this)
;\n this.directObserver_ = undefined;\n }\n\n this.closeObserve
rs_();\n },\n\n addPath: function(object, path) {\n if (this.state_ !
= UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot add paths o
nce started.');\n\n this.observed_.push(object, path instanceof Path ? path
: getPath(path));\n },\n\n addObserver: function(observer) {\n if (t
his.state_ != UNOPENED && this.state_ != RESETTING)\n throw Error('Cannot
add observers once started.');\n\n observer.open(this.deliver, this);\n
this.observed_.push(observerSentinel, observer);\n },\n\n startReset: f
unction() {\n if (this.state_ != OPENED)\n throw Error('Can only res
et while open');\n\n this.state_ = RESETTING;\n this.closeObservers_()
;\n },\n\n finishReset: function() {\n if (this.state_ != RESETTING)\
n throw Error('Can only finishReset after startReset');\n this.state
_ = OPENED;\n this.connect_();\n\n return this.value_;\n },\n\n
iterateObjects_: function(observe) {\n var object;\n for (var i = 0; i
< this.observed_.length; i += 2) {\n object = this.observed_[i]\n
if (object !== observerSentinel)\n this.observed_[i + 1].iterateObject
s(object, observe)\n }\n },\n\n check_: function(changeRecords, skipC
hanges) {\n var oldValues;\n for (var i = 0; i < this.observed_.length
; i += 2) {\n var pathOrObserver = this.observed_[i+1];\n var obje
ct = this.observed_[i];\n var value = object === observerSentinel ?\n
pathOrObserver.discardChanges() :\n pathOrObserver.getValueFr
om(object)\n\n if (skipChanges) {\n this.value_[i / 2] = value;\
n continue;\n }\n\n if (areSameValue(value, this.value_[i
/ 2]))\n continue;\n\n oldValues = oldValues || [];\n ol
dValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value;\n
}\n\n if (!oldValues)\n return false;\n\n // TODO(rafaelw): Ha
ving observed_ as the third callback arg here is\n // pretty lame API. Fix.
\n this.report_([this.value_, oldValues, this.observed_]);\n return tr
ue;\n }\n });\n\n function identFn(value) { return value; }\n\n function O
bserverTransform(observable, getValueFn, setValueFn,\n
dontPassThroughSet) {\n this.callback_ = undefined;\n this.target_ = un
defined;\n this.value_ = undefined;\n this.observable_ = observable;\n
this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn ||
identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpressions nee
ds this\n // at the moment because of a bug in it's dependency tracking.\n
this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prot
otype = {\n open: function(callback, target) {\n this.callback_ = callba
ck;\n this.target_ = target;\n this.value_ =\n this.getValueF
n_(this.observable_.open(this.observedCallback_, this));\n return this.valu
e_;\n },\n\n observedCallback_: function(value) {\n value = this.getV
alueFn_(value);\n if (areSameValue(value, this.value_))\n return;\n
var oldValue = this.value_;\n this.value_ = value;\n this.callbac
k_.call(this.target_, this.value_, oldValue);\n },\n\n discardChanges: fun
ction() {\n this.value_ = this.getValueFn_(this.observable_.discardChanges(
));\n return this.value_;\n },\n\n deliver: function() {\n retur
n this.observable_.deliver();\n },\n\n setValue: function(value) {\n
value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.ob
servable_.setValue)\n return this.observable_.setValue(value);\n },\n\
n close: function() {\n if (this.observable_)\n this.observable_.
close();\n this.callback_ = undefined;\n this.target_ = undefined;\n
this.observable_ = undefined;\n this.value_ = undefined;\n this.ge
tValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var
expectedRecordTypes = {};\n expectedRecordTypes[PROP_ADD_TYPE] = true;\n expe
ctedRecordTypes[PROP_UPDATE_TYPE] = true;\n expectedRecordTypes[PROP_DELETE_TYP
E] = true;\n\n function notifyFunction(object, name) {\n if (typeof Object.o
bserve !== 'function')\n return;\n\n var notifier = Object.getNotifier(o
bject);\n return function(type, oldValue) {\n var changeRecord = {\n
object: object,\n type: type,\n name: name\n };\n if
(arguments.length === 2)\n changeRecord.oldValue = oldValue;\n noti
fier.notify(changeRecord);\n }\n }\n\n Observer.defineComputedProperty = fu
nction(target, name, observable) {\n var notify = notifyFunction(target, name
);\n var value = observable.open(function(newValue, oldValue) {\n value
= newValue;\n if (notify)\n notify(PROP_UPDATE_TYPE, oldValue);\n
});\n\n Object.defineProperty(target, name, {\n get: function() {\n
observable.deliver();\n return value;\n },\n set: function(
newValue) {\n observable.setValue(newValue);\n return newValue;\n
},\n configurable: true\n });\n\n return {\n close: functio
n() {\n observable.close();\n Object.defineProperty(target, name,
{\n value: value,\n writable: true,\n configurable: t
rue\n });\n }\n };\n }\n\n function diffObjectFromChangeRecords
(object, changeRecords, oldValues) {\n var added = {};\n var removed = {};
\n\n for (var i = 0; i < changeRecords.length; i++) {\n var record = cha
ngeRecords[i];\n if (!expectedRecordTypes[record.type]) {\n console.
error('Unknown changeRecord type: ' + record.type);\n console.error(recor
d);\n continue;\n }\n\n if (!(record.name in oldValues))\n
oldValues[record.name] = record.oldValue;\n\n if (record.type == PROP_UP
DATE_TYPE)\n continue;\n\n if (record.type == PROP_ADD_TYPE) {\n
if (record.name in removed)\n delete removed[record.name];\n
else\n added[record.name] = true;\n\n continue;\n }\n\n
// type = 'delete'\n if (record.name in added) {\n delete added[r
ecord.name];\n delete oldValues[record.name];\n } else {\n re
moved[record.name] = true;\n }\n }\n\n for (var prop in added)\n
added[prop] = object[prop];\n\n for (var prop in removed)\n removed[pro
p] = undefined;\n\n var changed = {};\n for (var prop in oldValues) {\n
if (prop in added || prop in removed)\n continue;\n\n var newValu
e = object[prop];\n if (oldValues[prop] !== newValue)\n changed[prop
] = newValue;\n }\n\n return {\n added: added,\n removed: remove
d,\n changed: changed\n };\n }\n\n function newSplice(index, removed,
addedCount) {\n return {\n index: index,\n removed: removed,\n
addedCount: addedCount\n };\n }\n\n var EDIT_LEAVE = 0;\n var EDIT_UPDATE
= 1;\n var EDIT_ADD = 2;\n var EDIT_DELETE = 3;\n\n function ArraySplice() {
}\n\n ArraySplice.prototype = {\n\n // Note: This function is *based* on the
computation of the Levenshtein\n // \"edit\" distance. The one change is tha
t \"updates\" are treated as two\n // edits - not one. With Array splices, an
update is really a delete\n // followed by an add. By retaining this, we opt
imize for \"keeping\" the\n // maximum array items in the original array. For
example:\n //\n // 'xxxx123' -> '123yyyy'\n //\n // With 1-edit u
pdates, the shortest path would be just to update all seven\n // characters.
With 2-edit updates, we delete 4, leave 3, and add 4. This\n // leaves the su
bstring '123' intact.\n calcEditDistances: function(current, currentStart, cu
rrentEnd,\n old, oldStart, oldEnd) {\n // \"
Deletion\" columns\n var rowCount = oldEnd - oldStart + 1;\n var colum
nCount = currentEnd - currentStart + 1;\n var distances = new Array(rowCoun
t);\n\n // \"Addition\" rows. Initialize null column.\n for (var i = 0
; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n
distances[i][0] = i;\n }\n\n // Initialize null row\n for (var j
= 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (var i = 1
; i < rowCount; i++) {\n for (var j = 1; j < columnCount; j++) {\n
if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n
distances[i][j] = distances[i - 1][j - 1];\n else {\n
var north = distances[i - 1][j] + 1;\n var west = distances[i][j - 1
] + 1;\n distances[i][j] = north < west ? north : west;\n }\
n }\n }\n\n return distances;\n },\n\n // This starts at
the final weight, and walks \"backward\" by finding\n // the minimum previous
weight recursively until the origin of the weight\n // matrix.\n spliceOp
erationsFromEditDistances: function(distances) {\n var i = distances.length
- 1;\n var j = distances[0].length - 1;\n var current = distances[i][
j];\n var edits = [];\n while (i > 0 || j > 0) {\n if (i == 0)
{\n edits.push(EDIT_ADD);\n j--;\n continue;\n
}\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n
continue;\n }\n var northWest = distances[i - 1][j - 1];\
n var west = distances[i - 1][j];\n var north = distances[i][j - 1
];\n\n var min;\n if (west < north)\n min = west < northW
est ? west : northWest;\n else\n min = north < northWest ? north
: northWest;\n\n if (min == northWest) {\n if (northWest == cur
rent) {\n edits.push(EDIT_LEAVE);\n } else {\n ed
its.push(EDIT_UPDATE);\n current = northWest;\n }\n
i--;\n j--;\n } else if (min == west) {\n edits.push(E
DIT_DELETE);\n i--;\n current = west;\n } else {\n
edits.push(EDIT_ADD);\n j--;\n current = north;\n
}\n }\n\n edits.reverse();\n return edits;\n },\n\n /**\n
* Splice Projection functions:\n *\n * A splice map is a representati
on of how a previous array of items\n * was transformed into a new array of
items. Conceptually it is a list of\n * tuples of\n *\n * <index,
removed, addedCount>\n *\n * which are kept in ascending index order of.
The tuple represents that at\n * the |index|, |removed| sequence of items w
ere removed, and counting forward\n * from |index|, |addedCount| items were
added.\n */\n\n /**\n * Lacking individual splice mutation informatio
n, the minimal set of\n * splices can be synthesized given the previous stat
e and final state of an\n * array. The basic approach is to calculate the ed
it distance matrix and\n * choose the shortest path through it.\n *\n
* Complexity: O(l * p)\n * l: The length of the current array\n *
p: The length of the old array\n */\n calcSplices: function(current, curr
entStart, currentEnd,\n old, oldStart, oldEnd) {\n
var prefixCount = 0;\n var suffixCount = 0;\n\n var minLength = Math.
min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0
&& oldStart == 0)\n prefixCount = this.sharedPrefix(current, old, minLeng
th);\n\n if (currentEnd == current.length && oldEnd == old.length)\n
suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n\n
currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd
-= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - current
Start == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentSt
art == currentEnd) {\n var splice = newSplice(currentStart, [], 0);\n
while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n
\n return [ splice ];\n } else if (oldStart == oldEnd)\n retu
rn [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n var ops
= this.spliceOperationsFromEditDistances(\n this.calcEditDistances(curr
ent, currentStart, currentEnd,\n old, oldStart,
oldEnd));\n\n var splice = undefined;\n var splices = [];\n var i
ndex = currentStart;\n var oldIndex = oldStart;\n for (var i = 0; i <
ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n
if (splice) {\n splices.push(splice);\n splice =
undefined;\n }\n\n index++;\n oldIndex++;\n
break;\n case EDIT_UPDATE:\n if (!splice)\n
splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n
index++;\n\n splice.removed.push(old[oldIndex]);\n
oldIndex++;\n break;\n case EDIT_ADD:\n if (!sp
lice)\n splice = newSplice(index, [], 0);\n\n splice.add
edCount++;\n index++;\n break;\n case EDIT_DELETE
:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n
splice.removed.push(old[oldIndex]);\n oldIndex++;\n
break;\n }\n }\n\n if (splice) {\n splices.push(sp
lice);\n }\n return splices;\n },\n\n sharedPrefix: function(cur
rent, old, searchLength) {\n for (var i = 0; i < searchLength; i++)\n
if (!this.equals(current[i], old[i]))\n return i;\n return searc
hLength;\n },\n\n sharedSuffix: function(current, old, searchLength) {\n
var index1 = current.length;\n var index2 = old.length;\n var coun
t = 0;\n while (count < searchLength && this.equals(current[--index1], old[
--index2]))\n count++;\n\n return count;\n },\n\n calculateSpl
ices: function(current, previous) {\n return this.calcSplices(current, 0, c
urrent.length, previous, 0,\n previous.length);\n
},\n\n equals: function(currentValue, previousValue) {\n return curren
tValue === previousValue;\n }\n };\n\n var arraySplice = new ArraySplice();
\n\n function calcSplices(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n return arraySplice.calcSplices(current, curr
entStart, currentEnd,\n old, oldStart, oldEnd)
;\n }\n\n function intersect(start1, end1, start2, end2) {\n // Disjoint\n
if (end1 < start2 || end2 < start1)\n return -1;\n\n // Adjacent\n
if (end1 == start2 || end2 == start1)\n return 0;\n\n // Non-zero inter
sect, span1 first\n if (start1 < start2) {\n if (end1 < end2)\n r
eturn end1 - start2; // Overlap\n else\n return end2 - start2; // Co
ntained\n } else {\n // Non-zero intersect, span2 first\n if (end2
< end1)\n return end2 - start1; // Overlap\n else\n return en
d1 - start1; // Contained\n }\n }\n\n function mergeSplice(splices, index,
removed, addedCount) {\n\n var splice = newSplice(index, removed, addedCount)
;\n\n var inserted = false;\n var insertionOffset = 0;\n\n for (var i =
0; i < splices.length; i++) {\n var current = splices[i];\n current.i
ndex += insertionOffset;\n\n if (inserted)\n continue;\n\n var
intersectCount = intersect(splice.index,\n s
plice.index + splice.removed.length,\n curre
nt.index,\n current.index + current.addedCou
nt);\n\n if (intersectCount >= 0) {\n // Merge the two splices\n\n
splices.splice(i, 1);\n i--;\n\n insertionOffset -= current.
addedCount - current.removed.length;\n\n splice.addedCount += current.add
edCount - intersectCount;\n var deleteCount = splice.removed.length +\n
current.removed.length - intersectCount;\n\n if (
!splice.addedCount && !deleteCount) {\n // merged splice is a noop. dis
card.\n inserted = true;\n } else {\n var removed = cur
rent.removed;\n\n if (splice.index < current.index) {\n // s
ome prefix of splice.removed is prepended to current.removed.\n var p
repend = splice.removed.slice(0, current.index - splice.index);\n Arr
ay.prototype.push.apply(prepend, removed);\n removed = prepend;\n
}\n\n if (splice.index + splice.removed.length > current.index +
current.addedCount) {\n // some suffix of splice.removed is appended
to current.removed.\n var append = splice.removed.slice(current.index
+ current.addedCount - splice.index);\n Array.prototype.push.apply(r
emoved, append);\n }\n\n splice.removed = removed;\n
if (current.index < splice.index) {\n splice.index = current.index;\n
}\n }\n } else if (splice.index < current.index) {\n
// Insert splice here.\n\n inserted = true;\n\n splices.splice(i
, 0, splice);\n i++;\n\n var offset = splice.addedCount - splice.r
emoved.length\n current.index += offset;\n insertionOffset += offs
et;\n }\n }\n\n if (!inserted)\n splices.push(splice);\n }\n\n
function createInitialSplices(array, changeRecords) {\n var splices = [];\n\
n for (var i = 0; i < changeRecords.length; i++) {\n var record = change
Records[i];\n switch(record.type) {\n case ARRAY_SPLICE_TYPE:\n
mergeSplice(splices, record.index, record.removed.slice(), record.addedCoun
t);\n break;\n case PROP_ADD_TYPE:\n case PROP_UPDATE_TYP
E:\n case PROP_DELETE_TYPE:\n if (!isIndex(record.name))\n
continue;\n var index = toNumber(record.name);\n if (ind
ex < 0)\n continue;\n mergeSplice(splices, index, [record.ol
dValue], 1);\n break;\n default:\n console.error('Unexp
ected record type: ' + JSON.stringify(record));\n break;\n }\n
}\n\n return splices;\n }\n\n function projectArraySplices(array, changeRec
ords) {\n var splices = [];\n\n createInitialSplices(array, changeRecords)
.forEach(function(splice) {\n if (splice.addedCount == 1 && splice.removed.
length == 1) {\n if (splice.removed[0] !== array[splice.index])\n
splices.push(splice);\n\n return\n };\n\n splices = splices.c
oncat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n
splice.removed, 0, splice.removed.length));
\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n global
.Observer.runEOM_ = runEOM;\n global.Observer.hasObjectObserve = hasObserve;\n
global.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices
= function(current, previous) {\n return arraySplice.calculateSplices(current
, previous);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserv
er = ObjectObserver;\n global.PathObserver = PathObserver;\n global.CompoundOb
server = CompoundObserver;\n global.Path = Path;\n global.ObserverTransform =
ObserverTransform;\n\n // TODO(rafaelw): Only needed for testing until new chan
ge record names\n // make it to release.\n global.Observer.changeRecordTypes =
{\n add: PROP_ADD_TYPE,\n update: PROP_UPDATE_TYPE,\n reconfigure: PRO
P_RECONFIGURE_TYPE,\n 'delete': PROP_DELETE_TYPE,\n splice: ARRAY_SPLICE_T
YPE\n };\n})(typeof global !== 'undefined' && global && typeof module !== 'unde
fined' && module ? global : this || window);\n", |
| 102 "// prepoulate window.Platform.flags for default controls\r\nwindow.Platform
= window.Platform || {};\r\n// prepopulate window.logFlags if necessary\r\nwind
ow.logFlags = window.logFlags || {};\r\n// process flags\r\n(function(scope){\r\
n // import\r\n var flags = scope.flags || {};\r\n // populate flags from loc
ation\r\n location.search.slice(1).split('&').forEach(function(o) {\r\n o =
o.split('=');\r\n o[0] && (flags[o[0]] = o[1] || true);\r\n });\r\n var ent
ryPoint = document.currentScript || document.querySelector('script[src*=\"platfo
rm.js\"]');\r\n if (entryPoint) {\r\n var a = entryPoint.attributes;\r\n
for (var i = 0, n; i < a.length; i++) {\r\n n = a[i];\r\n if (n.name !
== 'src') {\r\n flags[n.name] = n.value || true;\r\n }\r\n }\r\n
}\r\n if (flags.log) {\r\n flags.log.split(',').forEach(function(f) {\r\n
window.logFlags[f] = true;\r\n });\r\n }\r\n // If any of these flags m
atch 'native', then force native ShadowDOM; any\r\n // other truthy value, or f
ailure to detect native\r\n // ShadowDOM, results in polyfill\r\n flags.shadow
= (flags.shadow || flags.shadowdom || flags.polyfill);\r\n if (flags.shadow ==
= 'native') {\r\n flags.shadow = false;\r\n } else {\r\n flags.shadow = f
lags.shadow || !HTMLElement.prototype.createShadowRoot;\r\n }\r\n\r\n // Custo
mElements polyfill flag\r\n if (flags.register) {\r\n window.CustomElements
= window.CustomElements || {flags: {}};\r\n window.CustomElements.flags.regis
ter = flags.register;\r\n }\r\n\r\n if (flags.imports) {\r\n window.HTMLImp
orts = window.HTMLImports || {flags: {}};\r\n window.HTMLImports.flags.import
s = flags.imports;\r\n }\r\n\r\n // export\r\n scope.flags = flags;\r\n})(Pla
tform);\r\n\r\n// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", |
| 103 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\nwindow.ShadowDOMPolyfill = {};\n\n(function(scope) {\n 'use stri
ct';\n\n var constructorTable = new WeakMap();\n var nativePrototypeTable = ne
w WeakMap();\n var wrappers = Object.create(null);\n\n // Don't test for eval
if document has CSP securityPolicy object and we can\n // see that eval is not
supported. This avoids an error message in console\n // even when the exception
is caught\n var hasEval = !('securityPolicy' in document) ||\n document.s
ecurityPolicy.allowsEval;\n if (hasEval) {\n try {\n var f = new Functi
on('', 'return true;');\n hasEval = f();\n } catch (ex) {\n hasEval
= false;\n }\n }\n\n function assert(b) {\n if (!b)\n throw new Er
ror('Assertion failed');\n };\n\n var defineProperty = Object.defineProperty;\
n var getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertyDe
scriptor = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from) {\n
getOwnPropertyNames(from).forEach(function(name) {\n defineProperty(to, na
me, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n f
unction mixinStatics(to, from) {\n getOwnPropertyNames(from).forEach(function
(name) {\n switch (name) {\n case 'arguments':\n case 'caller
':\n case 'length':\n case 'name':\n case 'prototype':\n
case 'toString':\n return;\n }\n defineProperty(to, name
, getOwnPropertyDescriptor(from, name));\n });\n return to;\n };\n\n fun
ction oneOf(object, propertyNames) {\n for (var i = 0; i < propertyNames.leng
th; i++) {\n if (propertyNames[i] in object)\n return propertyNames[
i];\n }\n }\n\n // Mozilla's old DOM bindings are bretty busted:\n // http
s://bugzilla.mozilla.org/show_bug.cgi?id=855844\n // Make sure they are create
before we start modifying things.\n getOwnPropertyNames(window);\n\n function
getWrapperConstructor(node) {\n var nativePrototype = node.__proto__ || Objec
t.getPrototypeOf(node);\n var wrapperConstructor = constructorTable.get(nativ
ePrototype);\n if (wrapperConstructor)\n return wrapperConstructor;\n\n
var parentWrapperConstructor = getWrapperConstructor(nativePrototype);\n\n
var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);\n
registerInternal(nativePrototype, GeneratedWrapper, node);\n\n return Genera
tedWrapper;\n }\n\n function addForwardingProperties(nativePrototype, wrapperP
rototype) {\n installProperty(nativePrototype, wrapperPrototype, true);\n }\
n\n function registerInstanceProperties(wrapperPrototype, instanceObject) {\n
installProperty(instanceObject, wrapperPrototype, false);\n }\n\n var isFire
fox = /Firefox/.test(navigator.userAgent);\n\n // This is used as a fallback wh
en getting the descriptor fails in\n // installProperty.\n var dummyDescriptor
= {\n get: function() {},\n set: function(v) {},\n configurable: true,
\n enumerable: true\n };\n\n function isEventHandlerName(name) {\n retur
n /^on[a-z]+$/.test(name);\n }\n\n function isIdentifierName(name) {\n retu
rn /^\\w[a-zA-Z_0-9]*$/.test(name);\n }\n\n function getGetter(name) {\n re
turn hasEval && isIdentifierName(name) ?\n new Function('return this.impl
.' + name) :\n function() { return this.impl[name]; };\n }\n\n function
getSetter(name) {\n return hasEval && isIdentifierName(name) ?\n new
Function('v', 'this.impl.' + name + ' = v') :\n function(v) { this.impl[n
ame] = v; };\n }\n\n function getMethod(name) {\n return hasEval && isIdent
ifierName(name) ?\n new Function('return this.impl.' + name +\n
'.apply(this.impl, arguments)') :\n function() { return this.i
mpl[name].apply(this.impl, arguments); };\n }\n\n function getDescriptor(sourc
e, name) {\n try {\n return Object.getOwnPropertyDescriptor(source, name
);\n } catch (ex) {\n // JSC and V8 both use data properties instead of
accessors which can\n // cause getting the property desciptor to throw an e
xception.\n // https://bugs.webkit.org/show_bug.cgi?id=49739\n return
dummyDescriptor;\n }\n }\n\n function installProperty(source, target, allow
Method, opt_blacklist) {\n var names = getOwnPropertyNames(source);\n for
(var i = 0; i < names.length; i++) {\n var name = names[i];\n if (name
=== 'polymerBlackList_')\n continue;\n\n if (name in target)\n
continue;\n\n if (source.polymerBlackList_ && source.polymerBlackList_[n
ame])\n continue;\n\n if (isFirefox) {\n // Tickle Firefox's
old bindings.\n source.__lookupGetter__(name);\n }\n var descri
ptor = getDescriptor(source, name);\n var getter, setter;\n if (allowM
ethod && typeof descriptor.value === 'function') {\n target[name] = getMe
thod(name);\n continue;\n }\n\n var isEvent = isEventHandlerNam
e(name);\n if (isEvent)\n getter = scope.getEventHandlerGetter(name)
;\n else\n getter = getGetter(name);\n\n if (descriptor.writabl
e || descriptor.set) {\n if (isEvent)\n setter = scope.getEventH
andlerSetter(name);\n else\n setter = getSetter(name);\n }\
n\n defineProperty(target, name, {\n get: getter,\n set: sett
er,\n configurable: descriptor.configurable,\n enumerable: descrip
tor.enumerable\n });\n }\n }\n\n /**\n * @param {Function} nativeCon
structor\n * @param {Function} wrapperConstructor\n * @param {Object=} opt_i
nstance If present, this is used to extract\n * properties from an instanc
e object.\n */\n function register(nativeConstructor, wrapperConstructor, opt
_instance) {\n var nativePrototype = nativeConstructor.prototype;\n regist
erInternal(nativePrototype, wrapperConstructor, opt_instance);\n mixinStatics
(wrapperConstructor, nativeConstructor);\n }\n\n function registerInternal(nat
ivePrototype, wrapperConstructor, opt_instance) {\n var wrapperPrototype = wr
apperConstructor.prototype;\n assert(constructorTable.get(nativePrototype) ==
= undefined);\n\n constructorTable.set(nativePrototype, wrapperConstructor);\
n nativePrototypeTable.set(wrapperPrototype, nativePrototype);\n\n addForw
ardingProperties(nativePrototype, wrapperPrototype);\n if (opt_instance)\n
registerInstanceProperties(wrapperPrototype, opt_instance);\n defineProper
ty(wrapperPrototype, 'constructor', {\n value: wrapperConstructor,\n c
onfigurable: true,\n enumerable: false,\n writable: true\n });\n }
\n\n function isWrapperFor(wrapperConstructor, nativeConstructor) {\n return
constructorTable.get(nativeConstructor.prototype) ===\n wrapperConstruct
or;\n }\n\n /**\n * Creates a generic wrapper constructor based on |object|
and its\n * constructor.\n * @param {Node} object\n * @return {Function} T
he generated constructor.\n */\n function registerObject(object) {\n var n
ativePrototype = Object.getPrototypeOf(object);\n\n var superWrapperConstruct
or = getWrapperConstructor(nativePrototype);\n var GeneratedWrapper = createW
rapperConstructor(superWrapperConstructor);\n registerInternal(nativePrototyp
e, GeneratedWrapper, object);\n\n return GeneratedWrapper;\n }\n\n function
createWrapperConstructor(superWrapperConstructor) {\n function GeneratedWrap
per(node) {\n superWrapperConstructor.call(this, node);\n }\n Generat
edWrapper.prototype =\n Object.create(superWrapperConstructor.prototype);
\n GeneratedWrapper.prototype.constructor = GeneratedWrapper;\n\n return G
eneratedWrapper;\n }\n\n var OriginalDOMImplementation = window.DOMImplementat
ion;\n var OriginalEventTarget = window.EventTarget;\n var OriginalEvent = win
dow.Event;\n var OriginalNode = window.Node;\n var OriginalWindow = window.Win
dow;\n var OriginalRange = window.Range;\n var OriginalCanvasRenderingContext2
D = window.CanvasRenderingContext2D;\n var OriginalWebGLRenderingContext = wind
ow.WebGLRenderingContext;\n var OriginalSVGElementInstance = window.SVGElementI
nstance;\n\n function isWrapper(object) {\n return object instanceof wrapper
s.EventTarget ||\n object instanceof wrappers.Event ||\n obj
ect instanceof wrappers.Range ||\n object instanceof wrappers.DOMImple
mentation ||\n object instanceof wrappers.CanvasRenderingContext2D ||\
n wrappers.WebGLRenderingContext &&\n object instanceof
wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n retur
n OriginalEventTarget && object instanceof OriginalEventTarget ||\n ob
ject instanceof OriginalNode ||\n object instanceof OriginalEvent ||\n
object instanceof OriginalWindow ||\n object instanceof Ori
ginalRange ||\n object instanceof OriginalDOMImplementation ||\n
object instanceof OriginalCanvasRenderingContext2D ||\n OriginalW
ebGLRenderingContext &&\n object instanceof OriginalWebGLRendering
Context ||\n OriginalSVGElementInstance &&\n object inst
anceof OriginalSVGElementInstance;\n }\n\n /**\n * Wraps a node in a Wrapper
Node. If there already exists a wrapper for the\n * |node| that wrapper is ret
urned instead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n fu
nction wrap(impl) {\n if (impl === null)\n return null;\n\n assert(is
Native(impl));\n return impl.polymerWrapper_ ||\n (impl.polymerWrapper
_ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a wrap
per and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\n
* @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === null)
\n return null;\n assert(isWrapper(wrapper));\n return wrapper.impl;\
n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object} obj
ect\n * @return {Object} The native implementation object.\n */\n function
unwrapIfNeeded(object) {\n return object && isWrapper(object) ? unwrap(object
) : object;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @para
m {Object} object\n * @return {Object} The wrapper for object.\n */\n funct
ion wrapIfNeeded(object) {\n return object && !isWrapper(object) ? wrap(objec
t) : object;\n }\n\n /**\n * Overrides the current wrapper (if any) for node
.\n * @param {Node} node\n * @param {WrapperNode=} wrapper If left out the w
rapper will be created as\n * needed next time someone wraps the node.\n
*/\n function rewrap(node, wrapper) {\n if (wrapper === null)\n return
;\n assert(isNative(node));\n assert(wrapper === undefined || isWrapper(wr
apper));\n node.polymerWrapper_ = wrapper;\n }\n\n function defineGetter(co
nstructor, name, getter) {\n defineProperty(constructor.prototype, name, {\n
get: getter,\n configurable: true,\n enumerable: true\n });\n
}\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constru
ctor, name, function() {\n return wrap(this.impl[name]);\n });\n }\n\n
/**\n * Forwards existing methods on the native object to the wrapper methods
.\n * This does not wrap any of the arguments or the return value since the\n
* wrapper implementation already takes care of that.\n * @param {Array.<Func
tion>} constructors\n * @parem {Array.<string>} names\n */\n function forwa
rdMethodsToWrapper(constructors, names) {\n constructors.forEach(function(con
structor) {\n names.forEach(function(name) {\n constructor.prototype
[name] = function() {\n var w = wrapIfNeeded(this);\n return w
[name].apply(w, arguments);\n };\n });\n });\n }\n\n scope.asse
rt = assert;\n scope.constructorTable = constructorTable;\n scope.defineGetter
= defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope.forwardM
ethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n sc
ope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototyp
eTable = nativePrototypeTable;\n scope.oneOf = oneOf;\n scope.registerObject =
registerObject;\n scope.registerWrapper = register;\n scope.rewrap = rewrap;\
n scope.unwrap = unwrap;\n scope.unwrapIfNeeded = unwrapIfNeeded;\n scope.wra
p = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n\
n})(window.ShadowDOMPolyfill);\n", |
| 104 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is goverened by a BSD-style\n * license that can be found in th
e LICENSE file.\n */\n\n(function(context) {\n 'use strict';\n\n var OriginalM
utationObserver = window.MutationObserver;\n var callbacks = [];\n var pending
= false;\n var timerFunc;\n\n function handle() {\n pending = false;\n
var copies = callbacks.slice(0);\n callbacks = [];\n for (var i = 0; i < c
opies.length; i++) {\n (0, copies[i])();\n }\n }\n\n if (OriginalMutat
ionObserver) {\n var counter = 1;\n var observer = new OriginalMutationObs
erver(handle);\n var textNode = document.createTextNode(counter);\n observ
er.observe(textNode, {characterData: true});\n\n timerFunc = function() {\n
counter = (counter + 1) % 2;\n textNode.data = counter;\n };\n\n }
else {\n timerFunc = window.setImmediate || window.setTimeout;\n }\n\n func
tion setEndOfMicrotask(func) {\n callbacks.push(func);\n if (pending)\n
return;\n pending = true;\n timerFunc(handle, 0);\n }\n\n context.set
EndOfMicrotask = setEndOfMicrotask;\n\n})(window.ShadowDOMPolyfill);\n", |
| 105 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is goverened by a BSD-style\n * license that can be found in th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var setEndOfMic
rotask = scope.setEndOfMicrotask\n var wrapIfNeeded = scope.wrapIfNeeded\n var
wrappers = scope.wrappers;\n\n var registrationsTable = new WeakMap();\n var
globalMutationObservers = [];\n var isScheduled = false;\n\n function schedule
Callback(observer) {\n if (isScheduled)\n return;\n setEndOfMicrotask
(notifyObservers);\n isScheduled = true;\n }\n\n // http://dom.spec.whatwg.
org/#mutation-observers\n function notifyObservers() {\n isScheduled = false
;\n\n do {\n var notifyList = globalMutationObservers.slice();\n va
r anyNonEmpty = false;\n for (var i = 0; i < notifyList.length; i++) {\n
var mo = notifyList[i];\n var queue = mo.takeRecords();\n rem
oveTransientObserversFor(mo);\n if (queue.length) {\n mo.callbac
k_(queue, mo);\n anyNonEmpty = true;\n }\n }\n } while (
anyNonEmpty);\n }\n\n /**\n * @param {string} type\n * @param {Node} targe
t\n * @constructor\n */\n function MutationRecord(type, target) {\n this
.type = type;\n this.target = target;\n this.addedNodes = new wrappers.Nod
eList();\n this.removedNodes = new wrappers.NodeList();\n this.previousSib
ling = null;\n this.nextSibling = null;\n this.attributeName = null;\n
this.attributeNamespace = null;\n this.oldValue = null;\n }\n\n /**\n * R
egisters transient observers to ancestor and its ancesors for the node\n * whi
ch was removed.\n * @param {!Node} ancestor\n * @param {!Node} node\n */\n
function registerTransientObservers(ancestor, node) {\n for (; ancestor; an
cestor = ancestor.parentNode) {\n var registrations = registrationsTable.ge
t(ancestor);\n if (!registrations)\n continue;\n for (var i = 0
; i < registrations.length; i++) {\n var registration = registrations[i];
\n if (registration.options.subtree)\n registration.addTransient
Observer(node);\n }\n }\n }\n\n function removeTransientObserversFor(o
bserver) {\n for (var i = 0; i < observer.nodes_.length; i++) {\n var no
de = observer.nodes_[i];\n var registrations = registrationsTable.get(node)
;\n if (!registrations)\n return;\n for (var j = 0; j < registr
ations.length; j++) {\n var registration = registrations[j];\n if
(registration.observer === observer)\n registration.removeTransientObse
rvers();\n }\n }\n }\n\n // http://dom.spec.whatwg.org/#queue-a-mutati
on-record\n function enqueueMutation(target, type, data) {\n // 1.\n var
interestedObservers = Object.create(null);\n var associatedStrings = Object.c
reate(null);\n\n // 2.\n for (var node = target; node; node = node.parentN
ode) {\n // 3.\n var registrations = registrationsTable.get(node);\n
if (!registrations)\n continue;\n for (var j = 0; j < registrati
ons.length; j++) {\n var registration = registrations[j];\n var op
tions = registration.options;\n // 1.\n if (node !== target && !op
tions.subtree)\n continue;\n\n // 2.\n if (type === 'attr
ibutes' && !options.attributes)\n continue;\n\n // 3. If type is
\"attributes\", options's attributeFilter is present, and\n // either op
tions's attributeFilter does not contain name or namespace\n // is non-nu
ll, continue.\n if (type === 'attributes' && options.attributeFilter &&\n
(data.namespace !== null ||\n options.attributeFilter.in
dexOf(data.name) === -1)) {\n continue;\n }\n\n // 4.\n
if (type === 'characterData' && !options.characterData)\n continu
e;\n\n // 5.\n if (type === 'childList' && !options.childList)\n
continue;\n\n // 6.\n var observer = registration.observer
;\n interestedObservers[observer.uid_] = observer;\n\n // 7. If ei
ther type is \"attributes\" and options's attributeOldValue is\n // true,
or type is \"characterData\" and options's characterDataOldValue\n // is
true, set the paired string of registered observer's observer in\n // in
terested observers to oldValue.\n if (type === 'attributes' && options.at
tributeOldValue ||\n type === 'characterData' && options.characterDat
aOldValue) {\n associatedStrings[observer.uid_] = data.oldValue;\n
}\n }\n }\n\n var anyRecordsEnqueued = false;\n\n // 4.\n fo
r (var uid in interestedObservers) {\n var observer = interestedObservers[u
id];\n var record = new MutationRecord(type, target);\n\n // 2.\n
if ('name' in data && 'namespace' in data) {\n record.attributeName = da
ta.name;\n record.attributeNamespace = data.namespace;\n }\n\n
// 3.\n if (data.addedNodes)\n record.addedNodes = data.addedNodes;\
n\n // 4.\n if (data.removedNodes)\n record.removedNodes = data
.removedNodes;\n\n // 5.\n if (data.previousSibling)\n record.p
reviousSibling = data.previousSibling;\n\n // 6.\n if (data.nextSiblin
g)\n record.nextSibling = data.nextSibling;\n\n // 7.\n if (ass
ociatedStrings[uid] !== undefined)\n record.oldValue = associatedStrings[
uid];\n\n // 8.\n observer.records_.push(record);\n\n anyRecordsE
nqueued = true;\n }\n\n if (anyRecordsEnqueued)\n scheduleCallback();
\n }\n\n var slice = Array.prototype.slice;\n\n /**\n * @param {!Object} op
tions\n * @constructor\n */\n function MutationObserverOptions(options) {\n
this.childList = !!options.childList;\n this.subtree = !!options.subtree;
\n\n // 1. If either options' attributeOldValue or attributeFilter is present
\n // and options' attributes is omitted, set options' attributes to true.\n
if (!('attributes' in options) &&\n ('attributeOldValue' in options ||
'attributeFilter' in options)) {\n this.attributes = true;\n } else {\n
this.attributes = !!options.attributes;\n }\n\n // 2. If options' ch
aracterDataOldValue is present and options'\n // characterData is omitted, se
t options' characterData to true.\n if ('characterDataOldValue' in options &&
!('characterData' in options))\n this.characterData = true;\n else\n
this.characterData = !!options.characterData;\n\n // 3. & 4.\n if (!thi
s.attributes &&\n (options.attributeOldValue || 'attributeFilter' in opti
ons) ||\n // 5.\n !this.characterData && options.characterDataOldV
alue) {\n throw new TypeError();\n }\n\n this.characterData = !!optio
ns.characterData;\n this.attributeOldValue = !!options.attributeOldValue;\n
this.characterDataOldValue = !!options.characterDataOldValue;\n if ('attrib
uteFilter' in options) {\n if (options.attributeFilter == null ||\n
typeof options.attributeFilter !== 'object') {\n throw new TypeError();
\n }\n this.attributeFilter = slice.call(options.attributeFilter);\n
} else {\n this.attributeFilter = null;\n }\n }\n\n var uidCounter =
0;\n\n /**\n * The class that maps to the DOM MutationObserver interface.\n
* @param {Function} callback.\n * @constructor\n */\n function MutationOb
server(callback) {\n this.callback_ = callback;\n this.nodes_ = [];\n t
his.records_ = [];\n this.uid_ = ++uidCounter;\n\n // This will leak. Ther
e is no way to implement this without WeakRefs :'(\n globalMutationObservers.
push(this);\n }\n\n MutationObserver.prototype = {\n // http://dom.spec.wha
twg.org/#dom-mutationobserver-observe\n observe: function(target, options) {\
n target = wrapIfNeeded(target);\n\n var newOptions = new MutationObse
rverOptions(options);\n\n // 6.\n var registration;\n var registr
ations = registrationsTable.get(target);\n if (!registrations)\n reg
istrationsTable.set(target, registrations = []);\n\n for (var i = 0; i < re
gistrations.length; i++) {\n if (registrations[i].observer === this) {\n
registration = registrations[i];\n // 6.1.\n registra
tion.removeTransientObservers();\n // 6.2.\n registration.opti
ons = newOptions;\n }\n }\n\n // 7.\n if (!registration) {
\n registration = new Registration(this, target, newOptions);\n re
gistrations.push(registration);\n this.nodes_.push(target);\n }\n
},\n\n // http://dom.spec.whatwg.org/#dom-mutationobserver-disconnect\n d
isconnect: function() {\n this.nodes_.forEach(function(node) {\n var
registrations = registrationsTable.get(node);\n for (var i = 0; i < regi
strations.length; i++) {\n var registration = registrations[i];\n
if (registration.observer === this) {\n registrations.splice(i, 1
);\n // Each node can only have one registered observer associated wi
th\n // this observer.\n break;\n }\n }\n
}, this);\n this.records_ = [];\n },\n\n takeRecords: function()
{\n var copyOfRecords = this.records_;\n this.records_ = [];\n r
eturn copyOfRecords;\n }\n };\n\n /**\n * Class used to represent a regis
tered observer.\n * @param {MutationObserver} observer\n * @param {Node} tar
get\n * @param {MutationObserverOptions} options\n * @constructor\n */\n
function Registration(observer, target, options) {\n this.observer = observer
;\n this.target = target;\n this.options = options;\n this.transientObs
ervedNodes = [];\n }\n\n Registration.prototype = {\n /**\n * Adds a tr
ansient observer on node. The transient observer gets removed\n * next time
we deliver the change records.\n * @param {Node} node\n */\n addTrans
ientObserver: function(node) {\n // Don't add transient observers on the ta
rget itself. We already have all\n // the required listeners set up on the
target.\n if (node === this.target)\n return;\n\n this.transien
tObservedNodes.push(node);\n var registrations = registrationsTable.get(nod
e);\n if (!registrations)\n registrationsTable.set(node, registratio
ns = []);\n\n // We know that registrations does not contain this because w
e already\n // checked if node === this.target.\n registrations.push(t
his);\n },\n\n removeTransientObservers: function() {\n var transient
ObservedNodes = this.transientObservedNodes;\n this.transientObservedNodes
= [];\n\n for (var i = 0; i < transientObservedNodes.length; i++) {\n
var node = transientObservedNodes[i];\n var registrations = registratio
nsTable.get(node);\n for (var j = 0; j < registrations.length; j++) {\n
if (registrations[j] === this) {\n registrations.splice(j, 1)
;\n // Each node can only have one registered observer associated wit
h\n // this observer.\n break;\n }\n }\n
}\n }\n };\n\n scope.enqueueMutation = enqueueMutation;\n scope.regist
erTransientObservers = registerTransientObservers;\n scope.wrappers.MutationObs
erver = MutationObserver;\n scope.wrappers.MutationRecord = MutationRecord;\n\n
})(window.ShadowDOMPolyfill);\n", |
| 106 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var forwardMethodsToWrap
per = scope.forwardMethodsToWrapper;\n var mixin = scope.mixin;\n var register
Wrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = sco
pe.wrap;\n var wrappers = scope.wrappers;\n\n var wrappedFuns = new WeakMap();
\n var listenersTable = new WeakMap();\n var handledEventsTable = new WeakMap(
);\n var currentlyDispatchingEvents = new WeakMap();\n var targetTable = new W
eakMap();\n var currentTargetTable = new WeakMap();\n var relatedTargetTable =
new WeakMap();\n var eventPhaseTable = new WeakMap();\n var stopPropagationTa
ble = new WeakMap();\n var stopImmediatePropagationTable = new WeakMap();\n va
r eventHandlersTable = new WeakMap();\n var eventPathTable = new WeakMap();\n\n
function isShadowRoot(node) {\n return node instanceof wrappers.ShadowRoot;
\n }\n\n function isInsertionPoint(node) {\n var localName = node.localName
;\n return localName === 'content' || localName === 'shadow';\n }\n\n funct
ion isShadowHost(node) {\n return !!node.shadowRoot;\n }\n\n function getEv
entParent(node) {\n var dv;\n return node.parentNode || (dv = node.default
View) && wrap(dv) || null;\n }\n\n // https://dvcs.w3.org/hg/webcomponents/raw
-file/tip/spec/shadow/index.html#dfn-adjusted-parent\n function calculateParent
s(node, context, ancestors) {\n if (ancestors.length)\n return ancestors
.shift();\n\n // 1.\n if (isShadowRoot(node))\n return getInsertionPa
rent(node) || node.host;\n\n // 2.\n var eventParents = scope.eventParents
Table.get(node);\n if (eventParents) {\n // Copy over the remaining even
t parents for next iteration.\n for (var i = 1; i < eventParents.length; i+
+) {\n ancestors[i - 1] = eventParents[i];\n }\n return eventPa
rents[0];\n }\n\n // 3.\n if (context && isInsertionPoint(node)) {\n
var parentNode = node.parentNode;\n if (parentNode && isShadowHost(paren
tNode)) {\n var trees = scope.getShadowTrees(parentNode);\n var p
= getInsertionParent(context);\n for (var i = 0; i < trees.length; i++) {
\n if (trees[i].contains(p))\n return p;\n }\n }
\n }\n\n return getEventParent(node);\n }\n\n // https://dvcs.w3.org/hg/
webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting\n function
retarget(node) {\n var stack = []; // 1.\n var ancestor = node; // 2.\n
var targets = [];\n var ancestors = [];\n while (ancestor) { // 3.\n
var context = null; // 3.2.\n // TODO(arv): Change order of these. If
the stack is empty we always end\n // up pushing ancestor, no matter what.\
n if (isInsertionPoint(ancestor)) { // 3.1.\n context = topMostNotI
nsertionPoint(stack); // 3.1.1.\n var top = stack[stack.length - 1] || a
ncestor; // 3.1.2.\n stack.push(top);\n } else if (!stack.length) {
\n stack.push(ancestor); // 3.3.\n }\n var target = stack[stac
k.length - 1]; // 3.4.\n targets.push({target: target, currentTarget: ance
stor}); // 3.5.\n if (isShadowRoot(ancestor)) // 3.6.\n stack.pop(
); // 3.6.1.\n\n ancestor = calculateParents(ancestor, context, ancestors)
; // 3.7.\n }\n return targets;\n }\n\n function topMostNotInsertionPoi
nt(stack) {\n for (var i = stack.length - 1; i >= 0; i--) {\n if (!isIns
ertionPoint(stack[i]))\n return stack[i];\n }\n return null;\n }\n
\n // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#
dfn-adjusted-related-target\n function adjustRelatedTarget(target, related) {\n
var ancestors = [];\n while (target) { // 3.\n var stack = []; //
3.1.\n var ancestor = related; // 3.2.\n var last = undefined; // 3.
3. Needs to be reset every iteration.\n while (ancestor) {\n var con
text = null;\n if (!stack.length) {\n stack.push(ancestor);\n
} else {\n if (isInsertionPoint(ancestor)) { // 3.4.3.\n
context = topMostNotInsertionPoint(stack);\n // isDistributed is m
ore general than checking whether last is\n // assigned into ancestor
.\n if (isDistributed(last)) { // 3.4.3.2.\n var head =
stack[stack.length - 1];\n stack.push(head);\n }\n
}\n }\n\n if (inSameTree(ancestor, target)) // 3.4.4.\n
return stack[stack.length - 1];\n\n if (isShadowRoot(ancestor)) //
3.4.5.\n stack.pop();\n\n last = ancestor; // 3.4.6.\n a
ncestor = calculateParents(ancestor, context, ancestors); // 3.4.7.\n }\n
if (isShadowRoot(target)) // 3.5.\n target = target.host;\n el
se\n target = target.parentNode; // 3.6.\n }\n }\n\n function getIn
sertionParent(node) {\n return scope.insertionParentTable.get(node);\n }\n\n
function isDistributed(node) {\n return getInsertionParent(node);\n }\n\n
function rootOfNode(node) {\n var p;\n while (p = node.parentNode) {\n
node = p;\n }\n return node;\n }\n\n function inSameTree(a, b) {\n
return rootOfNode(a) === rootOfNode(b);\n }\n\n function enclosedBy(a, b) {\n
if (a === b)\n return true;\n if (a instanceof wrappers.ShadowRoot)\
n return enclosedBy(rootOfNode(a.host), b);\n return false;\n }\n\n\n
function dispatchOriginalEvent(originalEvent) {\n // Make sure this event is
only dispatched once.\n if (handledEventsTable.get(originalEvent))\n ret
urn;\n handledEventsTable.set(originalEvent, true);\n\n return dispatchEve
nt(wrap(originalEvent), wrap(originalEvent.target));\n }\n\n function dispatch
Event(event, originalWrapperTarget) {\n if (currentlyDispatchingEvents.get(ev
ent))\n throw new Error('InvalidStateError')\n currentlyDispatchingEvent
s.set(event, true);\n\n // Render to ensure that the event path is correct.\n
scope.renderAllPending();\n var eventPath = retarget(originalWrapperTarge
t);\n\n // For window load events the load event is dispatched at the window
but\n // the target is set to the document.\n //\n // http://www.whatwg
.org/specs/web-apps/current-work/multipage/the-end.html#the-end\n //\n //
TODO(arv): Find a less hacky way to do this.\n if (event.type === 'load' &&\n
eventPath.length === 2 &&\n eventPath[0].target instanceof wrappe
rs.Document) {\n eventPath.shift();\n }\n\n eventPathTable.set(event,
eventPath);\n\n if (dispatchCapturing(event, eventPath)) {\n if (dispat
chAtTarget(event, eventPath)) {\n dispatchBubbling(event, eventPath);\n
}\n }\n\n eventPhaseTable.set(event, Event.NONE);\n currentTargetTa
ble.delete(event, null);\n currentlyDispatchingEvents.delete(event);\n\n r
eturn event.defaultPrevented;\n }\n\n function dispatchCapturing(event, eventP
ath) {\n var phase;\n\n for (var i = eventPath.length - 1; i > 0; i--) {\n
var target = eventPath[i].target;\n var currentTarget = eventPath[i].
currentTarget;\n if (target === currentTarget)\n continue;\n\n
phase = Event.CAPTURING_PHASE;\n if (!invoke(eventPath[i], event, phase))\n
return false;\n }\n\n return true;\n }\n\n function dispatchAtTa
rget(event, eventPath) {\n var phase = Event.AT_TARGET;\n return invoke(ev
entPath[0], event, phase);\n }\n\n function dispatchBubbling(event, eventPath)
{\n var bubbles = event.bubbles;\n var phase;\n\n for (var i = 1; i <
eventPath.length; i++) {\n var target = eventPath[i].target;\n var cur
rentTarget = eventPath[i].currentTarget;\n if (target === currentTarget)\n
phase = Event.AT_TARGET;\n else if (bubbles && !stopImmediatePropaga
tionTable.get(event))\n phase = Event.BUBBLING_PHASE;\n else\n
continue;\n\n if (!invoke(eventPath[i], event, phase))\n return;\n
}\n }\n\n function invoke(tuple, event, phase) {\n var target = tuple.t
arget;\n var currentTarget = tuple.currentTarget;\n\n var listeners = list
enersTable.get(currentTarget);\n if (!listeners)\n return true;\n\n i
f ('relatedTarget' in event) {\n var originalEvent = unwrap(event);\n
// X-Tag sets relatedTarget on a CustomEvent. If they do that there is no\n
// way to have relatedTarget return the adjusted target but worse is that\n
// the originalEvent might not have a relatedTarget so we hit an assert\n
// when we try to wrap it.\n if (originalEvent.relatedTarget) {\n v
ar relatedTarget = wrap(originalEvent.relatedTarget);\n\n var adjusted =
adjustRelatedTarget(currentTarget, relatedTarget);\n if (adjusted === tar
get)\n return true;\n\n relatedTargetTable.set(event, adjusted);
\n }\n }\n\n eventPhaseTable.set(event, phase);\n var type = event
.type;\n\n var anyRemoved = false;\n targetTable.set(event, target);\n
currentTargetTable.set(event, currentTarget);\n\n for (var i = 0; i < listene
rs.length; i++) {\n var listener = listeners[i];\n if (listener.remove
d) {\n anyRemoved = true;\n continue;\n }\n\n if (listen
er.type !== type ||\n !listener.capture && phase === Event.CAPTURING_PH
ASE ||\n listener.capture && phase === Event.BUBBLING_PHASE) {\n
continue;\n }\n\n try {\n if (typeof listener.handler === 'fun
ction')\n listener.handler.call(currentTarget, event);\n else\n
listener.handler.handleEvent(event);\n\n if (stopImmediatePropag
ationTable.get(event))\n return false;\n\n } catch (ex) {\n
if (window.onerror)\n window.onerror(ex.message);\n else\n
console.error(ex, ex.stack);\n }\n }\n\n if (anyRemoved) {\n
var copy = listeners.slice();\n listeners.length = 0;\n for (var i =
0; i < copy.length; i++) {\n if (!copy[i].removed)\n listeners.
push(copy[i]);\n }\n }\n\n return !stopPropagationTable.get(event);\n
}\n\n function Listener(type, handler, capture) {\n this.type = type;\n
this.handler = handler;\n this.capture = Boolean(capture);\n }\n Listener.
prototype = {\n equals: function(that) {\n return this.handler === that.
handler && this.type === that.type &&\n this.capture === that.capture;\
n },\n get removed() {\n return this.handler === null;\n },\n r
emove: function() {\n this.handler = null;\n }\n };\n\n var OriginalEv
ent = window.Event;\n OriginalEvent.prototype.polymerBlackList_ = {\n return
Value: true,\n // TODO(arv): keyLocation is part of KeyboardEvent but Firefox
does not\n // support constructable KeyboardEvent so we keep it here for now
.\n keyLocation: true\n };\n\n /**\n * Creates a new Event wrapper or wra
ps an existin native Event object.\n * @param {string|Event} type\n * @param
{Object=} options\n * @constructor\n */\n function Event(type, options) {\
n if (type instanceof OriginalEvent)\n this.impl = type;\n else\n
return wrap(constructEvent(OriginalEvent, 'Event', type, options));\n }\n Ev
ent.prototype = {\n get target() {\n return targetTable.get(this);\n
},\n get currentTarget() {\n return currentTargetTable.get(this);\n }
,\n get eventPhase() {\n return eventPhaseTable.get(this);\n },\n
get path() {\n var nodeList = new wrappers.NodeList();\n var eventPath
= eventPathTable.get(this);\n if (eventPath) {\n var index = 0;\n
var lastIndex = eventPath.length - 1;\n var baseRoot = rootOfNode(c
urrentTargetTable.get(this));\n\n for (var i = 0; i <= lastIndex; i++) {\
n var currentTarget = eventPath[i].currentTarget;\n var curren
tRoot = rootOfNode(currentTarget);\n if (enclosedBy(baseRoot, currentRo
ot) &&\n // Make sure we do not add Window to the path.\n
(i !== lastIndex || currentTarget instanceof wrappers.Node)) {\n
nodeList[index++] = currentTarget;\n }\n }\n nodeList.len
gth = index;\n }\n return nodeList;\n },\n stopPropagation: func
tion() {\n stopPropagationTable.set(this, true);\n },\n stopImmediate
Propagation: function() {\n stopPropagationTable.set(this, true);\n st
opImmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper(Ori
ginalEvent, Event, document.createEvent('Event'));\n\n function unwrapOptions(o
ptions) {\n if (!options || !options.relatedTarget)\n return options;\n
return Object.create(options, {\n relatedTarget: {value: unwrap(options.
relatedTarget)}\n });\n }\n\n function registerGenericEvent(name, SuperEven
t, prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = f
unction(type, options) {\n if (type instanceof OriginalEvent)\n this
.impl = type;\n else\n return wrap(constructEvent(OriginalEvent, nam
e, type, options));\n };\n GenericEvent.prototype = Object.create(SuperEve
nt.prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prototyp
e);\n if (OriginalEvent) {\n // - Old versions of Safari fails on new Fo
cusEvent (and others?).\n // - IE does not support event constructors.\n
// - createEvent('FocusEvent') throws in Firefox.\n // => Try the best p
ractice solution first and fallback to the old way\n // if needed.\n t
ry {\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('te
mp'));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEven
t,\n document.createEvent(name));\n }\n }\n re
turn GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', Event
);\n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var rel
atedTargetProto = {\n get relatedTarget() {\n return relatedTargetTable.
get(this) || wrap(unwrap(this).relatedTarget);\n }\n };\n\n function getIni
tFunction(name, relatedTargetIndex) {\n return function() {\n arguments[
relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);\n var impl = u
nwrap(this);\n impl[name].apply(impl, arguments);\n };\n }\n\n var mou
seEventProto = mixin({\n initMouseEvent: getInitFunction('initMouseEvent', 14
)\n }, relatedTargetProto);\n\n var focusEventProto = mixin({\n initFocusEv
ent: getInitFunction('initFocusEvent', 5)\n }, relatedTargetProto);\n\n var Mo
useEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);\n var
FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);\n\n
// In case the browser does not support event constructors we polyfill that\n /
/ by calling `createEvent('Foo')` and `initFooEvent` where the arguments to\n /
/ `initFooEvent` are derived from the registered default event init dict.\n var
defaultInitDicts = Object.create(null);\n\n var supportsEventConstructors = (f
unction() {\n try {\n new window.FocusEvent('focus');\n } catch (ex)
{\n return false;\n }\n return true;\n })();\n\n /**\n * Construc
ts a new native event.\n */\n function constructEvent(OriginalEvent, name, ty
pe, options) {\n if (supportsEventConstructors)\n return new OriginalEve
nt(type, unwrapOptions(options));\n\n // Create the arguments from the defaul
t dictionary.\n var event = unwrap(document.createEvent(name));\n var defa
ultDict = defaultInitDicts[name];\n var args = [type];\n Object.keys(defau
ltDict).forEach(function(key) {\n var v = options != null && key in options
?\n options[key] : defaultDict[key];\n if (key === 'relatedTarget
')\n v = unwrap(v);\n args.push(v);\n });\n event['init' + nam
e].apply(event, args);\n return event;\n }\n\n if (!supportsEventConstructo
rs) {\n var configureEventConstructor = function(name, initDict, superName) {
\n if (superName) {\n var superDict = defaultInitDicts[superName];\n
initDict = mixin(mixin({}, superDict), initDict);\n }\n\n defa
ultInitDicts[name] = initDict;\n };\n\n // The order of the default event
init dictionary keys is important, the\n // arguments to initFooEvent is deri
ved from that.\n configureEventConstructor('Event', {bubbles: false, cancelab
le: false});\n configureEventConstructor('CustomEvent', {detail: null}, 'Even
t');\n configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event')
;\n configureEventConstructor('MouseEvent', {\n screenX: 0,\n scree
nY: 0,\n clientX: 0,\n clientY: 0,\n ctrlKey: false,\n altKe
y: false,\n shiftKey: false,\n metaKey: false,\n button: 0,\n
relatedTarget: null\n }, 'UIEvent');\n configureEventConstructor('FocusE
vent', {relatedTarget: null}, 'UIEvent');\n }\n\n function BeforeUnloadEvent(i
mpl) {\n Event.call(this);\n }\n BeforeUnloadEvent.prototype = Object.creat
e(Event.prototype);\n mixin(BeforeUnloadEvent.prototype, {\n get returnValue
() {\n return this.impl.returnValue;\n },\n set returnValue(v) {\n
this.impl.returnValue = v;\n }\n });\n\n function isValidListener(fun) {
\n if (typeof fun === 'function')\n return true;\n return fun && fun.
handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (type) {\n
case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n case '
DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n case 'DOM
NodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'DOMNodeRe
moved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtreeModifie
d':\n return true;\n }\n return false;\n }\n\n var OriginalEventT
arget = window.EventTarget;\n\n /**\n * This represents a wrapper for an Even
tTarget.\n * @param {!EventTarget} impl The original event target.\n * @cons
tructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n }\n\n
// Node and Window have different internal type checks in WebKit so we cannot\n
// use the same method as the original function.\n var methodNames = [\n 'a
ddEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];\n\n [N
ode, Window].forEach(function(constructor) {\n var p = constructor.prototype;
\n methodNames.forEach(function(name) {\n Object.defineProperty(p, name
+ '_', {value: p[name]});\n });\n });\n\n function getTargetToListenAt(wrap
per) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper = wrapper
.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\n add
EventListener: function(type, fun, capture) {\n if (!isValidListener(fun) |
| isMutationEvent(type))\n return;\n\n var listener = new Listener(t
ype, fun, capture);\n var listeners = listenersTable.get(this);\n if (
!listeners) {\n listeners = [];\n listenersTable.set(this, listene
rs);\n } else {\n // Might have a duplicate.\n for (var i = 0
; i < listeners.length; i++) {\n if (listener.equals(listeners[i]))\n
return;\n }\n }\n\n listeners.push(listener);\n\n
var target = getTargetToListenAt(this);\n target.addEventListener_(type,
dispatchOriginalEvent, true);\n },\n removeEventListener: function(type, f
un, capture) {\n capture = Boolean(capture);\n var listeners = listene
rsTable.get(this);\n if (!listeners)\n return;\n var count = 0,
found = false;\n for (var i = 0; i < listeners.length; i++) {\n if
(listeners[i].type === type && listeners[i].capture === capture) {\n co
unt++;\n if (listeners[i].handler === fun) {\n found = true;
\n listeners[i].remove();\n }\n }\n }\n\n i
f (found && count === 1) {\n var target = getTargetToListenAt(this);\n
target.removeEventListener_(type, dispatchOriginalEvent, true);\n }\n
},\n dispatchEvent: function(event) {\n // We want to use the native
dispatchEvent because it triggers the default\n // actions (like checking a
checkbox). However, if there are no listeners\n // in the composed tree th
en there are no events that will trigger and\n // listeners in the non comp
osed tree that are part of the event path are\n // not notified.\n //\
n // If we find out that there are no listeners in the composed tree we add
\n // a temporary listener to the target which makes us get called back eve
n\n // in that case.\n\n var nativeEvent = unwrap(event);\n var e
ventType = nativeEvent.type;\n\n // Allow dispatching the same event again.
This is safe because if user\n // code calls this during an existing dispa
tch of the same event the\n // native dispatchEvent throws (that is require
d by the spec).\n handledEventsTable.set(nativeEvent, false);\n\n // F
orce rendering since we prefer native dispatch and that works on the\n // c
omposed tree.\n scope.renderAllPending();\n\n var tempListener;\n
if (!hasListenerInAncestors(this, eventType)) {\n tempListener = functio
n() {};\n this.addEventListener(eventType, tempListener, true);\n }\
n\n try {\n return unwrap(this).dispatchEvent_(nativeEvent);\n
} finally {\n if (tempListener)\n this.removeEventListener(event
Type, tempListener, true);\n }\n }\n };\n\n function hasListener(node,
type) {\n var listeners = listenersTable.get(node);\n if (listeners) {\n
for (var i = 0; i < listeners.length; i++) {\n if (!listeners[i].rem
oved && listeners[i].type === type)\n return true;\n }\n }\n
return false;\n }\n\n function hasListenerInAncestors(target, type) {\n fo
r (var node = unwrap(target); node; node = node.parentNode) {\n if (hasList
ener(wrap(node), type))\n return true;\n }\n return false;\n }\n\n
if (OriginalEventTarget)\n registerWrapper(OriginalEventTarget, EventTarget
);\n\n function wrapEventTargetMethods(constructors) {\n forwardMethodsToWra
pper(constructors, methodNames);\n }\n\n var originalElementFromPoint = docume
nt.elementFromPoint;\n\n function elementFromPoint(self, document, x, y) {\n
scope.renderAllPending();\n\n var element = wrap(originalElementFromPoint.ca
ll(document.impl, x, y));\n var targets = retarget(element, this)\n for (v
ar i = 0; i < targets.length; i++) {\n var target = targets[i];\n if (
target.currentTarget === self)\n return target.target;\n }\n return
null;\n }\n\n /**\n * Returns a function that is to be used as a getter for
`onfoo` properties.\n * @param {string} name\n * @return {Function}\n */\
n function getEventHandlerGetter(name) {\n return function() {\n var in
lineEventHandlers = eventHandlersTable.get(this);\n return inlineEventHandl
ers && inlineEventHandlers[name] &&\n inlineEventHandlers[name].value |
| null;\n };\n }\n\n /**\n * Returns a function that is to be used as a
setter for `onfoo` properties.\n * @param {string} name\n * @return {Functio
n}\n */\n function getEventHandlerSetter(name) {\n var eventType = name.sl
ice(2);\n return function(value) {\n var inlineEventHandlers = eventHand
lersTable.get(this);\n if (!inlineEventHandlers) {\n inlineEventHand
lers = Object.create(null);\n eventHandlersTable.set(this, inlineEventHan
dlers);\n }\n\n var old = inlineEventHandlers[name];\n if (old)\n
this.removeEventListener(eventType, old.wrapped, false);\n\n if (ty
peof value === 'function') {\n var wrapped = function(e) {\n var
rv = value.call(this, e);\n if (rv === false)\n e.preventDe
fault();\n else if (name === 'onbeforeunload' && typeof rv === 'string'
)\n e.returnValue = rv;\n // mouseover uses true for prevent
Default but preventDefault for\n // mouseover is ignored by browsers th
ese day.\n };\n\n this.addEventListener(eventType, wrapped, false)
;\n inlineEventHandlers[name] = {\n value: value,\n wra
pped: wrapped\n };\n }\n };\n }\n\n scope.adjustRelatedTarget =
adjustRelatedTarget;\n scope.elementFromPoint = elementFromPoint;\n scope.get
EventHandlerGetter = getEventHandlerGetter;\n scope.getEventHandlerSetter = get
EventHandlerSetter;\n scope.wrapEventTargetMethods = wrapEventTargetMethods;\n
scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;\n scope.wrappers.CustomE
vent = CustomEvent;\n scope.wrappers.Event = Event;\n scope.wrappers.EventTarg
et = EventTarget;\n scope.wrappers.FocusEvent = FocusEvent;\n scope.wrappers.M
ouseEvent = MouseEvent;\n scope.wrappers.UIEvent = UIEvent;\n\n})(window.Shadow
DOMPolyfill);\n", |
| 107 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var wrap = scope.wrap;\n
\n function nonEnum(obj, prop) {\n Object.defineProperty(obj, prop, {enumera
ble: false});\n }\n\n function NodeList() {\n this.length = 0;\n nonEnum
(this, 'length');\n }\n NodeList.prototype = {\n item: function(index) {\n
return this[index];\n }\n };\n nonEnum(NodeList.prototype, 'item');\n\
n function wrapNodeList(list) {\n if (list == null)\n return list;\n
var wrapperList = new NodeList();\n for (var i = 0, length = list.length; i
< length; i++) {\n wrapperList[i] = wrap(list[i]);\n }\n wrapperList.
length = length;\n return wrapperList;\n }\n\n function addWrapNodeListMeth
od(wrapperConstructor, name) {\n wrapperConstructor.prototype[name] = functio
n() {\n return wrapNodeList(this.impl[name].apply(this.impl, arguments));\n
};\n }\n\n scope.wrappers.NodeList = NodeList;\n scope.addWrapNodeListMet
hod = addWrapNodeListMethod;\n scope.wrapNodeList = wrapNodeList;\n\n})(window.
ShadowDOMPolyfill);\n", |
| 108 "// Copyright 2012 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.
wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n var assert =
scope.assert;\n var defineWrapGetter = scope.defineWrapGetter;\n var enqueueM
utation = scope.enqueueMutation;\n var isWrapper = scope.isWrapper;\n var mixi
n = scope.mixin;\n var registerTransientObservers = scope.registerTransientObse
rvers;\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unw
rap;\n var wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapIfNeeded;\n var
wrappers = scope.wrappers;\n\n function assertIsNodeWrapper(node) {\n assert
(node instanceof Node);\n }\n\n function createOneElementNodeList(node) {\n
var nodes = new NodeList();\n nodes[0] = node;\n nodes.length = 1;\n r
eturn nodes;\n }\n\n var surpressMutations = false;\n\n /**\n * Called befo
re node is inserted into a node to enqueue its removal from its\n * old parent
.\n * @param {!Node} node The node that is about to be removed.\n * @param {
!Node} parent The parent node that the node is being removed from.\n * @param
{!NodeList} nodes The collected nodes.\n */\n function enqueueRemovalForInser
tedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'childList', {\n
removedNodes: nodes,\n previousSibling: node.previousSibling,\n nex
tSibling: node.nextSibling\n });\n }\n\n function enqueueRemovalForInserted
DocumentFragment(df, nodes) {\n enqueueMutation(df, 'childList', {\n rem
ovedNodes: nodes\n });\n }\n\n /**\n * Collects nodes from a DocumentFrag
ment or a Node for removal followed\n * by an insertion.\n *\n * This upda
tes the internal pointers for node, previousNode and nextNode.\n */\n functio
n collectNodes(node, parentNode, previousNode, nextNode) {\n if (node instanc
eof DocumentFragment) {\n var nodes = collectNodesForDocumentFragment(node)
;\n\n // The extra loop is to work around bugs with DocumentFragments in IE
.\n surpressMutations = true;\n for (var i = nodes.length - 1; i >= 0;
i--) {\n node.removeChild(nodes[i]);\n nodes[i].parentNode_ = par
entNode;\n }\n surpressMutations = false;\n\n for (var i = 0; i <
nodes.length; i++) {\n nodes[i].previousSibling_ = nodes[i - 1] || previ
ousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextNode;\n }\n\n
if (previousNode)\n previousNode.nextSibling_ = nodes[0];\n if
(nextNode)\n nextNode.previousSibling_ = nodes[nodes.length - 1];\n\n
return nodes;\n }\n\n var nodes = createOneElementNodeList(node);\n
var oldParent = node.parentNode;\n if (oldParent) {\n // This will enque
ue the mutation record for the removal as needed.\n oldParent.removeChild(n
ode);\n }\n\n node.parentNode_ = parentNode;\n node.previousSibling_ =
previousNode;\n node.nextSibling_ = nextNode;\n if (previousNode)\n p
reviousNode.nextSibling_ = node;\n if (nextNode)\n nextNode.previousSibl
ing_ = node;\n\n return nodes;\n }\n\n function collectNodesNative(node) {\
n if (node instanceof DocumentFragment)\n return collectNodesForDocument
Fragment(node);\n\n var nodes = createOneElementNodeList(node);\n var oldP
arent = node.parentNode;\n if (oldParent)\n enqueueRemovalForInsertedNod
es(node, oldParent, nodes);\n return nodes;\n }\n\n function collectNodesFo
rDocumentFragment(node) {\n var nodes = new NodeList();\n var i = 0;\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n nod
es[i++] = child;\n }\n nodes.length = i;\n enqueueRemovalForInsertedDoc
umentFragment(node, nodes);\n return nodes;\n }\n\n function snapshotNodeLi
st(nodeList) {\n // NodeLists are not live at the moment so just return the s
ame object.\n return nodeList;\n }\n\n // http://dom.spec.whatwg.org/#node-
is-inserted\n function nodeWasAdded(node) {\n node.nodeIsInserted_();\n }\n
\n function nodesWereAdded(nodes) {\n for (var i = 0; i < nodes.length; i++)
{\n nodeWasAdded(nodes[i]);\n }\n }\n\n // http://dom.spec.whatwg.org
/#node-is-removed\n function nodeWasRemoved(node) {\n // Nothing at this poi
nt in time.\n }\n\n function nodesWereRemoved(nodes) {\n // Nothing at this
point in time.\n }\n\n function ensureSameOwnerDocument(parent, child) {\n
var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?\n parent : paren
t.ownerDocument;\n if (ownerDoc !== child.ownerDocument)\n ownerDoc.adop
tNode(child);\n }\n\n function adoptNodesIfNeeded(owner, nodes) {\n if (!no
des.length)\n return;\n\n var ownerDoc = owner.ownerDocument;\n\n //
All nodes have the same ownerDocument when we get here.\n if (ownerDoc === no
des[0].ownerDocument)\n return;\n\n for (var i = 0; i < nodes.length; i+
+) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc);\n }\n }\n\n functi
on unwrapNodesForInsertion(owner, nodes) {\n adoptNodesIfNeeded(owner, nodes)
;\n var length = nodes.length;\n\n if (length === 1)\n return unwrap(
nodes[0]);\n\n var df = unwrap(owner.ownerDocument.createDocumentFragment());
\n for (var i = 0; i < length; i++) {\n df.appendChild(unwrap(nodes[i]))
;\n }\n return df;\n }\n\n function clearChildNodes(wrapper) {\n if (
wrapper.firstChild_ !== undefined) {\n var child = wrapper.firstChild_;\n
while (child) {\n var tmp = child;\n child = child.nextSibling
_;\n tmp.parentNode_ = tmp.previousSibling_ = tmp.nextSibling_ = undefine
d;\n }\n }\n wrapper.firstChild_ = wrapper.lastChild_ = undefined;\n
}\n\n function removeAllChildNodes(wrapper) {\n if (wrapper.invalidateShado
wRenderer()) {\n var childWrapper = wrapper.firstChild;\n while (child
Wrapper) {\n assert(childWrapper.parentNode === wrapper);\n var ne
xtSibling = childWrapper.nextSibling;\n var childNode = unwrap(childWrapp
er);\n var parentNode = childNode.parentNode;\n if (parentNode)\n
originalRemoveChild.call(parentNode, childNode);\n childWrapper.
previousSibling_ = childWrapper.nextSibling_ =\n childWrapper.parentN
ode_ = null;\n childWrapper = nextSibling;\n }\n wrapper.firstC
hild_ = wrapper.lastChild_ = null;\n } else {\n var node = unwrap(wrappe
r);\n var child = node.firstChild;\n var nextSibling;\n while (ch
ild) {\n nextSibling = child.nextSibling;\n originalRemoveChild.ca
ll(node, child);\n child = nextSibling;\n }\n }\n }\n\n functio
n invalidateParent(node) {\n var p = node.parentNode;\n return p && p.inva
lidateShadowRenderer();\n }\n\n function cleanupNodes(nodes) {\n for (var i
= 0, n; i < nodes.length; i++) {\n n = nodes[i];\n n.parentNode.remov
eChild(n);\n }\n }\n\n var originalImportNode = document.importNode;\n var
originalCloneNode = window.Node.prototype.cloneNode;\n\n function cloneNode(no
de, deep, opt_doc) {\n var clone;\n if (opt_doc)\n clone = wrap(origi
nalImportNode.call(opt_doc, node.impl, false));\n else\n clone = wrap(or
iginalCloneNode.call(node.impl, false));\n\n if (deep) {\n for (var chil
d = node.firstChild; child; child = child.nextSibling) {\n clone.appendCh
ild(cloneNode(child, true, opt_doc));\n }\n\n if (node instanceof wrap
pers.HTMLTemplateElement) {\n var cloneContent = clone.content;\n
for (var child = node.content.firstChild;\n child;\n chi
ld = child.nextSibling) {\n cloneContent.appendChild(cloneNode(child, tr
ue, opt_doc));\n }\n }\n }\n // TODO(arv): Some HTML elements
also clone other data like value.\n return clone;\n }\n\n var OriginalNode
= window.Node;\n\n /**\n * This represents a wrapper of a native DOM node.\n
* @param {!Node} original The original DOM node, aka, the visual DOM node.\n
* @constructor\n * @extends {EventTarget}\n */\n function Node(original) {
\n assert(original instanceof OriginalNode);\n\n EventTarget.call(this, or
iginal);\n\n // These properties are used to override the visual references w
ith the\n // logical ones. If the value is undefined it means that the logica
l is the\n // same as the visual.\n\n /**\n * @type {Node|undefined}\n
* @private\n */\n this.parentNode_ = undefined;\n\n /**\n * @
type {Node|undefined}\n * @private\n */\n this.firstChild_ = undefine
d;\n\n /**\n * @type {Node|undefined}\n * @private\n */\n this
.lastChild_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @priv
ate\n */\n this.nextSibling_ = undefined;\n\n /**\n * @type {Node|
undefined}\n * @private\n */\n this.previousSibling_ = undefined;\n
}\n\n var OriginalDocumentFragment = window.DocumentFragment;\n var originalAp
pendChild = OriginalNode.prototype.appendChild;\n var originalCompareDocumentPo
sition =\n OriginalNode.prototype.compareDocumentPosition;\n var originalI
nsertBefore = OriginalNode.prototype.insertBefore;\n var originalRemoveChild =
OriginalNode.prototype.removeChild;\n var originalReplaceChild = OriginalNode.p
rototype.replaceChild;\n\n var isIe = /Trident/.test(navigator.userAgent);\n\n
var removeChildOriginalHelper = isIe ?\n function(parent, child) {\n
try {\n originalRemoveChild.call(parent, child);\n } catch (ex
) {\n if (!(parent instanceof OriginalDocumentFragment))\n t
hrow ex;\n }\n } :\n function(parent, child) {\n origina
lRemoveChild.call(parent, child);\n };\n\n Node.prototype = Object.create(
EventTarget.prototype);\n mixin(Node.prototype, {\n appendChild: function(ch
ildWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n\n
insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrapper(
childWrapper);\n\n var refNode;\n if (refWrapper) {\n if (isWra
pper(refWrapper)) {\n refNode = unwrap(refWrapper);\n } else {\n
refNode = refWrapper;\n refWrapper = wrap(refNode);\n
}\n } else {\n refWrapper = null;\n refNode = null;\n }\
n\n refWrapper && assert(refWrapper.parentNode === this);\n\n var node
s;\n var previousNode =\n refWrapper ? refWrapper.previousSibling
: this.lastChild;\n\n var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(childWrapper);\n\n if (useNative)\n
nodes = collectNodesNative(childWrapper);\n else\n nodes = c
ollectNodes(childWrapper, this, previousNode, refWrapper);\n\n if (useNativ
e) {\n ensureSameOwnerDocument(this, childWrapper);\n clearChildNo
des(this);\n originalInsertBefore.call(this.impl, unwrap(childWrapper), r
efNode);\n } else {\n if (!previousNode)\n this.firstChild_
= nodes[0];\n if (!refWrapper)\n this.lastChild_ = nodes[nodes.
length - 1];\n\n var parentNode = refNode ? refNode.parentNode : this.imp
l;\n\n // insertBefore refWrapper no matter what the parent is?\n
if (parentNode) {\n originalInsertBefore.call(parentNode,\n
unwrapNodesForInsertion(this, nodes), refNode);\n } else {\n a
doptNodesIfNeeded(this, nodes);\n }\n }\n\n enqueueMutation(thi
s, 'childList', {\n addedNodes: nodes,\n nextSibling: refWrapper,\
n previousSibling: previousNode\n });\n\n nodesWereAdded(nodes)
;\n\n return childWrapper;\n },\n\n removeChild: function(childWrappe
r) {\n assertIsNodeWrapper(childWrapper);\n if (childWrapper.parentNod
e !== this) {\n // IE has invalid DOM trees at times.\n var found
= false;\n var childNodes = this.childNodes;\n for (var ieChild =
this.firstChild; ieChild;\n ieChild = ieChild.nextSibling) {\n
if (ieChild === childWrapper) {\n found = true;\n brea
k;\n }\n }\n if (!found) {\n // TODO(arv): DOMEx
ception\n throw new Error('NotFoundError');\n }\n }\n\n
var childNode = unwrap(childWrapper);\n var childWrapperNextSibling = chi
ldWrapper.nextSibling;\n var childWrapperPreviousSibling = childWrapper.pre
viousSibling;\n\n if (this.invalidateShadowRenderer()) {\n // We nee
d to remove the real node from the DOM before updating the\n // pointers.
This is so that that mutation event is dispatched before\n // the pointe
rs have changed.\n var thisFirstChild = this.firstChild;\n var thi
sLastChild = this.lastChild;\n\n var parentNode = childNode.parentNode;\n
if (parentNode)\n removeChildOriginalHelper(parentNode, childNo
de);\n\n if (thisFirstChild === childWrapper)\n this.firstChild_
= childWrapperNextSibling;\n if (thisLastChild === childWrapper)\n
this.lastChild_ = childWrapperPreviousSibling;\n if (childWrapperPrev
iousSibling)\n childWrapperPreviousSibling.nextSibling_ = childWrapperN
extSibling;\n if (childWrapperNextSibling) {\n childWrapperNextS
ibling.previousSibling_ =\n childWrapperPreviousSibling;\n }
\n\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n
childWrapper.parentNode_ = undefined;\n } else {\n clearChildNo
des(this);\n removeChildOriginalHelper(this.impl, childNode);\n }\n\
n if (!surpressMutations) {\n enqueueMutation(this, 'childList', {\n
removedNodes: createOneElementNodeList(childWrapper),\n nextS
ibling: childWrapperNextSibling,\n previousSibling: childWrapperPreviou
sSibling\n });\n }\n\n registerTransientObservers(this, childWr
apper);\n\n return childWrapper;\n },\n\n replaceChild: function(newC
hildWrapper, oldChildWrapper) {\n assertIsNodeWrapper(newChildWrapper);\n\n
var oldChildNode;\n if (isWrapper(oldChildWrapper)) {\n oldChi
ldNode = unwrap(oldChildWrapper);\n } else {\n oldChildNode = oldChi
ldWrapper;\n oldChildWrapper = wrap(oldChildNode);\n }\n\n if (
oldChildWrapper.parentNode !== this) {\n // TODO(arv): DOMException\n
throw new Error('NotFoundError');\n }\n\n var nextNode = oldChildW
rapper.nextSibling;\n var previousNode = oldChildWrapper.previousSibling;\n
var nodes;\n\n var useNative = !this.invalidateShadowRenderer() &&\n
!invalidateParent(newChildWrapper);\n\n if (useNative)
{\n nodes = collectNodesNative(newChildWrapper);\n } else {\n
if (nextNode === newChildWrapper)\n nextNode = newChildWrapper.nextSi
bling;\n nodes = collectNodes(newChildWrapper, this, previousNode, nextNo
de);\n }\n\n if (!useNative) {\n if (this.firstChild === oldChi
ldWrapper)\n this.firstChild_ = nodes[0];\n if (this.lastChild =
== oldChildWrapper)\n this.lastChild_ = nodes[nodes.length - 1];\n\n
oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ =\n
oldChildWrapper.parentNode_ = undefined;\n\n // replaceChild no matte
r what the parent is?\n if (oldChildNode.parentNode) {\n origina
lReplaceChild.call(\n oldChildNode.parentNode,\n unwra
pNodesForInsertion(this, nodes),\n oldChildNode);\n }\n
} else {\n ensureSameOwnerDocument(this, newChildWrapper);\n clea
rChildNodes(this);\n originalReplaceChild.call(this.impl, unwrap(newChild
Wrapper),\n oldChildNode);\n }\n\n en
queueMutation(this, 'childList', {\n addedNodes: nodes,\n removedN
odes: createOneElementNodeList(oldChildWrapper),\n nextSibling: nextNode,
\n previousSibling: previousNode\n });\n\n nodeWasRemoved(oldCh
ildWrapper);\n nodesWereAdded(nodes);\n\n return oldChildWrapper;\n
},\n\n /**\n * Called after a node was inserted. Subclasses override thi
s to invalidate\n * the renderer as needed.\n * @private\n */\n n
odeIsInserted_: function() {\n for (var child = this.firstChild; child; chi
ld = child.nextSibling) {\n child.nodeIsInserted_();\n }\n },\n\n
hasChildNodes: function() {\n return this.firstChild !== null;\n },\
n\n /** @type {Node} */\n get parentNode() {\n // If the parentNode h
as not been overridden, use the original parentNode.\n return this.parentNo
de_ !== undefined ?\n this.parentNode_ : wrap(this.impl.parentNode);\n
},\n\n /** @type {Node} */\n get firstChild() {\n return this.firs
tChild_ !== undefined ?\n this.firstChild_ : wrap(this.impl.firstChild)
;\n },\n\n /** @type {Node} */\n get lastChild() {\n return this.l
astChild_ !== undefined ?\n this.lastChild_ : wrap(this.impl.lastChild)
;\n },\n\n /** @type {Node} */\n get nextSibling() {\n return this
.nextSibling_ !== undefined ?\n this.nextSibling_ : wrap(this.impl.next
Sibling);\n },\n\n /** @type {Node} */\n get previousSibling() {\n
return this.previousSibling_ !== undefined ?\n this.previousSibling_ :
wrap(this.impl.previousSibling);\n },\n\n get parentElement() {\n va
r p = this.parentNode;\n while (p && p.nodeType !== Node.ELEMENT_NODE) {\n
p = p.parentNode;\n }\n return p;\n },\n\n get textConten
t() {\n // TODO(arv): This should fallback to this.impl.textContent if ther
e\n // are no shadow trees below or above the context node.\n var s =
'';\n for (var child = this.firstChild; child; child = child.nextSibling) {
\n if (child.nodeType != Node.COMMENT_NODE) {\n s += child.textC
ontent;\n }\n }\n return s;\n },\n set textContent(textCo
ntent) {\n var removedNodes = snapshotNodeList(this.childNodes);\n\n i
f (this.invalidateShadowRenderer()) {\n removeAllChildNodes(this);\n
if (textContent !== '') {\n var textNode = this.impl.ownerDocument.c
reateTextNode(textContent);\n this.appendChild(textNode);\n }\n
} else {\n clearChildNodes(this);\n this.impl.textContent = t
extContent;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes)
;\n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,
\n removedNodes: removedNodes\n });\n\n nodesWereRemoved(remove
dNodes);\n nodesWereAdded(addedNodes);\n },\n\n get childNodes() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child =
this.firstChild; child; child = child.nextSibling) {\n wrapperList[i++]
= child;\n }\n wrapperList.length = i;\n return wrapperList;\n
},\n\n cloneNode: function(deep) {\n return cloneNode(this, deep);\n
},\n\n contains: function(child) {\n if (!child)\n return false;
\n\n child = wrapIfNeeded(child);\n\n // TODO(arv): Optimize using own
erDocument etc.\n if (child === this)\n return true;\n var pare
ntNode = child.parentNode;\n if (!parentNode)\n return false;\n
return this.contains(parentNode);\n },\n\n compareDocumentPosition: funct
ion(otherNode) {\n // This only wraps, it therefore only operates on the co
mposed DOM and not\n // the logical DOM.\n return originalCompareDocum
entPosition.call(this.impl, unwrap(otherNode));\n },\n\n normalize: functi
on() {\n var nodes = snapshotNodeList(this.childNodes);\n var remNodes
= [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i < no
des.length; i++) {\n n = nodes[i];\n if (n.nodeType === Node.TEXT_
NODE) {\n if (!modNode && !n.data.length)\n this.removeNode(
n);\n else if (!modNode)\n modNode = n;\n else {\n
s += n.data;\n remNodes.push(n);\n }\n } e
lse {\n if (modNode && remNodes.length) {\n modNode.data +=
s;\n cleanUpNodes(remNodes);\n }\n remNodes = [];\n
s = '';\n modNode = null;\n if (n.childNodes.length)
\n n.normalize();\n }\n }\n\n // handle case where >
1 text nodes are the last children\n if (modNode && remNodes.length) {\n
modNode.data += s;\n cleanupNodes(remNodes);\n }\n }\n });\
n\n defineWrapGetter(Node, 'ownerDocument');\n\n // We use a DocumentFragment
as a base and then delete the properties of\n // DocumentFragment.prototype fro
m the wrapper Node. Since delete makes\n // objects slow in some JS engines we
recreate the prototype object.\n registerWrapper(OriginalNode, Node, document.c
reateDocumentFragment());\n delete Node.prototype.querySelector;\n delete Node
.prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(EventTarget
.prototype), Node.prototype);\n\n scope.nodeWasAdded = nodeWasAdded;\n scope.n
odeWasRemoved = nodeWasRemoved;\n scope.nodesWereAdded = nodesWereAdded;\n sco
pe.nodesWereRemoved = nodesWereRemoved;\n scope.snapshotNodeList = snapshotNode
List;\n scope.wrappers.Node = Node;\n scope.cloneNode = cloneNode;\n\n})(windo
w.ShadowDOMPolyfill);\n", |
| 109 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is governed by a BSD-style\n// license that can be found in the LIC
ENSE file.\n\n(function(scope) {\n 'use strict';\n\n function findOne(node, se
lector) {\n var m, el = node.firstElementChild;\n while (el) {\n if (
el.matches(selector))\n return el;\n m = findOne(el, selector);\n
if (m)\n return m;\n el = el.nextElementSibling;\n }\n retu
rn null;\n }\n\n function findAll(node, selector, results) {\n var el = nod
e.firstElementChild;\n while (el) {\n if (el.matches(selector))\n
results[results.length++] = el;\n findAll(el, selector, results);\n e
l = el.nextElementSibling;\n }\n return results;\n }\n\n // find and fin
dAll will only match Simple Selectors,\n // Structural Pseudo Classes are not g
uarenteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple-select
ors\n\n var SelectorsInterface = {\n querySelector: function(selector) {\n
return findOne(this, selector);\n },\n querySelectorAll: function(sele
ctor) {\n return findAll(this, selector, new NodeList())\n }\n };\n\n
var GetElementsByInterface = {\n getElementsByTagName: function(tagName) {\n
// TODO(arv): Check tagName?\n return this.querySelectorAll(tagName);\
n },\n getElementsByClassName: function(className) {\n // TODO(arv):
Check className?\n return this.querySelectorAll('.' + className);\n },\n
getElementsByTagNameNS: function(ns, tagName) {\n if (ns === '*')\n
return this.getElementsByTagName(tagName);\n\n // TODO(arv): Check tagN
ame?\n var result = new NodeList;\n var els = this.getElementsByTagNam
e(tagName);\n for (var i = 0, j = 0; i < els.length; i++) {\n if (el
s[i].namespaceURI === ns)\n result[j++] = els[i];\n }\n resul
t.length = j;\n return result;\n }\n };\n\n scope.GetElementsByInterfa
ce = GetElementsByInterface;\n scope.SelectorsInterface = SelectorsInterface;\n
\n})(window.ShadowDOMPolyfill);\n", |
| 110 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var NodeList = scope.wra
ppers.NodeList;\n\n function forwardElement(node) {\n while (node && node.no
deType !== Node.ELEMENT_NODE) {\n node = node.nextSibling;\n }\n retu
rn node;\n }\n\n function backwardsElement(node) {\n while (node && node.no
deType !== Node.ELEMENT_NODE) {\n node = node.previousSibling;\n }\n
return node;\n }\n\n var ParentNodeInterface = {\n get firstElementChild()
{\n return forwardElement(this.firstChild);\n },\n\n get lastElementC
hild() {\n return backwardsElement(this.lastChild);\n },\n\n get chil
dElementCount() {\n var count = 0;\n for (var child = this.firstElemen
tChild;\n child;\n child = child.nextElementSibling) {\n
count++;\n }\n return count;\n },\n\n get children() {\n
var wrapperList = new NodeList();\n var i = 0;\n for (var child = th
is.firstElementChild;\n child;\n child = child.nextElementSi
bling) {\n wrapperList[i++] = child;\n }\n wrapperList.length =
i;\n return wrapperList;\n }\n };\n\n var ChildNodeInterface = {\n
get nextElementSibling() {\n return forwardElement(this.nextSibling);\n
},\n\n get previousElementSibling() {\n return backwardsElement(this.pr
eviousSibling);\n }\n };\n\n scope.ChildNodeInterface = ChildNodeInterface;
\n scope.ParentNodeInterface = ParentNodeInterface;\n\n})(window.ShadowDOMPolyf
ill);\n", |
| 111 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface =
scope.ChildNodeInterface;\n var Node = scope.wrappers.Node;\n var enqueueMuta
tion = scope.enqueueMutation;\n var mixin = scope.mixin;\n var registerWrapper
= scope.registerWrapper;\n\n var OriginalCharacterData = window.CharacterData;
\n\n function CharacterData(node) {\n Node.call(this, node);\n }\n Charact
erData.prototype = Object.create(Node.prototype);\n mixin(CharacterData.prototy
pe, {\n get textContent() {\n return this.data;\n },\n set textCon
tent(value) {\n this.data = value;\n },\n get data() {\n return
this.impl.data;\n },\n set data(value) {\n var oldValue = this.impl.d
ata;\n enqueueMutation(this, 'characterData', {\n oldValue: oldValue
\n });\n this.impl.data = value;\n }\n });\n\n mixin(CharacterDat
a.prototype, ChildNodeInterface);\n\n registerWrapper(OriginalCharacterData, Ch
aracterData,\n document.createTextNode(''));\n\n scope.wrapper
s.CharacterData = CharacterData;\n})(window.ShadowDOMPolyfill);\n", |
| 112 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var CharacterData = scop
e.wrappers.CharacterData;\n var enqueueMutation = scope.enqueueMutation;\n var
mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n\n funct
ion toUInt32(x) {\n return x >>> 0;\n }\n\n var OriginalText = window.Text;
\n\n function Text(node) {\n CharacterData.call(this, node);\n }\n Text.pr
ototype = Object.create(CharacterData.prototype);\n mixin(Text.prototype, {\n
splitText: function(offset) {\n offset = toUInt32(offset);\n var s =
this.data;\n if (offset > s.length)\n throw new Error('IndexSizeErr
or');\n var head = s.slice(0, offset);\n var tail = s.slice(offset);\n
this.data = head;\n var newTextNode = this.ownerDocument.createTextNo
de(tail);\n if (this.parentNode)\n this.parentNode.insertBefore(newT
extNode, this.nextSibling);\n return newTextNode;\n }\n });\n\n regist
erWrapper(OriginalText, Text, document.createTextNode(''));\n\n scope.wrappers.
Text = Text;\n})(window.ShadowDOMPolyfill);\n", |
| 113 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var ChildNodeInterface =
scope.ChildNodeInterface;\n var GetElementsByInterface = scope.GetElementsByIn
terface;\n var Node = scope.wrappers.Node;\n var ParentNodeInterface = scope.P
arentNodeInterface;\n var SelectorsInterface = scope.SelectorsInterface;\n var
addWrapNodeListMethod = scope.addWrapNodeListMethod;\n var enqueueMutation = s
cope.enqueueMutation;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n
var registerWrapper = scope.registerWrapper;\n var wrappers = scope.wrappers;\
n\n var OriginalElement = window.Element;\n\n var matchesNames = [\n 'match
es', // needs to come first.\n 'mozMatchesSelector',\n 'msMatchesSelector
',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n return Origin
alElement.prototype[name];\n });\n\n var matchesName = matchesNames[0];\n\n v
ar originalMatches = OriginalElement.prototype[matchesName];\n\n function inval
idateRendererBasedOnAttribute(element, name) {\n // Only invalidate if parent
node is a shadow host.\n var p = element.parentNode;\n if (!p || !p.shado
wRoot)\n return;\n\n var renderer = scope.getRendererForHost(p);\n if
(renderer.dependsOnAttribute(name))\n renderer.invalidate();\n }\n\n fun
ction enqueAttributeChange(element, name, oldValue) {\n // This is not fully
spec compliant. We should use localName (which might\n // have a different ca
se than name) and the namespace (which requires us\n // to get the Attr objec
t).\n enqueueMutation(element, 'attributes', {\n name: name,\n name
space: null,\n oldValue: oldValue\n });\n }\n\n function Element(node)
{\n Node.call(this, node);\n }\n Element.prototype = Object.create(Node.pr
ototype);\n mixin(Element.prototype, {\n createShadowRoot: function() {\n
var newShadowRoot = new wrappers.ShadowRoot(this);\n this.impl.polymerSh
adowRoot_ = newShadowRoot;\n\n var renderer = scope.getRendererForHost(this
);\n renderer.invalidate();\n\n return newShadowRoot;\n },\n\n g
et shadowRoot() {\n return this.impl.polymerShadowRoot_ || null;\n },\n\
n setAttribute: function(name, value) {\n var oldValue = this.impl.getAt
tribute(name);\n this.impl.setAttribute(name, value);\n enqueAttribute
Change(this, name, oldValue);\n invalidateRendererBasedOnAttribute(this, na
me);\n },\n\n removeAttribute: function(name) {\n var oldValue = this
.impl.getAttribute(name);\n this.impl.removeAttribute(name);\n enqueAt
tributeChange(this, name, oldValue);\n invalidateRendererBasedOnAttribute(t
his, name);\n },\n\n matches: function(selector) {\n return originalM
atches.call(this.impl, selector);\n }\n });\n\n matchesNames.forEach(functi
on(name) {\n if (name !== 'matches') {\n Element.prototype[name] = funct
ion(selector) {\n return this.matches(selector);\n };\n }\n });\
n\n if (OriginalElement.prototype.webkitCreateShadowRoot) {\n Element.protot
ype.webkitCreateShadowRoot =\n Element.prototype.createShadowRoot;\n }\n
\n /**\n * Useful for generating the accessor pair for a property that reflec
ts an\n * attribute.\n */\n function setterDirtiesAttribute(prototype, prop
ertyName, opt_attrName) {\n var attrName = opt_attrName || propertyName;\n
Object.defineProperty(prototype, propertyName, {\n get: function() {\n
return this.impl[propertyName];\n },\n set: function(v) {\n
this.impl[propertyName] = v;\n invalidateRendererBasedOnAttribute(this,
attrName);\n },\n configurable: true,\n enumerable: true\n });
\n }\n\n setterDirtiesAttribute(Element.prototype, 'id');\n setterDirtiesAttr
ibute(Element.prototype, 'className', 'class');\n\n mixin(Element.prototype, Ch
ildNodeInterface);\n mixin(Element.prototype, GetElementsByInterface);\n mixin
(Element.prototype, ParentNodeInterface);\n mixin(Element.prototype, SelectorsI
nterface);\n\n registerWrapper(OriginalElement, Element,\n doc
ument.createElementNS(null, 'x'));\n\n // TODO(arv): Export setterDirtiesAttrib
ute and apply it to more bindings\n // that reflect attributes.\n scope.matche
sNames = matchesNames;\n scope.wrappers.Element = Element;\n})(window.ShadowDOM
Polyfill);\n", |
| 114 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrap
pers.Element;\n var defineGetter = scope.defineGetter;\n var enqueueMutation =
scope.enqueueMutation;\n var mixin = scope.mixin;\n var nodesWereAdded = scop
e.nodesWereAdded;\n var nodesWereRemoved = scope.nodesWereRemoved;\n var regis
terWrapper = scope.registerWrapper;\n var snapshotNodeList = scope.snapshotNode
List;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers =
scope.wrappers;\n\n ///////////////////////////////////////////////////////////
//////////////////\n // innerHTML and outerHTML\n\n // http://www.whatwg.org/s
pecs/web-apps/current-work/multipage/the-end.html#escapingString\n var escapeAt
trRegExp = /[&\\u00A0\"]/g;\n var escapeDataRegExp = /[&\\u00A0<>]/g;\n\n func
tion escapeReplace(c) {\n switch (c) {\n case '&':\n return '&
;';\n case '<':\n return '<';\n case '>':\n return '&
gt;';\n case '\"':\n return '"'\n case '\\u00A0':\n
return ' ';\n }\n }\n\n function escapeAttr(s) {\n return s.replac
e(escapeAttrRegExp, escapeReplace);\n }\n\n function escapeData(s) {\n retu
rn s.replace(escapeDataRegExp, escapeReplace);\n }\n\n function makeSet(arr) {
\n var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i
]] = true;\n }\n return set;\n }\n\n // http://www.whatwg.org/specs/web-
apps/current-work/#void-elements\n var voidElements = makeSet([\n 'area',\n
'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n
'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n
'source',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([
\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'n
oframes',\n 'plaintext',\n 'noscript'\n ]);\n\n function getOuterHTML(no
de, parentNode) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n
var tagName = node.tagName.toLowerCase();\n var s = '<' + tagName
;\n var attrs = node.attributes;\n for (var i = 0, attr; attr = at
trs[i]; i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value)
+ '\"';\n }\n s += '>';\n if (voidElements[tagName])\n
return s;\n\n return s + getInnerHTML(node) + '</' + tagName + '>';\
n\n case Node.TEXT_NODE:\n var data = node.data;\n if (parent
Node && plaintextParents[parentNode.localName])\n return data;\n
return escapeData(data);\n\n case Node.COMMENT_NODE:\n return '<!--
' + node.data + '-->';\n\n default:\n console.error(node);\n
throw new Error('not implemented');\n }\n }\n\n function getInnerHTML(node)
{\n if (node instanceof wrappers.HTMLTemplateElement)\n node = node.con
tent;\n\n var s = '';\n for (var child = node.firstChild; child; child = c
hild.nextSibling) {\n s += getOuterHTML(child, node);\n }\n return s;
\n }\n\n function setInnerHTML(node, value, opt_tagName) {\n var tagName =
opt_tagName || 'div';\n node.textContent = '';\n var tempElement = unwrap(
node.ownerDocument.createElement(tagName));\n tempElement.innerHTML = value;\
n var firstChild;\n while (firstChild = tempElement.firstChild) {\n n
ode.appendChild(wrap(firstChild));\n }\n }\n\n // IE11 does not have MSIE i
n the user agent string.\n var oldIe = /MSIE/.test(navigator.userAgent);\n\n v
ar OriginalHTMLElement = window.HTMLElement;\n var OriginalHTMLTemplateElement
= window.HTMLTemplateElement;\n\n function HTMLElement(node) {\n Element.cal
l(this, node);\n }\n HTMLElement.prototype = Object.create(Element.prototype);
\n mixin(HTMLElement.prototype, {\n get innerHTML() {\n return getInner
HTML(this);\n },\n set innerHTML(value) {\n // IE9 does not handle se
t innerHTML correctly on plaintextParents. It\n // creates element children
. For example\n //\n // scriptElement.innerHTML = '<a>test</a>'\n
//\n // Creates a single HTMLAnchorElement child.\n if (oldIe && pl
aintextParents[this.localName]) {\n this.textContent = value;\n re
turn;\n }\n\n var removedNodes = snapshotNodeList(this.childNodes);\n\
n if (this.invalidateShadowRenderer()) {\n if (this instanceof wrapp
ers.HTMLTemplateElement)\n setInnerHTML(this.content, value);\n
else\n setInnerHTML(this, value, this.tagName);\n\n // If we have
a non native template element we need to handle this\n // manually since se
tting impl.innerHTML would add the html as direct\n // children and not be
moved over to the content fragment.\n } else if (!OriginalHTMLTemplateEleme
nt &&\n this instanceof wrappers.HTMLTemplateElement) {\n
setInnerHTML(this.content, value);\n } else {\n this.impl.innerHTML
= value;\n }\n\n var addedNodes = snapshotNodeList(this.childNodes);\
n\n enqueueMutation(this, 'childList', {\n addedNodes: addedNodes,\n
removedNodes: removedNodes\n });\n\n nodesWereRemoved(removedN
odes);\n nodesWereAdded(addedNodes);\n },\n\n get outerHTML() {\n
return getOuterHTML(this, this.parentNode);\n },\n set outerHTML(value)
{\n var p = this.parentNode;\n if (p) {\n p.invalidateShadowRen
derer();\n var df = frag(p, value);\n p.replaceChild(df, this);\n
}\n },\n\n insertAdjacentHTML: function(position, text) {\n var
contextElement, refNode;\n switch (String(position).toLowerCase()) {\n
case 'beforebegin':\n contextElement = this.parentNode;\n r
efNode = this;\n break;\n case 'afterend':\n contextEle
ment = this.parentNode;\n refNode = this.nextSibling;\n break;
\n case 'afterbegin':\n contextElement = this;\n refNod
e = this.firstChild;\n break;\n case 'beforeend':\n con
textElement = this;\n refNode = null;\n break;\n defaul
t:\n return;\n }\n\n var df = frag(contextElement, text);\n
contextElement.insertBefore(df, refNode);\n }\n });\n\n function frag(c
ontextElement, html) {\n // TODO(arv): This does not work with SVG and other
non HTML elements.\n var p = unwrap(contextElement.cloneNode(false));\n p.
innerHTML = html;\n var df = unwrap(document.createDocumentFragment());\n
var c;\n while (c = p.firstChild) {\n df.appendChild(c);\n }\n ret
urn wrap(df);\n }\n\n function getter(name) {\n return function() {\n
scope.renderAllPending();\n return this.impl[name];\n };\n }\n\n funct
ion getterRequiresRendering(name) {\n defineGetter(HTMLElement, name, getter(
name));\n }\n\n [\n 'clientHeight',\n 'clientLeft',\n 'clientTop',\n
'clientWidth',\n 'offsetHeight',\n 'offsetLeft',\n 'offsetTop',\n
'offsetWidth',\n 'scrollHeight',\n 'scrollWidth',\n ].forEach(getterRequ
iresRendering);\n\n function getterAndSetterRequiresRendering(name) {\n Obje
ct.defineProperty(HTMLElement.prototype, name, {\n get: getter(name),\n
set: function(v) {\n scope.renderAllPending();\n this.impl[name]
= v;\n },\n configurable: true,\n enumerable: true\n });\n }
\n\n [\n 'scrollLeft',\n 'scrollTop',\n ].forEach(getterAndSetterRequire
sRendering);\n\n function methodRequiresRendering(name) {\n Object.definePro
perty(HTMLElement.prototype, name, {\n value: function() {\n scope.r
enderAllPending();\n return this.impl[name].apply(this.impl, arguments);\
n },\n configurable: true,\n enumerable: true\n });\n }\n\n
[\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoView'\n
].forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we use a
subclass that has no members.\n registerWrapper(OriginalHTMLElement, HTMLElemen
t,\n document.createElement('b'));\n\n scope.wrappers.HTMLElem
ent = HTMLElement;\n\n // TODO: Find a better way to share these two with Wrapp
erShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML = setI
nnerHTML\n})(window.ShadowDOMPolyfill);\n", |
| 115 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var wrap = scope.wrap;\n\n var OriginalHTMLCanvasElement =
window.HTMLCanvasElement;\n\n function HTMLCanvasElement(node) {\n HTMLElem
ent.call(this, node);\n }\n HTMLCanvasElement.prototype = Object.create(HTMLEl
ement.prototype);\n\n mixin(HTMLCanvasElement.prototype, {\n getContext: fun
ction() {\n var context = this.impl.getContext.apply(this.impl, arguments);
\n return context && wrap(context);\n }\n });\n\n registerWrapper(Orig
inalHTMLCanvasElement, HTMLCanvasElement,\n document.createElem
ent('canvas'));\n\n scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;\n})(w
indow.ShadowDOMPolyfill);\n", |
| 116 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n\n var OriginalHTMLContentElement = window.HTMLContentElemen
t;\n\n function HTMLContentElement(node) {\n HTMLElement.call(this, node);\n
}\n HTMLContentElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLContentElement.prototype, {\n get select() {\n return this.getA
ttribute('select');\n },\n set select(value) {\n this.setAttribute('s
elect', value);\n },\n\n setAttribute: function(n, v) {\n HTMLElement
.prototype.setAttribute.call(this, n, v);\n if (String(n).toLowerCase() ===
'select')\n this.invalidateShadowRenderer(true);\n }\n\n // getDis
tributedNodes is added in ShadowRenderer\n\n // TODO: attribute boolean reset
StyleInheritance;\n });\n\n if (OriginalHTMLContentElement)\n registerWrapp
er(OriginalHTMLContentElement, HTMLContentElement);\n\n scope.wrappers.HTMLCont
entElement = HTMLContentElement;\n})(window.ShadowDOMPolyfill);\n", |
| 117 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var registerWrapper = scope.registerWrapper;\n var unw
rap = scope.unwrap;\n var rewrap = scope.rewrap;\n\n var OriginalHTMLImageElem
ent = window.HTMLImageElement;\n\n function HTMLImageElement(node) {\n HTMLE
lement.call(this, node);\n }\n HTMLImageElement.prototype = Object.create(HTML
Element.prototype);\n\n registerWrapper(OriginalHTMLImageElement, HTMLImageElem
ent,\n document.createElement('img'));\n\n function Image(widt
h, height) {\n if (!(this instanceof Image)) {\n throw new TypeError(\n
'DOM object constructor cannot be called as a function.');\n }\n\n
var node = unwrap(document.createElement('img'));\n HTMLElement.call(this,
node);\n rewrap(node, this);\n\n if (width !== undefined)\n node.widt
h = width;\n if (height !== undefined)\n node.height = height;\n }\n\n
Image.prototype = HTMLImageElement.prototype;\n\n scope.wrappers.HTMLImageElem
ent = HTMLImageElement;\n scope.wrappers.Image = Image;\n})(window.ShadowDOMPol
yfill);\n", |
| 118 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n\n var OriginalHTMLShadowElement = window.HTMLShadowElement;
\n\n function HTMLShadowElement(node) {\n HTMLElement.call(this, node);\n }
\n HTMLShadowElement.prototype = Object.create(HTMLElement.prototype);\n mixin
(HTMLShadowElement.prototype, {\n // TODO: attribute boolean resetStyleInheri
tance;\n });\n\n if (OriginalHTMLShadowElement)\n registerWrapper(OriginalH
TMLShadowElement, HTMLShadowElement);\n\n scope.wrappers.HTMLShadowElement = HT
MLShadowElement;\n})(window.ShadowDOMPolyfill);\n", |
| 119 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n v
ar contentTable = new WeakMap();\n var templateContentsOwnerTable = new WeakMap
();\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/inde
x.html#dfn-template-contents-owner\n function getTemplateContentsOwner(doc) {\n
if (!doc.defaultView)\n return doc;\n var d = templateContentsOwnerT
able.get(doc);\n if (!d) {\n // TODO(arv): This should either be a Docum
ent or HTMLDocument depending\n // on doc.\n d = doc.implementation.cr
eateHTMLDocument('');\n while (d.lastChild) {\n d.removeChild(d.last
Child);\n }\n templateContentsOwnerTable.set(doc, d);\n }\n retu
rn d;\n }\n\n function extractContent(templateElement) {\n // templateEleme
nt is not a wrapper here.\n var doc = getTemplateContentsOwner(templateElemen
t.ownerDocument);\n var df = unwrap(doc.createDocumentFragment());\n var c
hild;\n while (child = templateElement.firstChild) {\n df.appendChild(ch
ild);\n }\n return df;\n }\n\n var OriginalHTMLTemplateElement = window.
HTMLTemplateElement;\n\n function HTMLTemplateElement(node) {\n HTMLElement.
call(this, node);\n if (!OriginalHTMLTemplateElement) {\n var content =
extractContent(node);\n contentTable.set(this, wrap(content));\n }\n }\
n HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);\n\n mi
xin(HTMLTemplateElement.prototype, {\n get content() {\n if (OriginalHTM
LTemplateElement)\n return wrap(this.impl.content);\n return content
Table.get(this);\n },\n\n // TODO(arv): cloneNode needs to clone content.\
n\n });\n\n if (OriginalHTMLTemplateElement)\n registerWrapper(OriginalHTML
TemplateElement, HTMLTemplateElement);\n\n scope.wrappers.HTMLTemplateElement =
HTMLTemplateElement;\n})(window.ShadowDOMPolyfill);\n", |
| 120 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var registerWrapper = scope.registerWrapper;\n\n var O
riginalHTMLMediaElement = window.HTMLMediaElement;\n\n function HTMLMediaElemen
t(node) {\n HTMLElement.call(this, node);\n }\n HTMLMediaElement.prototype
= Object.create(HTMLElement.prototype);\n\n registerWrapper(OriginalHTMLMediaEl
ement, HTMLMediaElement,\n document.createElement('audio'));\n\
n scope.wrappers.HTMLMediaElement = HTMLMediaElement;\n})(window.ShadowDOMPolyf
ill);\n", |
| 121 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLMediaElement = s
cope.wrappers.HTMLMediaElement;\n var registerWrapper = scope.registerWrapper;\
n var unwrap = scope.unwrap;\n var rewrap = scope.rewrap;\n\n var OriginalHTM
LAudioElement = window.HTMLAudioElement;\n\n function HTMLAudioElement(node) {\
n HTMLMediaElement.call(this, node);\n }\n HTMLAudioElement.prototype = Obj
ect.create(HTMLMediaElement.prototype);\n\n registerWrapper(OriginalHTMLAudioEl
ement, HTMLAudioElement,\n document.createElement('audio'));\n\
n function Audio(src) {\n if (!(this instanceof Audio)) {\n throw new T
ypeError(\n 'DOM object constructor cannot be called as a function.');\
n }\n\n var node = unwrap(document.createElement('audio'));\n HTMLMedia
Element.call(this, node);\n rewrap(node, this);\n\n node.setAttribute('pre
load', 'auto');\n if (src !== undefined)\n node.setAttribute('src', src)
;\n }\n\n Audio.prototype = HTMLAudioElement.prototype;\n\n scope.wrappers.HT
MLAudioElement = HTMLAudioElement;\n scope.wrappers.Audio = Audio;\n})(window.S
hadowDOMPolyfill);\n", |
| 122 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var rewrap = scope.rewrap;\n var unwrap = scope.unwrap;\n
var wrap = scope.wrap;\n\n var OriginalHTMLOptionElement = window.HTMLOptionEl
ement;\n\n function trimText(s) {\n return s.replace(/\\s+/g, ' ').trim();\n
}\n\n function HTMLOptionElement(node) {\n HTMLElement.call(this, node);\n
}\n HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);\n mi
xin(HTMLOptionElement.prototype, {\n get text() {\n return trimText(this
.textContent);\n },\n set text(value) {\n this.textContent = trimText
(String(value));\n },\n get form() {\n return wrap(unwrap(this).form)
;\n }\n });\n\n registerWrapper(OriginalHTMLOptionElement, HTMLOptionElemen
t,\n document.createElement('option'));\n\n function Option(te
xt, value, defaultSelected, selected) {\n if (!(this instanceof Option)) {\n
throw new TypeError(\n 'DOM object constructor cannot be called as
a function.');\n }\n\n var node = unwrap(document.createElement('option')
);\n HTMLElement.call(this, node);\n rewrap(node, this);\n\n if (text !
== undefined)\n node.text = text;\n if (value !== undefined)\n node
.setAttribute('value', value);\n if (defaultSelected === true)\n node.se
tAttribute('selected', '');\n node.selected = selected === true;\n }\n\n Op
tion.prototype = HTMLOptionElement.prototype;\n\n scope.wrappers.HTMLOptionElem
ent = HTMLOptionElement;\n scope.wrappers.Option = Option;\n})(window.ShadowDOM
Polyfill);\n", |
| 123 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLContentElement =
scope.wrappers.HTMLContentElement;\n var HTMLElement = scope.wrappers.HTMLElem
ent;\n var HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var HTMLTem
plateElement = scope.wrappers.HTMLTemplateElement;\n var mixin = scope.mixin;\n
var registerWrapper = scope.registerWrapper;\n\n var OriginalHTMLUnknownEleme
nt = window.HTMLUnknownElement;\n\n function HTMLUnknownElement(node) {\n sw
itch (node.localName) {\n case 'content':\n return new HTMLContentEl
ement(node);\n case 'shadow':\n return new HTMLShadowElement(node);\
n case 'template':\n return new HTMLTemplateElement(node);\n }\n
HTMLElement.call(this, node);\n }\n HTMLUnknownElement.prototype = Object.c
reate(HTMLElement.prototype);\n registerWrapper(OriginalHTMLUnknownElement, HTM
LUnknownElement);\n scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;\n})
(window.ShadowDOMPolyfill);\n", |
| 124 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerObject = sco
pe.registerObject;\n\n var SVG_NS = 'http://www.w3.org/2000/svg';\n var svgTit
leElement = document.createElementNS(SVG_NS, 'title');\n var SVGTitleElement =
registerObject(svgTitleElement);\n var SVGElement = Object.getPrototypeOf(SVGTi
tleElement.prototype).constructor;\n\n scope.wrappers.SVGElement = SVGElement;\
n})(window.ShadowDOMPolyfill);\n", |
| 125 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var mixin = scope.mixin;
\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n
var wrap = scope.wrap;\n\n var OriginalSVGUseElement = window.SVGUseElement;\
n\n // IE uses SVGElement as parent interface, SVG2 (Blink & Gecko) uses\n //
SVGGraphicsElement. Use the <g> element to get the right prototype.\n\n var SVG
_NS = 'http://www.w3.org/2000/svg';\n var gWrapper = wrap(document.createElemen
tNS(SVG_NS, 'g'));\n var useElement = document.createElementNS(SVG_NS, 'use');\
n var SVGGElement = gWrapper.constructor;\n var parentInterfacePrototype = Obj
ect.getPrototypeOf(SVGGElement.prototype);\n var parentInterface = parentInterf
acePrototype.constructor;\n\n function SVGUseElement(impl) {\n parentInterfa
ce.call(this, impl);\n }\n\n SVGUseElement.prototype = Object.create(parentInt
erfacePrototype);\n\n // Firefox does not expose instanceRoot.\n if ('instance
Root' in useElement) {\n mixin(SVGUseElement.prototype, {\n get instance
Root() {\n return wrap(unwrap(this).instanceRoot);\n },\n get a
nimatedInstanceRoot() {\n return wrap(unwrap(this).animatedInstanceRoot);
\n },\n });\n }\n\n registerWrapper(OriginalSVGUseElement, SVGUseEleme
nt, useElement);\n\n scope.wrappers.SVGUseElement = SVGUseElement;\n})(window.S
hadowDOMPolyfill);\n", |
| 126 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.
wrappers.EventTarget;\n var mixin = scope.mixin;\n var registerWrapper = scope
.registerWrapper;\n var wrap = scope.wrap;\n\n var OriginalSVGElementInstance
= window.SVGElementInstance;\n if (!OriginalSVGElementInstance)\n return;\n\
n function SVGElementInstance(impl) {\n EventTarget.call(this, impl);\n }\n
\n SVGElementInstance.prototype = Object.create(EventTarget.prototype);\n mixi
n(SVGElementInstance.prototype, {\n /** @type {SVGElement} */\n get corres
pondingElement() {\n return wrap(this.impl.correspondingElement);\n },\n
\n /** @type {SVGUseElement} */\n get correspondingUseElement() {\n r
eturn wrap(this.impl.correspondingUseElement);\n },\n\n /** @type {SVGElem
entInstance} */\n get parentNode() {\n return wrap(this.impl.parentNode)
;\n },\n\n /** @type {SVGElementInstanceList} */\n get childNodes() {\n
throw new Error('Not implemented');\n },\n\n /** @type {SVGElementIn
stance} */\n get firstChild() {\n return wrap(this.impl.firstChild);\n
},\n\n /** @type {SVGElementInstance} */\n get lastChild() {\n retu
rn wrap(this.impl.lastChild);\n },\n\n /** @type {SVGElementInstance} */\n
get previousSibling() {\n return wrap(this.impl.previousSibling);\n
},\n\n /** @type {SVGElementInstance} */\n get nextSibling() {\n retu
rn wrap(this.impl.nextSibling);\n }\n });\n\n registerWrapper(OriginalSVGEl
ementInstance, SVGElementInstance);\n\n scope.wrappers.SVGElementInstance = SVG
ElementInstance;\n})(window.ShadowDOMPolyfill);\n", |
| 127 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var mixin = scope.mixin;
\n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n
var unwrapIfNeeded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var
OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;\n\n functio
n CanvasRenderingContext2D(impl) {\n this.impl = impl;\n }\n\n mixin(Canvas
RenderingContext2D.prototype, {\n get canvas() {\n return wrap(this.impl
.canvas);\n },\n\n drawImage: function() {\n arguments[0] = unwrapIfN
eeded(arguments[0]);\n this.impl.drawImage.apply(this.impl, arguments);\n
},\n\n createPattern: function() {\n arguments[0] = unwrap(arguments[0
]);\n return this.impl.createPattern.apply(this.impl, arguments);\n }\n
});\n\n registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingConte
xt2D,\n document.createElement('canvas').getContext('2d'));\n\n
scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;\n})(window
.ShadowDOMPolyfill);\n", |
| 128 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var mixin = scope.mixin;
\n var registerWrapper = scope.registerWrapper;\n var unwrapIfNeeded = scope.u
nwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWebGLRenderingContext
= window.WebGLRenderingContext;\n\n // IE10 does not have WebGL.\n if (!Origin
alWebGLRenderingContext)\n return;\n\n function WebGLRenderingContext(impl)
{\n this.impl = impl;\n }\n\n mixin(WebGLRenderingContext.prototype, {\n
get canvas() {\n return wrap(this.impl.canvas);\n },\n\n texImage2D:
function() {\n arguments[5] = unwrapIfNeeded(arguments[5]);\n this.im
pl.texImage2D.apply(this.impl, arguments);\n },\n\n texSubImage2D: functio
n() {\n arguments[6] = unwrapIfNeeded(arguments[6]);\n this.impl.texSu
bImage2D.apply(this.impl, arguments);\n }\n });\n\n // Blink/WebKit has bro
ken DOM bindings. Usually we would create an instance\n // of the object and pa
ss it into registerWrapper as a \"blueprint\" but\n // creating WebGL contexts
is expensive and might fail so we use a dummy\n // object with dummy instance p
roperties for these broken browsers.\n var instanceProperties = /WebKit/.test(n
avigator.userAgent) ?\n {drawingBufferHeight: null, drawingBufferWidth: nul
l} : {};\n\n registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingConte
xt,\n instanceProperties);\n\n scope.wrappers.WebGLRenderingContext = WebG
LRenderingContext;\n})(window.ShadowDOMPolyfill);\n", |
| 129 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc
ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope
.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalRange = window.Range
;\n\n function Range(impl) {\n this.impl = impl;\n }\n Range.prototype = {
\n get startContainer() {\n return wrap(this.impl.startContainer);\n
},\n get endContainer() {\n return wrap(this.impl.endContainer);\n },
\n get commonAncestorContainer() {\n return wrap(this.impl.commonAncesto
rContainer);\n },\n setStart: function(refNode,offset) {\n this.impl.
setStart(unwrapIfNeeded(refNode), offset);\n },\n setEnd: function(refNode
,offset) {\n this.impl.setEnd(unwrapIfNeeded(refNode), offset);\n },\n
setStartBefore: function(refNode) {\n this.impl.setStartBefore(unwrapIfNe
eded(refNode));\n },\n setStartAfter: function(refNode) {\n this.impl
.setStartAfter(unwrapIfNeeded(refNode));\n },\n setEndBefore: function(ref
Node) {\n this.impl.setEndBefore(unwrapIfNeeded(refNode));\n },\n set
EndAfter: function(refNode) {\n this.impl.setEndAfter(unwrapIfNeeded(refNod
e));\n },\n selectNode: function(refNode) {\n this.impl.selectNode(un
wrapIfNeeded(refNode));\n },\n selectNodeContents: function(refNode) {\n
this.impl.selectNodeContents(unwrapIfNeeded(refNode));\n },\n compareB
oundaryPoints: function(how, sourceRange) {\n return this.impl.compareBound
aryPoints(how, unwrap(sourceRange));\n },\n extractContents: function() {\
n return wrap(this.impl.extractContents());\n },\n cloneContents: fun
ction() {\n return wrap(this.impl.cloneContents());\n },\n insertNode
: function(node) {\n this.impl.insertNode(unwrapIfNeeded(node));\n },\n
surroundContents: function(newParent) {\n this.impl.surroundContents(unw
rapIfNeeded(newParent));\n },\n cloneRange: function() {\n return wra
p(this.impl.cloneRange());\n },\n isPointInRange: function(node, offset) {
\n return this.impl.isPointInRange(unwrapIfNeeded(node), offset);\n },\n
comparePoint: function(node, offset) {\n return this.impl.comparePoint(
unwrapIfNeeded(node), offset);\n },\n intersectsNode: function(node) {\n
return this.impl.intersectsNode(unwrapIfNeeded(node));\n },\n toString
: function() {\n return this.impl.toString();\n }\n };\n\n // IE9 does
not have createContextualFragment.\n if (OriginalRange.prototype.createContext
ualFragment) {\n Range.prototype.createContextualFragment = function(html) {\
n return wrap(this.impl.createContextualFragment(html));\n };\n }\n\n
registerWrapper(window.Range, Range, document.createRange());\n\n scope.wrapper
s.Range = Range;\n\n})(window.ShadowDOMPolyfill);\n", |
| 130 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa
ce = scope.GetElementsByInterface;\n var ParentNodeInterface = scope.ParentNode
Interface;\n var SelectorsInterface = scope.SelectorsInterface;\n var mixin =
scope.mixin;\n var registerObject = scope.registerObject;\n\n var DocumentFrag
ment = registerObject(document.createDocumentFragment());\n mixin(DocumentFragm
ent.prototype, ParentNodeInterface);\n mixin(DocumentFragment.prototype, Select
orsInterface);\n mixin(DocumentFragment.prototype, GetElementsByInterface);\n\n
var Comment = registerObject(document.createComment(''));\n\n scope.wrappers.
Comment = Comment;\n scope.wrappers.DocumentFragment = DocumentFragment;\n\n})(
window.ShadowDOMPolyfill);\n", |
| 131 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var DocumentFragment = s
cope.wrappers.DocumentFragment;\n var elementFromPoint = scope.elementFromPoint
;\n var getInnerHTML = scope.getInnerHTML;\n var mixin = scope.mixin;\n var r
ewrap = scope.rewrap;\n var setInnerHTML = scope.setInnerHTML;\n var unwrap =
scope.unwrap;\n\n var shadowHostTable = new WeakMap();\n var nextOlderShadowTr
eeTable = new WeakMap();\n\n var spaceCharRe = /[ \\t\\n\\r\\f]/;\n\n function
ShadowRoot(hostWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument
.createDocumentFragment());\n DocumentFragment.call(this, node);\n\n // cr
eateDocumentFragment associates the node with a wrapper\n // DocumentFragment
instance. Override that.\n rewrap(node, this);\n\n var oldShadowRoot = ho
stWrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\
n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoot.prototype = Obje
ct.create(DocumentFragment.prototype);\n mixin(ShadowRoot.prototype, {\n get
innerHTML() {\n return getInnerHTML(this);\n },\n set innerHTML(valu
e) {\n setInnerHTML(this, value);\n this.invalidateShadowRenderer();\n
},\n\n get olderShadowRoot() {\n return nextOlderShadowTreeTable.get
(this) || null;\n },\n\n get host() {\n return shadowHostTable.get(th
is) || null;\n },\n\n invalidateShadowRenderer: function() {\n return
shadowHostTable.get(this).invalidateShadowRenderer();\n },\n\n elementFro
mPoint: function(x, y) {\n return elementFromPoint(this, this.ownerDocument
, x, y);\n },\n\n getElementById: function(id) {\n if (spaceCharRe.te
st(id))\n return null;\n return this.querySelector('[id=\"' + id + '
\"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoot;\n\n})(window.S
hadowDOMPolyfill);\n", |
| 132 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is governed by a BSD-style\n// license that can be found in the LIC
ENSE file.\n\n(function(scope) {\n 'use strict';\n\n var Element = scope.wrapp
ers.Element;\n var HTMLContentElement = scope.wrappers.HTMLContentElement;\n v
ar HTMLShadowElement = scope.wrappers.HTMLShadowElement;\n var Node = scope.wra
ppers.Node;\n var ShadowRoot = scope.wrappers.ShadowRoot;\n var assert = scope
.assert;\n var mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var unwrap =
scope.unwrap;\n var wrap = scope.wrap;\n\n /**\n * Updates the fields of a
wrapper to a snapshot of the logical DOM as needed.\n * Up means parentNode\n
* Sideways means previous and next sibling.\n * @param {!Node} wrapper\n *
/\n function updateWrapperUpAndSideways(wrapper) {\n wrapper.previousSibling
_ = wrapper.previousSibling;\n wrapper.nextSibling_ = wrapper.nextSibling;\n
wrapper.parentNode_ = wrapper.parentNode;\n }\n\n /**\n * Updates the fie
lds of a wrapper to a snapshot of the logical DOM as needed.\n * Down means fi
rst and last child\n * @param {!Node} wrapper\n */\n function updateWrapper
Down(wrapper) {\n wrapper.firstChild_ = wrapper.firstChild;\n wrapper.last
Child_ = wrapper.lastChild;\n }\n\n function updateAllChildNodes(parentNodeWra
pper) {\n assert(parentNodeWrapper instanceof Node);\n for (var childWrapp
er = parentNodeWrapper.firstChild;\n childWrapper;\n childWrappe
r = childWrapper.nextSibling) {\n updateWrapperUpAndSideways(childWrapper);
\n }\n updateWrapperDown(parentNodeWrapper);\n }\n\n function insertBefo
re(parentNodeWrapper, newChildWrapper, refChildWrapper) {\n var parentNode =
unwrap(parentNodeWrapper);\n var newChild = unwrap(newChildWrapper);\n var
refChild = refChildWrapper ? unwrap(refChildWrapper) : null;\n\n remove(newC
hildWrapper);\n updateWrapperUpAndSideways(newChildWrapper);\n\n if (!refC
hildWrapper) {\n parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild
;\n if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)\n
parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;\n\n var l
astChildWrapper = wrap(parentNode.lastChild);\n if (lastChildWrapper)\n
lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;\n } else {\
n if (parentNodeWrapper.firstChild === refChildWrapper)\n parentNode
Wrapper.firstChild_ = refChildWrapper;\n\n refChildWrapper.previousSibling_
= refChildWrapper.previousSibling;\n }\n\n parentNode.insertBefore(newChi
ld, refChild);\n }\n\n function remove(nodeWrapper) {\n var node = unwrap(n
odeWrapper)\n var parentNode = node.parentNode;\n if (!parentNode)\n
return;\n\n var parentNodeWrapper = wrap(parentNode);\n updateWrapperUpAnd
Sideways(nodeWrapper);\n\n if (nodeWrapper.previousSibling)\n nodeWrappe
r.previousSibling.nextSibling_ = nodeWrapper;\n if (nodeWrapper.nextSibling)\
n nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;\n\n if (parent
NodeWrapper.lastChild === nodeWrapper)\n parentNodeWrapper.lastChild_ = nod
eWrapper;\n if (parentNodeWrapper.firstChild === nodeWrapper)\n parentNo
deWrapper.firstChild_ = nodeWrapper;\n\n parentNode.removeChild(node);\n }\n
\n var distributedChildNodesTable = new WeakMap();\n var eventParentsTable = n
ew WeakMap();\n var insertionParentTable = new WeakMap();\n var rendererForHos
tTable = new WeakMap();\n\n function distributeChildToInsertionPoint(child, ins
ertionPoint) {\n getDistributedChildNodes(insertionPoint).push(child);\n a
ssignToInsertionPoint(child, insertionPoint);\n\n var eventParents = eventPar
entsTable.get(child);\n if (!eventParents)\n eventParentsTable.set(child
, eventParents = []);\n eventParents.push(insertionPoint);\n }\n\n function
resetDistributedChildNodes(insertionPoint) {\n distributedChildNodesTable.se
t(insertionPoint, []);\n }\n\n function getDistributedChildNodes(insertionPoin
t) {\n return distributedChildNodesTable.get(insertionPoint);\n }\n\n funct
ion getChildNodesSnapshot(node) {\n var result = [], i = 0;\n for (var chi
ld = node.firstChild; child; child = child.nextSibling) {\n result[i++] = c
hild;\n }\n return result;\n }\n\n /**\n * Visits all nodes in the tre
e that fulfils the |predicate|. If the |visitor|\n * function returns |false|
the traversal is aborted.\n * @param {!Node} tree\n * @param {function(!Node
) : boolean} predicate\n * @param {function(!Node) : *} visitor\n */\n func
tion visit(tree, predicate, visitor) {\n // This operates on logical DOM.\n
for (var node = tree.firstChild; node; node = node.nextSibling) {\n if (p
redicate(node)) {\n if (visitor(node) === false)\n return;\n
} else {\n visit(node, predicate, visitor);\n }\n }\n }\n\n /
/ Matching Insertion Points\n // http://dvcs.w3.org/hg/webcomponents/raw-file/t
ip/spec/shadow/index.html#matching-insertion-points\n\n // TODO(arv): Verify th
is... I don't remember why I picked this regexp.\n var selectorMatchRegExp = /^
[*.:#[a-zA-Z_|]/;\n\n var allowedPseudoRegExp = new RegExp('^:(' + [\n 'link
',\n 'visited',\n 'target',\n 'enabled',\n 'disabled',\n 'checked
',\n 'indeterminate',\n 'nth-child',\n 'nth-last-child',\n 'nth-of-t
ype',\n 'nth-last-of-type',\n 'first-child',\n 'last-child',\n 'firs
t-of-type',\n 'last-of-type',\n 'only-of-type',\n ].join('|') + ')');\n\n
\n /**\n * @param {Element} node\n * @oaram {Element} point The insertion p
oint element.\n * @return {boolean} Whether the node matches the insertion poi
nt.\n */\n function matchesCriteria(node, point) {\n var select = point.ge
tAttribute('select');\n if (!select)\n return true;\n\n // Here we kn
ow the select attribute is a non empty string.\n select = select.trim();\n
if (!select)\n return true;\n\n if (!(node instanceof Element))\n
return false;\n\n // The native matches function in IE9 does not correctly wo
rk with elements\n // that are not in the document.\n // TODO(arv): Implem
ent matching in JS.\n // https://github.com/Polymer/ShadowDOM/issues/361\n
if (select === '*' || select === node.localName)\n return true;\n\n //
TODO(arv): This does not seem right. Need to check for a simple selector.\n i
f (!selectorMatchRegExp.test(select))\n return false;\n\n // TODO(arv):
This no longer matches the spec.\n if (select[0] === ':' && !allowedPseudoReg
Exp.test(select))\n return false;\n\n try {\n return node.matches(s
elect);\n } catch (ex) {\n // Invalid selector.\n return false;\n
}\n }\n\n var request = oneOf(window, [\n 'requestAnimationFrame',\n '
mozRequestAnimationFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout'
\n ]);\n\n var pendingDirtyRenderers = [];\n var renderTimer;\n\n function r
enderAllPending() {\n for (var i = 0; i < pendingDirtyRenderers.length; i++)
{\n pendingDirtyRenderers[i].render();\n }\n pendingDirtyRenderers =
[];\n }\n\n function handleRequestAnimationFrame() {\n renderTimer = null;\
n renderAllPending();\n }\n\n /**\n * Returns existing shadow renderer fo
r a host or creates it if it is needed.\n * @params {!Element} host\n * @ret
urn {!ShadowRenderer}\n */\n function getRendererForHost(host) {\n var ren
derer = rendererForHostTable.get(host);\n if (!renderer) {\n renderer =
new ShadowRenderer(host);\n rendererForHostTable.set(host, renderer);\n
}\n return renderer;\n }\n\n function getShadowRootAncestor(node) {\n fo
r (; node; node = node.parentNode) {\n if (node instanceof ShadowRoot)\n
return node;\n }\n return null;\n }\n\n function getRendererForShad
owRoot(shadowRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n
var spliceDiff = new ArraySplice();\n spliceDiff.equals = function(renderNode,
rawNode) {\n return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n *
RenderNode is used as an in memory \"render tree\". When we render the\n * co
mposed tree we create a tree of RenderNodes, then we diff this against\n * the
real DOM tree and make minimal changes as needed.\n */\n function RenderNode
(node) {\n this.skip = false;\n this.node = node;\n this.childNodes = [
];\n }\n\n RenderNode.prototype = {\n append: function(node) {\n var r
v = new RenderNode(node);\n this.childNodes.push(rv);\n return rv;\n
},\n\n sync: function(opt_added) {\n if (this.skip)\n return;\n
\n var nodeWrapper = this.node;\n // plain array of RenderNodes\n
var newChildren = this.childNodes;\n // plain array of real nodes.\n
var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added =
opt_added || new WeakMap();\n\n var splices = spliceDiff.calculateSplices(
newChildren, oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var l
astIndex = 0;\n for (var i = 0; i < splices.length; i++) {\n var spl
ice = splices[i];\n for (; lastIndex < splice.index; lastIndex++) {\n
oldIndex++;\n newChildren[newIndex++].sync(added);\n }\n\n
var removedCount = splice.removed.length;\n for (var j = 0; j < r
emovedCount; j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n
if (!added.get(wrapper))\n remove(wrapper);\n }\n\n
var addedCount = splice.addedCount;\n var refNode = oldChildren[oldIn
dex] && wrap(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j+
+) {\n var newChildRenderNode = newChildren[newIndex++];\n var
newChildWrapper = newChildRenderNode.node;\n insertBefore(nodeWrapper,
newChildWrapper, refNode);\n\n // Keep track of added so that we do no
t remove the node after it\n // has been added.\n added.set(ne
wChildWrapper, true);\n\n newChildRenderNode.sync(added);\n }\n\
n lastIndex += addedCount;\n }\n\n for (var i = lastIndex; i <
newChildren.length; i++) {\n newChildren[i].sync(added);\n }\n }\
n };\n\n function ShadowRenderer(host) {\n this.host = host;\n this.dirt
y = false;\n this.invalidateAttributes();\n this.associateNode(host);\n }
\n\n ShadowRenderer.prototype = {\n\n // http://dvcs.w3.org/hg/webcomponents
/raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n render: functio
n(opt_renderNode) {\n if (!this.dirty)\n return;\n\n this.inval
idateAttributes();\n this.treeComposition();\n\n var host = this.host;
\n var shadowRoot = host.shadowRoot;\n\n this.associateNode(host);\n
var topMostRenderer = !renderNode;\n var renderNode = opt_renderNode ||
new RenderNode(host);\n\n for (var node = shadowRoot.firstChild; node; nod
e = node.nextSibling) {\n this.renderNode(shadowRoot, renderNode, node, f
alse);\n }\n\n if (topMostRenderer)\n renderNode.sync();\n\n
this.dirty = false;\n },\n\n invalidate: function() {\n if (!this.
dirty) {\n this.dirty = true;\n pendingDirtyRenderers.push(this);\
n if (renderTimer)\n return;\n renderTimer = window[reque
st](handleRequestAnimationFrame, 0);\n }\n },\n\n renderNode: functio
n(shadowRoot, renderNode, node, isNested) {\n if (isShadowHost(node)) {\n
renderNode = renderNode.append(node);\n var renderer = getRendererF
orHost(node);\n renderer.dirty = true; // Need to rerender due to reproj
ection.\n renderer.render(renderNode);\n } else if (isInsertionPoint
(node)) {\n this.renderInsertionPoint(shadowRoot, renderNode, node, isNes
ted);\n } else if (isShadowInsertionPoint(node)) {\n this.renderShad
owInsertionPoint(shadowRoot, renderNode, node);\n } else {\n this.re
nderAsAnyDomTree(shadowRoot, renderNode, node, isNested);\n }\n },\n\n
renderAsAnyDomTree: function(shadowRoot, renderNode, node, isNested) {\n
renderNode = renderNode.append(node);\n\n if (isShadowHost(node)) {\n
var renderer = getRendererForHost(node);\n renderNode.skip = !renderer.
dirty;\n renderer.render(renderNode);\n } else {\n for (var c
hild = node.firstChild; child; child = child.nextSibling) {\n this.rend
erNode(shadowRoot, renderNode, child, isNested);\n }\n }\n },\n\n
renderInsertionPoint: function(shadowRoot, renderNode, insertionPoint,\n
isNested) {\n var distributedChildNodes = ge
tDistributedChildNodes(insertionPoint);\n if (distributedChildNodes.length)
{\n this.associateNode(insertionPoint);\n\n for (var i = 0; i < d
istributedChildNodes.length; i++) {\n var child = distributedChildNodes
[i];\n if (isInsertionPoint(child) && isNested)\n this.rende
rInsertionPoint(shadowRoot, renderNode, child, isNested);\n else\n
this.renderAsAnyDomTree(shadowRoot, renderNode, child, isNested);\n
}\n } else {\n this.renderFallbackContent(shadowRoot, renderNode,
insertionPoint);\n }\n this.associateNode(insertionPoint.parentNode);\
n },\n\n renderShadowInsertionPoint: function(shadowRoot, renderNode,\n
shadowInsertionPoint) {\n var nextOld
erTree = shadowRoot.olderShadowRoot;\n if (nextOlderTree) {\n assign
ToInsertionPoint(nextOlderTree, shadowInsertionPoint);\n this.associateNo
de(shadowInsertionPoint.parentNode);\n for (var node = nextOlderTree.firs
tChild;\n node;\n node = node.nextSibling) {\n
this.renderNode(nextOlderTree, renderNode, node, true);\n }\n } else
{\n this.renderFallbackContent(shadowRoot, renderNode,\n
shadowInsertionPoint);\n }\n },\n\n renderFallback
Content: function(shadowRoot, renderNode, fallbackHost) {\n this.associateN
ode(fallbackHost);\n this.associateNode(fallbackHost.parentNode);\n fo
r (var node = fallbackHost.firstChild; node; node = node.nextSibling) {\n
this.renderAsAnyDomTree(shadowRoot, renderNode, node, false);\n }\n },\
n\n /**\n * Invalidates the attributes used to keep track of which attrib
utes may\n * cause the renderer to be invalidated.\n */\n invalidateA
ttributes: function() {\n this.attributes = Object.create(null);\n },\n\
n /**\n * Parses the selector and makes this renderer dependent on the at
tribute\n * being used in the selector.\n * @param {string} selector\n
*/\n updateDependentAttributes: function(selector) {\n if (!selector)
\n return;\n\n var attributes = this.attributes;\n\n // .class\
n if (/\\.\\w+/.test(selector))\n attributes['class'] = true;\n\n
// #id\n if (/#\\w+/.test(selector))\n attributes['id'] = true;\n
\n selector.replace(/\\[\\s*([^\\s=\\|~\\]]+)/g, function(_, name) {\n
attributes[name] = true;\n });\n\n // Pseudo selectors have been re
moved from the spec.\n },\n\n dependsOnAttribute: function(name) {\n
return this.attributes[name];\n },\n\n // http://dvcs.w3.org/hg/webcompone
nts/raw-file/tip/spec/shadow/index.html#dfn-distribution-algorithm\n distribu
te: function(tree, pool) {\n var self = this;\n\n visit(tree, isActive
InsertionPoint,\n function(insertionPoint) {\n resetDistribu
tedChildNodes(insertionPoint);\n self.updateDependentAttributes(\n
insertionPoint.getAttribute('select'));\n\n for (var i =
0; i < pool.length; i++) { // 1.2\n var node = pool[i]; // 1.2.1
\n if (node === undefined) // removed\n continue;\n
if (matchesCriteria(node, insertionPoint)) { // 1.2.2\n
distributeChildToInsertionPoint(node, insertionPoint); // 1.2.2.1\n
pool[i] = undefined; // 1.2.2.2\n }\n }\n
});\n },\n\n // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spe
c/shadow/index.html#dfn-tree-composition\n treeComposition: function () {\n
var shadowHost = this.host;\n var tree = shadowHost.shadowRoot; // 1.\
n var pool = []; // 2.\n\n for (var child = shadowHost.firstChild;\n
child;\n child = child.nextSibling) { // 3.\n if (is
InsertionPoint(child)) { // 3.2.\n var reprojected = getDistributedChi
ldNodes(child); // 3.2.1.\n // if reprojected is undef... reset it?\n
if (!reprojected || !reprojected.length) // 3.2.2.\n reproj
ected = getChildNodesSnapshot(child);\n pool.push.apply(pool, reproject
ed); // 3.2.3.\n } else {\n pool.push(child); // 3.3.\n
}\n }\n\n var shadowInsertionPoint, point;\n while (tree) { // 4
.\n // 4.1.\n shadowInsertionPoint = undefined; // Reset every it
eration.\n visit(tree, isActiveShadowInsertionPoint, function(point) {\n
shadowInsertionPoint = point;\n return false;\n });\n
point = shadowInsertionPoint;\n\n this.distribute(tree, pool); //
4.2.\n if (point) { // 4.3.\n var nextOlderTree = tree.olderSha
dowRoot; // 4.3.1.\n if (!nextOlderTree) {\n break; // 4.3
.1.1.\n } else {\n tree = nextOlderTree; // 4.3.2.2.\n
assignToInsertionPoint(tree, point); // 4.3.2.2.\n continue;
// 4.3.2.3.\n }\n } else {\n break; // 4.4.\n
}\n }\n },\n\n associateNode: function(node) {\n node.impl.polym
erShadowRenderer_ = this;\n }\n };\n\n function isInsertionPoint(node) {\n
// Should this include <shadow>?\n return node instanceof HTMLContentEleme
nt;\n }\n\n function isActiveInsertionPoint(node) {\n // <content> inside a
nother <content> or <shadow> is considered inactive.\n return node instanceof
HTMLContentElement;\n }\n\n function isShadowInsertionPoint(node) {\n retu
rn node instanceof HTMLShadowElement;\n }\n\n function isActiveShadowInsertion
Point(node) {\n // <shadow> inside another <content> or <shadow> is considere
d inactive.\n return node instanceof HTMLShadowElement;\n }\n\n function is
ShadowHost(shadowHost) {\n return shadowHost.shadowRoot;\n }\n\n function g
etShadowTrees(host) {\n var trees = [];\n\n for (var tree = host.shadowRoo
t; tree; tree = tree.olderShadowRoot) {\n trees.push(tree);\n }\n ret
urn trees;\n }\n\n function assignToInsertionPoint(tree, point) {\n inserti
onParentTable.set(tree, point);\n }\n\n // http://dvcs.w3.org/hg/webcomponents
/raw-file/tip/spec/shadow/index.html#rendering-shadow-trees\n function render(h
ost) {\n new ShadowRenderer(host).render();\n };\n\n // Need to rerender sh
adow host when:\n //\n // - a direct child to the ShadowRoot is added or remov
ed\n // - a direct child to the host is added or removed\n // - a new shadow r
oot is created\n // - a direct child to a content/shadow element is added or re
moved\n // - a sibling to a content/shadow element is added or removed\n // -
content[select] is changed\n // - an attribute in a direct child to a host is m
odified\n\n /**\n * This gets called when a node was added or removed to it.\
n */\n Node.prototype.invalidateShadowRenderer = function(force) {\n var r
enderer = this.impl.polymerShadowRenderer_;\n if (renderer) {\n renderer
.invalidate();\n return true;\n }\n\n return false;\n };\n\n HTMLCo
ntentElement.prototype.getDistributedNodes = function() {\n // TODO(arv): We
should only rerender the dirty ancestor renderers (from\n // the root and dow
n).\n renderAllPending();\n return getDistributedChildNodes(this);\n };\n
\n HTMLShadowElement.prototype.nodeIsInserted_ =\n HTMLContentElement.prototyp
e.nodeIsInserted_ = function() {\n // Invalidate old renderer if any.\n th
is.invalidateShadowRenderer();\n\n var shadowRoot = getShadowRootAncestor(thi
s);\n var renderer;\n if (shadowRoot)\n renderer = getRendererForShad
owRoot(shadowRoot);\n this.impl.polymerShadowRenderer_ = renderer;\n if (r
enderer)\n renderer.invalidate();\n };\n\n scope.eventParentsTable = even
tParentsTable;\n scope.getRendererForHost = getRendererForHost;\n scope.getSha
dowTrees = getShadowTrees;\n scope.insertionParentTable = insertionParentTable;
\n scope.renderAllPending = renderAllPending;\n\n // Exposed for testing\n sc
ope.visual = {\n insertBefore: insertBefore,\n remove: remove,\n };\n\n})
(window.ShadowDOMPolyfill);\n", |
| 133 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement = scope.
wrappers.HTMLElement;\n var assert = scope.assert;\n var mixin = scope.mixin;\
n var registerWrapper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n
var wrap = scope.wrap;\n\n var elementsWithFormProperty = [\n 'HTMLButtonEl
ement',\n 'HTMLFieldSetElement',\n 'HTMLInputElement',\n 'HTMLKeygenEle
ment',\n 'HTMLLabelElement',\n 'HTMLLegendElement',\n 'HTMLObjectElemen
t',\n // HTMLOptionElement is handled in HTMLOptionElement.js\n 'HTMLOutpu
tElement',\n 'HTMLSelectElement',\n 'HTMLTextAreaElement',\n ];\n\n func
tion createWrapperConstructor(name) {\n if (!window[name])\n return;\n\n
// Ensure we are not overriding an already existing constructor.\n assert
(!scope.wrappers[name]);\n\n var GeneratedWrapper = function(node) {\n /
/ At this point all of them extend HTMLElement.\n HTMLElement.call(this, no
de);\n }\n GeneratedWrapper.prototype = Object.create(HTMLElement.prototyp
e);\n mixin(GeneratedWrapper.prototype, {\n get form() {\n return
wrap(unwrap(this).form);\n },\n });\n\n registerWrapper(window[name]
, GeneratedWrapper,\n document.createElement(name.slice(4, -7)));\n sc
ope.wrappers[name] = GeneratedWrapper;\n }\n\n elementsWithFormProperty.forEac
h(createWrapperConstructor);\n\n})(window.ShadowDOMPolyfill);\n", |
| 134 "// Copyright 2014 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var registerWrapper = sc
ope.registerWrapper;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = scope
.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalSelection = window.S
election;\n\n function Selection(impl) {\n this.impl = impl;\n }\n Selecti
on.prototype = {\n get anchorNode() {\n return wrap(this.impl.anchorNode
);\n },\n get focusNode() {\n return wrap(this.impl.focusNode);\n
},\n addRange: function(range) {\n this.impl.addRange(unwrap(range));\n
},\n collapse: function(node, index) {\n this.impl.collapse(unwrapIfN
eeded(node), index);\n },\n containsNode: function(node, allowPartial) {\n
return this.impl.containsNode(unwrapIfNeeded(node), allowPartial);\n },
\n extend: function(node, offset) {\n this.impl.extend(unwrapIfNeeded(no
de), offset);\n },\n getRangeAt: function(index) {\n return wrap(this
.impl.getRangeAt(index));\n },\n removeRange: function(range) {\n thi
s.impl.removeRange(unwrap(range));\n },\n selectAllChildren: function(node
) {\n this.impl.selectAllChildren(unwrapIfNeeded(node));\n },\n toStr
ing: function() {\n return this.impl.toString();\n }\n };\n\n // WebKi
t extensions. Not implemented.\n // readonly attribute Node baseNode;\n // rea
donly attribute long baseOffset;\n // readonly attribute Node extentNode;\n //
readonly attribute long extentOffset;\n // [RaisesException] void setBaseAndEx
tent([Default=Undefined] optional Node baseNode,\n // [De
fault=Undefined] optional long baseOffset,\n // [Default=
Undefined] optional Node extentNode,\n // [Default=Undefi
ned] optional long extentOffset);\n // [RaisesException, ImplementedAs=collapse
] void setPosition([Default=Undefined] optional Node node,\n //
[Default=Undefined] optional long offset);\n\n registerWrapper(window.Selecti
on, Selection, window.getSelection());\n\n scope.wrappers.Selection = Selection
;\n\n})(window.ShadowDOMPolyfill);\n", |
| 135 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var GetElementsByInterfa
ce = scope.GetElementsByInterface;\n var Node = scope.wrappers.Node;\n var Par
entNodeInterface = scope.ParentNodeInterface;\n var Selection = scope.wrappers.
Selection;\n var SelectorsInterface = scope.SelectorsInterface;\n var ShadowRo
ot = scope.wrappers.ShadowRoot;\n var cloneNode = scope.cloneNode;\n var defin
eWrapGetter = scope.defineWrapGetter;\n var elementFromPoint = scope.elementFro
mPoint;\n var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;\n var m
atchesNames = scope.matchesNames;\n var mixin = scope.mixin;\n var registerWra
pper = scope.registerWrapper;\n var renderAllPending = scope.renderAllPending;\
n var rewrap = scope.rewrap;\n var unwrap = scope.unwrap;\n var wrap = scope.
wrap;\n var wrapEventTargetMethods = scope.wrapEventTargetMethods;\n var wrapN
odeList = scope.wrapNodeList;\n\n var implementationTable = new WeakMap();\n\n
function Document(node) {\n Node.call(this, node);\n }\n Document.prototyp
e = Object.create(Node.prototype);\n\n defineWrapGetter(Document, 'documentElem
ent');\n\n // Conceptually both body and head can be in a shadow but suporting
that seems\n // overkill at this point.\n defineWrapGetter(Document, 'body');\
n defineWrapGetter(Document, 'head');\n\n // document cannot be overridden so
we override a bunch of its methods\n // directly on the instance.\n\n function
wrapMethod(name) {\n var original = document[name];\n Document.prototype[
name] = function() {\n return wrap(original.apply(this.impl, arguments));\n
};\n }\n\n [\n 'createComment',\n 'createDocumentFragment',\n 'cr
eateElement',\n 'createElementNS',\n 'createEvent',\n 'createEventNS',\
n 'createRange',\n 'createTextNode',\n 'getElementById'\n ].forEach(wr
apMethod);\n\n var originalAdoptNode = document.adoptNode;\n\n function adoptN
odeNoRemove(node, doc) {\n originalAdoptNode.call(doc.impl, unwrap(node));\n
adoptSubtree(node, doc);\n }\n\n function adoptSubtree(node, doc) {\n if
(node.shadowRoot)\n doc.adoptNode(node.shadowRoot);\n if (node instance
of ShadowRoot)\n adoptOlderShadowRoots(node, doc);\n for (var child = no
de.firstChild; child; child = child.nextSibling) {\n adoptSubtree(child, do
c);\n }\n }\n\n function adoptOlderShadowRoots(shadowRoot, doc) {\n var
oldShadowRoot = shadowRoot.olderShadowRoot;\n if (oldShadowRoot)\n doc.a
doptNode(oldShadowRoot);\n }\n\n var originalGetSelection = document.getSelect
ion;\n\n mixin(Document.prototype, {\n adoptNode: function(node) {\n if
(node.parentNode)\n node.parentNode.removeChild(node);\n adoptNodeN
oRemove(node, this);\n return node;\n },\n elementFromPoint: function
(x, y) {\n return elementFromPoint(this, this, x, y);\n },\n importNo
de: function(node, deep) {\n return cloneNode(node, deep, this.impl);\n
},\n getSelection: function() {\n renderAllPending();\n return new
Selection(originalGetSelection.call(unwrap(this)));\n }\n });\n\n if (docum
ent.registerElement) {\n var originalRegisterElement = document.registerEleme
nt;\n Document.prototype.registerElement = function(tagName, object) {\n
var prototype = object.prototype;\n\n // If we already used the object as
a prototype for another custom\n // element.\n if (scope.nativePrototy
peTable.get(prototype)) {\n // TODO(arv): DOMException\n throw new
Error('NotSupportedError');\n }\n\n // Find first object on the proto
type chain that already have a native\n // prototype. Keep track of all the
objects before that so we can create\n // a similar structure for the nati
ve case.\n var proto = Object.getPrototypeOf(prototype);\n var nativeP
rototype;\n var prototypes = [];\n while (proto) {\n nativeProt
otype = scope.nativePrototypeTable.get(proto);\n if (nativePrototype)\n
break;\n prototypes.push(proto);\n proto = Object.getProto
typeOf(proto);\n }\n\n if (!nativePrototype) {\n // TODO(arv):
DOMException\n throw new Error('NotSupportedError');\n }\n\n //
This works by creating a new prototype object that is empty, but has\n //
the native prototype as its proto. The original prototype object\n // passe
d into register is used as the wrapper prototype.\n\n var newPrototype = Ob
ject.create(nativePrototype);\n for (var i = prototypes.length - 1; i >= 0;
i--) {\n newPrototype = Object.create(newPrototype);\n }\n\n /
/ Add callbacks if present.\n // Names are taken from:\n // https://
code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bin
dings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\n
// and not from the spec since the spec is out of date.\n [\n
'createdCallback',\n 'attachedCallback',\n 'detachedCallback',\n
'attributeChangedCallback',\n ].forEach(function(name) {\n var
f = prototype[name];\n if (!f)\n return;\n newPrototype[
name] = function() {\n // if this element has been wrapped prior to reg
istration,\n // the wrapper is stale; in this case rewrap\n if
(!(wrap(this) instanceof CustomElementConstructor)) {\n rewrap(this)
;\n }\n f.apply(wrap(this), arguments);\n };\n });
\n\n var p = {prototype: newPrototype};\n if (object.extends)\n
p.extends = object.extends;\n\n function CustomElementConstructor(node) {\
n if (!node) {\n if (object.extends) {\n return docum
ent.createElement(object.extends, tagName);\n } else {\n ret
urn document.createElement(tagName);\n }\n }\n this.impl
= node;\n }\n CustomElementConstructor.prototype = prototype;\n C
ustomElementConstructor.prototype.constructor = CustomElementConstructor;\n\n
scope.constructorTable.set(newPrototype, CustomElementConstructor);\n sc
ope.nativePrototypeTable.set(prototype, newPrototype);\n\n // registration
is synchronous so do it last\n var nativeConstructor = originalRegisterElem
ent.call(unwrap(this),\n tagName, p);\n return CustomElementConstr
uctor;\n };\n\n forwardMethodsToWrapper([\n window.HTMLDocument || wi
ndow.Document, // Gecko adds these to HTMLDocument\n ], [\n 'registerEl
ement',\n ]);\n }\n\n // We also override some of the methods on document.b
ody and document.head\n // for convenience.\n forwardMethodsToWrapper([\n w
indow.HTMLBodyElement,\n window.HTMLDocument || window.Document, // Gecko ad
ds these to HTMLDocument\n window.HTMLHeadElement,\n window.HTMLHtmlElemen
t,\n ], [\n 'appendChild',\n 'compareDocumentPosition',\n 'contains',\
n 'getElementsByClassName',\n 'getElementsByTagName',\n 'getElementsByT
agNameNS',\n 'insertBefore',\n 'querySelector',\n 'querySelectorAll',\n
'removeChild',\n 'replaceChild',\n ].concat(matchesNames));\n\n forward
MethodsToWrapper([\n window.HTMLDocument || window.Document, // Gecko adds t
hese to HTMLDocument\n ], [\n 'adoptNode',\n 'importNode',\n 'contains
',\n 'createComment',\n 'createDocumentFragment',\n 'createElement',\n
'createElementNS',\n 'createEvent',\n 'createEventNS',\n 'createRang
e',\n 'createTextNode',\n 'elementFromPoint',\n 'getElementById',\n
'getSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface);\n
mixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype, S
electorsInterface);\n\n mixin(Document.prototype, {\n get implementation() {
\n var implementation = implementationTable.get(this);\n if (implement
ation)\n return implementation;\n implementation =\n new DO
MImplementation(unwrap(this).implementation);\n implementationTable.set(thi
s, implementation);\n return implementation;\n }\n });\n\n registerWra
pper(window.Document, Document,\n document.implementation.createHTMLDocumen
t(''));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM
only has\n // one Document interface and IE implements the standard correctly.\
n if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Document);
\n\n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTMLDocu
ment || window.Document, // Gecko adds these to HTMLDocument\n window.HTMLHe
adElement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = impl;
\n }\n\n function wrapImplMethod(constructor, name) {\n var original = docu
ment.implementation[name];\n constructor.prototype[name] = function() {\n
return wrap(original.apply(this.impl, arguments));\n };\n }\n\n function
forwardImplMethod(constructor, name) {\n var original = document.implementati
on[name];\n constructor.prototype[name] = function() {\n return original
.apply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementation
, 'createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocument');
\n wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplMetho
d(DOMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplementatio
n, DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImplementat
ion,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createHTMLD
ocument',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNodeNoRe
move;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrappers
.Document = Document;\n\n})(window.ShadowDOMPolyfill);\n", |
| 136 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var EventTarget = scope.
wrappers.EventTarget;\n var Selection = scope.wrappers.Selection;\n var mixin
= scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderAllP
ending = scope.renderAllPending;\n var unwrap = scope.unwrap;\n var unwrapIfNe
eded = scope.unwrapIfNeeded;\n var wrap = scope.wrap;\n\n var OriginalWindow =
window.Window;\n var originalGetComputedStyle = window.getComputedStyle;\n va
r originalGetSelection = window.getSelection;\n\n function Window(impl) {\n
EventTarget.call(this, impl);\n }\n Window.prototype = Object.create(EventTarg
et.prototype);\n\n OriginalWindow.prototype.getComputedStyle = function(el, pse
udo) {\n return wrap(this || window).getComputedStyle(unwrapIfNeeded(el), pse
udo);\n };\n\n OriginalWindow.prototype.getSelection = function() {\n retur
n wrap(this || window).getSelection();\n };\n\n // Work around for https://bug
zilla.mozilla.org/show_bug.cgi?id=943065\n delete window.getComputedStyle;\n d
elete window.getSelection;\n\n ['addEventListener', 'removeEventListener', 'dis
patchEvent'].forEach(\n function(name) {\n OriginalWindow.prototype[
name] = function() {\n var w = wrap(this || window);\n return
w[name].apply(w, arguments);\n };\n\n // Work around for https://b
ugzilla.mozilla.org/show_bug.cgi?id=943065\n delete window[name];\n
});\n\n mixin(Window.prototype, {\n getComputedStyle: function(el, pseudo) {
\n renderAllPending();\n return originalGetComputedStyle.call(unwrap(t
his), unwrapIfNeeded(el),\n pseudo);\n
},\n getSelection: function() {\n renderAllPending();\n return
new Selection(originalGetSelection.call(unwrap(this)));\n },\n });\n\n regi
sterWrapper(OriginalWindow, Window);\n\n scope.wrappers.Window = Window;\n\n})(
window.ShadowDOMPolyfill);\n", |
| 137 "// Copyright 2013 The Polymer Authors. All rights reserved.\n// Use of this
source code is goverened by a BSD-style\n// license that can be found in the LI
CENSE file.\n\n(function(scope) {\n 'use strict';\n\n var isWrapperFor = scope
.isWrapperFor;\n\n // This is a list of the elements we currently override the
global constructor\n // for.\n var elements = {\n 'a': 'HTMLAnchorElement',
\n\n // Do not create an applet element by default since it shows a warning i
n\n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'app
let': 'HTMLAppletElement',\n\n 'area': 'HTMLAreaElement',\n 'br': 'HTMLBRE
lement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n 'b
utton': 'HTMLButtonElement',\n // 'command': 'HTMLCommandElement', // Not fu
lly implemented in Gecko.\n 'dl': 'HTMLDListElement',\n 'datalist': 'HTMLD
ataListElement',\n 'data': 'HTMLDataElement',\n 'dir': 'HTMLDirectoryEleme
nt',\n 'div': 'HTMLDivElement',\n 'embed': 'HTMLEmbedElement',\n 'field
set': 'HTMLFieldSetElement',\n 'font': 'HTMLFontElement',\n 'form': 'HTMLF
ormElement',\n 'frame': 'HTMLFrameElement',\n 'frameset': 'HTMLFrameSetEle
ment',\n 'hr': 'HTMLHRElement',\n 'head': 'HTMLHeadElement',\n 'h1': 'H
TMLHeadingElement',\n 'html': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameEl
ement',\n 'input': 'HTMLInputElement',\n 'li': 'HTMLLIElement',\n 'labe
l': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'link': 'HTMLLi
nkElement',\n 'map': 'HTMLMapElement',\n 'marquee': 'HTMLMarqueeElement',\
n 'menu': 'HTMLMenuElement',\n 'menuitem': 'HTMLMenuItemElement',\n 'me
ta': 'HTMLMetaElement',\n 'meter': 'HTMLMeterElement',\n 'del': 'HTMLModEl
ement',\n 'ol': 'HTMLOListElement',\n 'object': 'HTMLObjectElement',\n
'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',\n 'out
put': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'param': 'HTML
ParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLProgressEleme
nt',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',\n 'sel
ect': 'HTMLSelectElement',\n 'source': 'HTMLSourceElement',\n 'span': 'HTM
LSpanElement',\n 'style': 'HTMLStyleElement',\n 'time': 'HTMLTimeElement',
\n 'caption': 'HTMLTableCaptionElement',\n // WebKit and Moz are wrong:\n
// https://bugs.webkit.org/show_bug.cgi?id=111469\n // https://bugzilla.mo
zilla.org/show_bug.cgi?id=848096\n // 'td': 'HTMLTableCellElement',\n 'col
': 'HTMLTableColElement',\n 'table': 'HTMLTableElement',\n 'tr': 'HTMLTabl
eRowElement',\n 'thead': 'HTMLTableSectionElement',\n 'tbody': 'HTMLTableS
ectionElement',\n 'textarea': 'HTMLTextAreaElement',\n 'track': 'HTMLTrack
Element',\n 'title': 'HTMLTitleElement',\n 'ul': 'HTMLUListElement',\n
'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tagName) {\
n var nativeConstructorName = elements[tagName];\n var nativeConstructor =
window[nativeConstructorName];\n if (!nativeConstructor)\n return;\n
var element = document.createElement(tagName);\n var wrapperConstructor = el
ement.constructor;\n window[nativeConstructorName] = wrapperConstructor;\n }
\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.getOwnProp
ertyNames(scope.wrappers).forEach(function(name) {\n window[name] = scope.wra
ppers[name]\n });\n\n // Export for testing.\n scope.knownElements = elements
;\n\n})(window.ShadowDOMPolyfill);\n", |
| 138 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function() {\n\n // convenient global\n window.wrap = Sh
adowDOMPolyfill.wrapIfNeeded;\n window.unwrap = ShadowDOMPolyfill.unwrapIfNeede
d;\n\n // users may want to customize other types\n // TODO(sjmiles): 'button'
is now supported by ShadowDOMPolyfill, but\n // I've left this code here in ca
se we need to temporarily patch another\n // type\n /*\n (function() {\n v
ar elts = {HTMLButtonElement: 'button'};\n for (var c in elts) {\n windo
w[c] = function() { throw 'Patched Constructor'; };\n window[c].prototype =
Object.getPrototypeOf(\n document.createElement(elts[c]));\n }\n }
)();\n */\n\n // patch in prefixed name\n Object.defineProperty(Element.proto
type, 'webkitShadowRoot',\n Object.getOwnPropertyDescriptor(Element.prototy
pe, 'shadowRoot'));\n\n var originalCreateShadowRoot = Element.prototype.create
ShadowRoot;\n Element.prototype.createShadowRoot = function() {\n var root =
originalCreateShadowRoot.call(this);\n CustomElements.watchShadow(this);\n
return root;\n };\n\n Element.prototype.webkitCreateShadowRoot = Element.pro
totype.createShadowRoot;\n})();\n", |
| 139 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/*\n This is a limited shim for ShadowDOM css styling.\n
https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#style
s\n \n The intention here is to support only the styling features which can be
\n relatively simply implemented. The goal is to allow users to avoid the \n
most obvious pitfalls and do so without compromising performance significantly.
\n For ShadowDOM styling that's not covered here, a set of best practices\n ca
n be provided that should allow users to accomplish more complex styling.\n\n T
he following is a list of specific ShadowDOM styling features and a brief\n dis
cussion of the approach used to shim.\n\n Shimmed features:\n\n * :host, :ance
stor: ShadowDOM allows styling of the shadowRoot's host\n element using the :ho
st rule. To shim this feature, the :host styles are \n reformatted and prefixed
with a given scope name and promoted to a \n document level stylesheet.\n For
example, given a scope name of .foo, a rule like this:\n \n :host {\n
background: red;\n }\n }\n \n becomes:\n \n .foo {\n backgr
ound: red;\n }\n \n * encapsultion: Styles defined within ShadowDOM, apply
only to \n dom inside the ShadowDOM. Polymer uses one of two techniques to imle
ment\n this feature.\n \n By default, rules are prefixed with the host elemen
t tag name \n as a descendant selector. This ensures styling does not leak out
of the 'top'\n of the element's ShadowDOM. For example,\n\n div {\n font-
weight: bold;\n }\n \n becomes:\n\n x-foo div {\n font-weight: bold;\
n }\n \n becomes:\n\n\n Alternatively, if Platform.ShadowCSS.strictStyling
is set to true then \n selectors are scoped by adding an attribute selector su
ffix to each\n simple selector that contains the host element tag name. Each el
ement \n in the element's ShadowDOM template is also given the scope attribute.
\n Thus, these rules match only elements that have the scope attribute.\n For
example, given a scope name of x-foo, a rule like this:\n \n div {\n f
ont-weight: bold;\n }\n \n becomes:\n \n div[x-foo] {\n font-weigh
t: bold;\n }\n\n Note that elements that are dynamically added to a scope mu
st have the scope\n selector added to them manually.\n\n * upper/lower bound e
ncapsulation: Styles which are defined outside a\n shadowRoot should not cross
the ShadowDOM boundary and should not apply\n inside a shadowRoot.\n\n This st
yling behavior is not emulated. Some possible ways to do this that \n were reje
cted due to complexity and/or performance concerns include: (1) reset\n every p
ossible property for every possible selector for a given scope name;\n (2) re-i
mplement css in javascript.\n \n As an alternative, users should make sure to
use selectors\n specific to the scope in which they are working.\n \n * ::dis
tributed: This behavior is not emulated. It's often not necessary\n to style th
e contents of a specific insertion point and instead, descendants\n of the host
element can be styled selectively. Users can also create an \n extra node arou
nd an insertion point and style that node's contents\n via descendent selectors
. For example, with a shadowRoot like this:\n \n <style>\n ::content(di
v) {\n background: red;\n }\n </style>\n <content></content>\n
\n could become:\n \n <style>\n / *@polyfill .content-container div
* / \n ::content(div) {\n background: red;\n }\n </style>\n
<div class=\"content-container\">\n <content></content>\n </div>\n \
n Note the use of @polyfill in the comment above a ShadowDOM specific style\n
declaration. This is a directive to the styling shim to use the selector \n in
comments in lieu of the next selector when running under polyfill.\n*/\n(functio
n(scope) {\n\nvar ShadowCSS = {\n strictStyling: false,\n registry: {},\n //
Shim styles for a given root associated with a name and extendsName\n // 1. cac
he root styles by name\n // 2. optionally tag root nodes with scope name\n //
3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */\n // 4. sh
im :host and scoping\n shimStyling: function(root, name, extendsName) {\n va
r typeExtension = this.isTypeExtension(extendsName);\n // use caching to make
working with styles nodes easier and to facilitate\n // lookup of extendee\n
var def = this.registerDefinition(root, name, extendsName);\n // find sty
les and apply shimming...\n if (this.strictStyling) {\n this.applyScopeT
oContent(root, name);\n }\n var cssText = this.stylesToShimmedCssText(def.
rootStyles, def.scopeStyles,\n name, typeExtension);\n // provide shim
medStyle for user extensibility\n def.shimmedStyle = cssTextToStyle(cssText);
\n if (root) {\n root.shimmedStyle = def.shimmedStyle;\n }\n // re
move existing style elements\n for (var i=0, l=def.rootStyles.length, s; (i<l
) && (s=def.rootStyles[i]); \n i++) {\n s.parentNode.removeChild(s);
\n }\n // add style to document\n addCssToDocument(cssText);\n },\n /
/ apply @polyfill rules + :host and scope shimming\n stylesToShimmedCssText: fu
nction(rootStyles, scopeStyles, name,\n typeExtension) {\n name = name |
| '';\n // insert @polyfill and @polyfill-rule rules into style elements\n
// scoping process takes care of shimming these\n this.insertPolyfillDirecti
ves(rootStyles);\n this.insertPolyfillRules(rootStyles);\n var cssText = t
his.shimScoping(scopeStyles, name, typeExtension);\n // note: we only need to
do rootStyles since these are unscoped.\n cssText += this.extractPolyfillUns
copedRules(rootStyles);\n return cssText;\n },\n registerDefinition: functi
on(root, name, extendsName) {\n var def = this.registry[name] = {\n root
: root,\n name: name,\n extendsName: extendsName\n }\n var style
s = root ? root.querySelectorAll('style') : [];\n styles = styles ? Array.pro
totype.slice.call(styles, 0) : [];\n def.rootStyles = styles;\n def.scopeS
tyles = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n
if (extendee && (!root || root.querySelector('shadow'))) {\n def.scopeStyl
es = extendee.scopeStyles.concat(def.scopeStyles);\n }\n return def;\n },
\n isTypeExtension: function(extendsName) {\n return extendsName && extendsN
ame.indexOf('-') < 0;\n },\n applyScopeToContent: function(root, name) {\n
if (root) {\n // add the name attribute to each node in root.\n Array.
prototype.forEach.call(root.querySelectorAll('*'),\n function(node) {\n
node.setAttribute(name, '');\n });\n // and template c
ontents too\n Array.prototype.forEach.call(root.querySelectorAll('template'
),\n function(template) {\n this.applyScopeToContent(templat
e.content, name);\n },\n this);\n }\n },\n /*\n * Proce
ss styles to convert native ShadowDOM rules that will trip\n * up the css pars
er; we rely on decorating the stylesheet with comments.\n * \n * For example
, we convert this rule:\n * \n * (comment start) @polyfill :host menu-item (
comment end)\n * shadow::-webkit-distributed(menu-item) {\n * \n * to this
:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDirectives: f
unction(styles) {\n if (styles) {\n Array.prototype.forEach.call(styles,
function(s) {\n s.textContent = this.insertPolyfillDirectivesInCssText(s
.textContent);\n }, this);\n }\n },\n insertPolyfillDirectivesInCssTex
t: function(cssText) {\n return cssText.replace(cssPolyfillCommentRe, functio
n(match, p1) {\n // remove end comment delimiter and add block start\n
return p1.slice(0, -2) + '{';\n });\n },\n /*\n * Process styles to add
rules which will only apply under the polyfill\n * \n * For example, we conv
ert this rule:\n * \n * (comment start) @polyfill-rule :host menu-item { \n
* ... } (comment end)\n * \n * to this:\n * \n * scopeName menu-item {
...}\n *\n **/\n insertPolyfillRules: function(styles) {\n if (styles) {\
n Array.prototype.forEach.call(styles, function(s) {\n s.textContent
= this.insertPolyfillRulesInCssText(s.textContent);\n }, this);\n }\n
},\n insertPolyfillRulesInCssText: function(cssText) {\n return cssText.repl
ace(cssPolyfillRuleCommentRe, function(match, p1) {\n // remove end comment
delimiter\n return p1.slice(0, -1);\n });\n },\n /*\n * Process sty
les to add rules which will only apply under the polyfill\n * and do not proce
ss via CSSOM. (CSSOM is destructive to rules on rare \n * occasions, e.g. -web
kit-calc on Safari.)\n * For example, we convert this rule:\n * \n * (comm
ent start) @polyfill-unscoped-rule menu-item { \n * ... } (comment end)\n *
\n * to this:\n * \n * menu-item {...}\n *\n **/\n extractPolyfillUnsc
opedRules: function(styles) {\n var cssText = '';\n if (styles) {\n A
rray.prototype.forEach.call(styles, function(s) {\n cssText += this.extra
ctPolyfillUnscopedRulesFromCssText(\n s.textContent) + '\\n\\n';\n
}, this);\n }\n return cssText;\n },\n extractPolyfillUnscopedRulesFr
omCssText: function(cssText) {\n var r = '', matches;\n while (matches = c
ssPolyfillUnscopedRuleCommentRe.exec(cssText)) {\n r += matches[1].slice(0,
-1) + '\\n\\n';\n }\n return r;\n },\n /* Ensure styles are scoped. Pse
udo-scoping takes a rule like:\n * \n * .foo {... } \n * \n * and con
verts this to\n * \n * scopeName .foo { ... }\n */\n shimScoping: functi
on(styles, name, typeExtension) {\n if (styles) {\n return this.convertS
copedStyles(styles, name, typeExtension);\n }\n },\n convertScopedStyles: f
unction(styles, name, typeExtension) {\n var cssText = stylesToCssText(styles
);\n cssText = this.insertPolyfillHostInCssText(cssText);\n cssText = this
.convertColonHost(cssText);\n cssText = this.convertColonAncestor(cssText);\n
cssText = this.convertCombinators(cssText);\n var rules = cssToRules(cssT
ext);\n if (name) {\n cssText = this.scopeRules(rules, name, typeExtensi
on);\n }\n return cssText;\n },\n /*\n * convert a rule like :host(.fo
o) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertCo
lonHost: function(cssText) {\n return this.convertColonRule(cssText, cssColon
HostRe,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule l
ike :ancestor(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar,
.foo scopeName > .bar { }\n * \n * and\n *\n * :ancestor(.foo:host) .bar
{ ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conver
tColonAncestor: function(cssText) {\n return this.convertColonRule(cssText, c
ssColonAncestorRe,\n this.colonAncestorPartReplacer);\n },\n convertCol
onRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p2 = conte
nts of (), p3 rest of rule\n return cssText.replace(regExp, function(m, p1, p
2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var par
ts = p2.split(','), r = [];\n for (var i=0, l=parts.length, p; (i<l) && (
p=parts[i]); i++) {\n p = p.trim();\n r.push(partReplacer(p1,
p, p3));\n }\n return r.join(',');\n } else {\n return
p1 + p3;\n }\n });\n },\n colonAncestorPartReplacer: function(host, p
art, suffix) {\n if (part.match(polyfillHost)) {\n return this.colonHost
PartReplacer(host, part, suffix);\n } else {\n return host + part + suff
ix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostPartReplacer: f
unction(host, part, suffix) {\n return host + part.replace(polyfillHost, '')
+ suffix;\n },\n /*\n * Convert ^ and ^^ combinators by replacing with space
.\n */\n convertCombinators: function(cssText) {\n return cssText.replace(/
\\^\\^/g, ' ').replace(/\\^/g, ' ');\n },\n // change a selector like 'div' to
'name div'\n scopeRules: function(cssRules, name, typeExtension) {\n var cs
sText = '';\n Array.prototype.forEach.call(cssRules, function(rule) {\n
if (rule.selectorText && (rule.style && rule.style.cssText)) {\n cssText
+= this.scopeSelector(rule.selectorText, name, typeExtension, \n this.s
trictStyling) + ' {\\n\\t';\n cssText += this.propertiesFromRule(rule) +
'\\n}\\n\\n';\n } else if (rule.media) {\n cssText += '@media ' + ru
le.media.mediaText + ' {\\n';\n cssText += this.scopeRules(rule.cssRules,
name, typeExtension);\n cssText += '\\n}\\n\\n';\n } else if (rule.
cssText) {\n cssText += rule.cssText + '\\n\\n';\n }\n }, this);\
n return cssText;\n },\n scopeSelector: function(selector, name, typeExtens
ion, strict) {\n var r = [], parts = selector.split(',');\n parts.forEach(
function(p) {\n p = p.trim();\n if (this.selectorNeedsScoping(p, name,
typeExtension)) {\n p = (strict && !p.match(polyfillHostNoCombinator)) ?
\n this.applyStrictSelectorScope(p, name) :\n this.applyS
impleSelectorScope(p, name, typeExtension);\n }\n r.push(p);\n }, t
his);\n return r.join(', ');\n },\n selectorNeedsScoping: function(selector
, name, typeExtension) {\n var re = this.makeScopeMatcher(name, typeExtension
);\n return !selector.match(re);\n },\n makeScopeMatcher: function(name, ty
peExtension) {\n var matchScope = typeExtension ? '\\\\[is=[\\'\"]?' + name +
'[\\'\"]?\\\\]' : name;\n return new RegExp('^(' + matchScope + ')' + select
orReSuffix, 'm');\n },\n // scope via name and [is=name]\n applySimpleSelecto
rScope: function(selector, name, typeExtension) {\n var scoper = typeExtensio
n ? '[is=' + name + ']' : name;\n if (selector.match(polyfillHostRe)) {\n
selector = selector.replace(polyfillHostNoCombinator, scoper);\n return s
elector.replace(polyfillHostRe, scoper + ' ');\n } else {\n return scope
r + ' ' + selector;\n }\n },\n // return a selector with [name] suffix on e
ach simple selector\n // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .z
ot[name]\n applyStrictSelectorScope: function(selector, name) {\n var splits
= [' ', '>', '+', '~'],\n scoped = selector,\n attrName = '[' + name
+ ']';\n splits.forEach(function(sep) {\n var parts = scoped.split(sep);
\n scoped = parts.map(function(p) {\n // remove :host since it shoul
d be unnecessary\n var t = p.trim().replace(polyfillHostRe, '');\n
if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {\n p =
t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')\n }\n retu
rn p;\n }).join(sep);\n });\n return scoped;\n },\n insertPolyfillH
ostInCssText: function(selector) {\n return selector.replace(hostRe, polyfill
Host).replace(colonHostRe,\n polyfillHost).replace(colonAncestorRe, polyf
illAncestor);\n },\n propertiesFromRule: function(rule) {\n // TODO(sorvell
): Safari cssom incorrectly removes quotes from the content\n // property. (h
ttps://bugs.webkit.org/show_bug.cgi?id=118045)\n if (rule.style.content && !r
ule.style.content.match(/['\"]+/)) {\n return rule.style.cssText.replace(/c
ontent:[^;]*;/g, 'content: \\'' + \n rule.style.content + '\\';');\n
}\n return rule.style.cssText;\n }\n};\n\nvar selectorRe = /([^{]*)({[\\s\\
S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n c
ssPolyfillCommentRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^{]*
?){/gim,\n cssPolyfillRuleCommentRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*
][^*]*\\*+)*)\\//gim,\n cssPolyfillUnscopedRuleCommentRe = /\\/\\*\\s@polyfil
l-unscoped-rule([^*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssPseudoRe = /::(x-[^\
\s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host pre
-processed to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // note
: :ancestor pre-processed to -shadowcssancestor.\n polyfillAncestor = '-shado
wcssancestor',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[
^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new RegExp('(' +
polyfillHost + parenSuffix, 'gim'),\n cssColonAncestorRe = new RegExp('(' + p
olyfillAncestor + parenSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+\\[.,{
:][\\\\s\\\\S]*)?$',\n hostRe = /@host/gim,\n colonHostRe = /\\:host/gim,\
n colonAncestorRe = /\\:ancestor/gim,\n /* host name without combinator */
\n polyfillHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillH
ostRe = new RegExp(polyfillHost, 'gim');\n polyfillAncestorRe = new RegExp(po
lyfillAncestor, 'gim');\n\nfunction stylesToCssText(styles, preserveComments) {\
n var cssText = '';\n Array.prototype.forEach.call(styles, function(s) {\n
cssText += s.textContent + '\\n\\n';\n });\n // strip comments for easier proc
essing\n if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe,
'');\n }\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var sty
le = document.createElement('style');\n style.textContent = cssText;\n return
style;\n}\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssTex
t);\n document.head.appendChild(style);\n var rules = style.sheet.cssRules;\n
style.parentNode.removeChild(style);\n return rules;\n}\n\nfunction rulesToCss
(cssRules) {\n for (var i=0, css=[]; i < cssRules.length; i++) {\n css.push(
cssRules[i].cssText);\n }\n return css.join('\\n\\n');\n}\n\nfunction addCssTo
Document(cssText) {\n if (cssText) {\n getSheet().appendChild(document.creat
eTextNode(cssText));\n }\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shadowdom';\nvar SHIM
MED_ATTRIBUTE = 'shim-shadowdom-css';\n\nvar sheet;\nfunction getSheet() {\n if
(!sheet) {\n sheet = document.createElement(\"style\");\n sheet.setAttrib
ute(SHIMMED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = true;\n }\n return
sheet;\n}\n\n// add polyfill stylesheet to document\nif (window.ShadowDOMPolyfi
ll) {\n addCssToDocument('style { display: none !important; }\\n');\n var doc
= wrap(document);\n var head = doc.querySelector('head');\n head.insertBefore(
getSheet(), head.childNodes[0]);\n\n // TODO(sorvell): monkey-patching HTMLImpo
rts is abusive;\n // consider a better solution.\n document.addEventListener('
DOMContentLoaded', function() {\n var urlResolver = scope.urlResolver;\n \
n if (window.HTMLImports && !HTMLImports.useNative) {\n var SHIM_SHEET_S
ELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTRIBUTE + ']';\n
var SHIM_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n HTMLImports.i
mporter.documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n HTMLImport
s.importer.importsPreloadSelectors += ',' + SHIM_SHEET_SELECTOR;\n\n HTMLIm
ports.parser.documentSelectors = [\n HTMLImports.parser.documentSelectors
,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\n ].join(',');
\n \n HTMLImports.parser.parseGeneric = function(elt) {\n if (elt[S
HIMMED_ATTRIBUTE]) {\n return;\n }\n var style = elt.__im
portElement || elt;\n if (elt.__resource) {\n style = elt.ownerD
ocument.createElement('style');\n style.textContent = urlResolver.resol
veCssText(\n elt.__resource, elt.href);\n } else {\n
urlResolver.resolveStyles(style); \n }\n var styles = [style];\
n style.textContent = ShadowCSS.stylesToShimmedCssText(styles, styles);\n
style.removeAttribute(SHIM_ATTRIBUTE, '');\n style.setAttribute(S
HIMMED_ATTRIBUTE, '');\n style[SHIMMED_ATTRIBUTE] = true;\n // pla
ce in document\n if (style.parentNode !== head) {\n // replace l
inks in head\n if (elt.parentNode === head) {\n head.replace
Child(style, elt);\n } else {\n head.appendChild(style);\n
}\n }\n style.__importParsed = true\n this.markPars
ingComplete(elt);\n }\n\n var hasResource = HTMLImports.parser.hasReso
urce;\n HTMLImports.parser.hasResource = function(node) {\n if (node
.localName === 'link' && node.rel === 'stylesheet' &&\n node.hasAttri
bute(SHIM_ATTRIBUTE)) {\n return (node.__resource);\n } else {\n
return hasResource.call(this, node);\n }\n }\n\n }\n }
);\n}\n\n// exports\nscope.ShadowCSS = ShadowCSS;\n\n})(window.Platform);", |
| 140 "} else {", |
| 141 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function() {\n\n // poor man's adapter for template.conte
nt on various platform scenarios\n window.templateContent = window.templateCont
ent || function(inTemplate) {\n return inTemplate.content;\n };\n\n // so w
e can call wrap/unwrap without testing for ShadowDOMPolyfill\n\n window.wrap =
window.unwrap = function(n){\n return n;\n }\n\n var originalCreateShadowRo
ot = Element.prototype.webkitCreateShadowRoot;\n Element.prototype.webkitCreate
ShadowRoot = function() {\n var elderRoot = this.webkitShadowRoot;\n var r
oot = originalCreateShadowRoot.call(this);\n root.olderShadowRoot = elderRoot
;\n root.host = this;\n CustomElements.watchShadow(this);\n return root
;\n }\n\n Object.defineProperties(Element.prototype, {\n shadowRoot: {\n
get: function() {\n return this.webkitShadowRoot;\n }\n },\n
createShadowRoot: {\n value: function() {\n return this.webkitCrea
teShadowRoot();\n }\n }\n });\n\n window.templateContent = function(in
Template) {\n // if MDV exists, it may need to boostrap this template to reve
al content\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap)
{\n HTMLTemplateElement.bootstrap(inTemplate);\n }\n // fallback whe
n there is no Shadow DOM polyfill, no MDV polyfill, and no\n // native templa
te support\n if (!inTemplate.content && !inTemplate._content) {\n var fr
ag = document.createDocumentFragment();\n while (inTemplate.firstChild) {\n
frag.appendChild(inTemplate.firstChild);\n }\n inTemplate._con
tent = frag;\n }\n return inTemplate.content || inTemplate._content;\n };
\n\n})();", |
| 142 "}", |
| 143 "/* Any copyright is dedicated to the Public Domain.\n * http://creativecomm
ons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n //
feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope.
forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n hasWorki
ngUrl = u.href === 'http://a/b';\n } catch(e) {}\n }\n\n if (hasWorkingUrl)
\n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\
n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n
relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n
var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['%
2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping[
'%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRela
tiveScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n funct
ion invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n fu
nction IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n
// XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F
&&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf
(unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponen
t(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs
to encode c using encoding and then\n // convert the bytes one-by-one.\n\n
var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x
7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E,
0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return enc
odeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n
ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOver
ride, base) {\n function err(message) {\n errors.push(message)\n }\n\
n var state = stateOverride || 'scheme start',\n cursor = 0,\n
buffer = '',\n seenAt = false,\n seenBracket = false,\n err
ors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this
._isInvalid) {\n var c = input[cursor];\n switch (state) {\n ca
se 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c
.toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else i
f (!stateOverride) {\n buffer = '';\n state = 'no scheme';
\n continue;\n } else {\n err('Invalid scheme.');
\n break loop;\n }\n break;\n\n case 'scheme
':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerC
ase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme
= buffer;\n buffer = '';\n if (stateOverride) {\n
break loop;\n }\n if (isRelativeScheme(this._scheme)
) {\n this._isRelative = true;\n }\n if ('fil
e' == this._scheme) {\n state = 'relative';\n } else if
(this._isRelative && base && base._scheme == this._scheme) {\n stat
e = 'relative or authority';\n } else if (this._isRelative) {\n
state = 'authority first slash';\n } else {\n st
ate = 'scheme data';\n }\n } else if (!stateOverride) {\n
buffer = '';\n cursor = 0;\n state = 'no scheme';
\n continue;\n } else if (EOF == c) {\n break loo
p;\n } else {\n err('Code point not allowed in scheme: ' + c
)\n break loop;\n }\n break;\n\n case 'schem
e data':\n if ('?' == c) {\n query = '?';\n state
= 'query';\n } else if ('#' == c) {\n this._fragment = '#';
\n state = 'fragment';\n } else {\n // XXX error
handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\
n this._schemeData += percentEscape(c);\n }\n }
\n break;\n\n case 'no scheme':\n if (!base || !(isRela
tiveScheme(base._scheme))) {\n err('Missing scheme.');\n i
nvalid.call(this);\n } else {\n state = 'relative';\n
continue;\n }\n break;\n\n case 'relative or autho
rity':\n if ('/' == c && '/' == input[cursor+1]) {\n state =
'authority ignore slashes';\n } else {\n err('Expected /, g
ot: ' + c);\n state = 'relative';\n continue\n }\
n break;\n\n case 'relative':\n this._isRelative = true
;\n if ('file' != this._scheme)\n this._scheme = base._schem
e;\n if (EOF == c) {\n this._host = base._host;\n
this._port = base._port;\n this._path = base._path.slice();\n
this._query = base._query;\n break loop;\n } else if ('
/' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\
is an invalid code point.');\n state = 'relative slash';\n
} else if ('?' == c) {\n this._host = base._host;\n this._
port = base._port;\n this._path = base._path.slice();\n th
is._query = '?';\n state = 'query';\n } else if ('#' == c) {
\n this._host = base._host;\n this._port = base._port;\n
this._path = base._path.slice();\n this._query = base._quer
y;\n this._fragment = '#';\n state = 'fragment';\n
} else {\n var nextC = input[cursor+1]\n var nextNextC =
input[cursor+2]\n if (\n 'file' != this._scheme || !ALP
HA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (E
OF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC &
& '#' != nextNextC)) {\n this._host = base._host;\n th
is._port = base._port;\n this._path = base._path.slice();\n
this._path.pop();\n }\n state = 'relative path';\n
continue;\n }\n break;\n\n case 'relative sla
sh':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n
err('\\\\ is an invalid code point.');\n }\n
if ('file' == this._scheme) {\n state = 'file host';\n
} else {\n state = 'authority ignore slashes';\n }\n
} else {\n if ('file' != this._scheme) {\n this._h
ost = base._host;\n this._port = base._port;\n }\n
state = 'relative path';\n continue;\n }\n br
eak;\n\n case 'authority first slash':\n if ('/' == c) {\n
state = 'authority second slash';\n } else {\n err(\"E
xpected '/', got: \" + c);\n state = 'authority ignore slashes';\n
continue;\n }\n break;\n\n case 'authority sec
ond slash':\n state = 'authority ignore slashes';\n if ('/' !=
c) {\n err(\"Expected '/', got: \" + c);\n continue;\n
}\n break;\n\n case 'authority ignore slashes':\n
if ('/' != c && '\\\\' != c) {\n state = 'authority';\n
continue;\n } else {\n err('Expected authority, got: ' + c);
\n }\n break;\n\n case 'authority':\n if ('@'
== c) {\n if (seenAt) {\n err('@ already seen.');\n
buffer += '%40';\n }\n seenAt = true;\n
for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n
if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n
err('Invalid whitespace in authority.');\n continue;\n
}\n // XXX check URL code points\n if (':' == cp &&
null === this._password) {\n this._password = '';\n
continue;\n }\n var tempC = percentEscape(cp);\n
(null !== this._password) ? this._password += tempC : this._username
+= tempC;\n }\n buffer = '';\n } else if (EOF ==
c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= b
uffer.length;\n buffer = '';\n state = 'host';\n
continue;\n } else {\n buffer += c;\n }\n
break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\
\\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA
.test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n sta
te = 'relative path';\n } else if (buffer.length == 0) {\n
state = 'relative path start';\n } else {\n this._hos
t = IDNAToASCII.call(this, buffer);\n buffer = '';\n s
tate = 'relative path start';\n }\n continue;\n }
else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid wh
itespace in file host.');\n } else {\n buffer += c;\n
}\n break;\n\n case 'host':\n case 'hostname':\n
if (':' == c && !seenBracket) {\n // XXX host parsing\n
this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n
state = 'port';\n if ('hostname' == stateOverride) {\n
break loop;\n }\n } else if (EOF == c || '/' == c || '\
\\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call(
this, buffer);\n buffer = '';\n state = 'relative path sta
rt';\n if (stateOverride) {\n break loop;\n }
\n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r'
!= c) {\n if ('[' == c) {\n seenBracket = true;\n
} else if (']' == c) {\n seenBracket = false;\n }\n
buffer += c;\n } else {\n err('Invalid code poin
t in host/hostname: ' + c);\n }\n break;\n\n case 'port
':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else
if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverrid
e) {\n if ('' != buffer) {\n var temp = parseInt(buffer,
10);\n if (temp != relative[this._scheme]) {\n this
._port = temp + '';\n }\n buffer = '';\n }\
n if (stateOverride) {\n break loop;\n }\n
state = 'relative path start';\n continue;\n } else
if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code po
int in port: ' + c);\n } else {\n invalid.call(this);\n
}\n break;\n\n case 'relative path start':\n if ('
\\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state
= 'relative path';\n if ('/' != c && '\\\\' != c) {\n contin
ue;\n }\n break;\n\n case 'relative path':\n i
f (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' ==
c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in
relative path.');\n }\n var tmp;\n if (tmp = re
lativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n
}\n if ('..' == buffer) {\n this._path.pop();\n
if ('/' != c && '\\\\' != c) {\n this._path.push('')
;\n }\n } else if ('.' == buffer && '/' != c && '\\\\' !
= c) {\n this._path.push('');\n } else if ('.' != buffer
) {\n if ('file' == this._scheme && this._path.length == 0 && buffe
r.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n b
uffer = buffer[0] + ':';\n }\n this._path.push(buffer)
;\n }\n buffer = '';\n if ('?' == c) {\n
this._query = '?';\n state = 'query';\n } else if
('#' == c) {\n this._fragment = '#';\n state = 'fragm
ent';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' !=
c) {\n buffer += percentEscape(c);\n }\n break;\n\n
case 'query':\n if (!stateOverride && '#' == c) {\n
this._fragment = '#';\n state = 'fragment';\n } else if (EOF
!= c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += p
ercentEscapeQuery(c);\n }\n break;\n\n case 'fragment':
\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n
this._fragment += c;\n }\n break;\n }\n\n cursor+
+;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._scheme
Data = '';\n this._username = '';\n this._password = null;\n this._host
= '';\n this._port = '';\n this._path = [];\n this._query = '';\n t
his._fragment = '';\n this._isInvalid = false;\n this._isRelative = false;
\n }\n\n // Does not process domain names or IP addresses.\n // Does not hand
le encoding for the query parameter.\n function jURL(url, base /* , encoding */
) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jU
RL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var inpu
t = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding =
encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.p
rototype = {\n get href() {\n if (this._isInvalid)\n return this.
_url;\n\n var authority = '';\n if ('' != this._username || null != th
is._password) {\n authority = this._username +\n (null != this
._password ? ':' + this._password : '') + '@';\n }\n\n return this.pro
tocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n
this.pathname + this._query + this._fragment;\n },\n set href(href)
{\n clear.call(this);\n parse.call(this, href);\n },\n\n get pr
otocol() {\n return this._scheme + ':';\n },\n set protocol(protocol)
{\n if (this._isInvalid)\n return;\n parse.call(this, protocol
+ ':', 'scheme start');\n },\n\n get host() {\n return this._isInval
id ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n
},\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, host, 'host');\n },\n\n get hostname
() {\n return this._host;\n },\n set hostname(hostname) {\n if (
this._isInvalid || !this._isRelative)\n return;\n parse.call(this, h
ostname, 'hostname');\n },\n\n get port() {\n return this._port;\n
},\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n
return;\n parse.call(this, port, 'port');\n },\n\n get pathname()
{\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this
._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n
if (this._isInvalid || !this._isRelative)\n return;\n this._path =
[];\n parse.call(this, pathname, 'relative path start');\n },\n\n ge
t search() {\n return this._isInvalid || !this._query || '?' == this._query
?\n '' : this._query;\n },\n set search(search) {\n if (thi
s._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n
if ('?' == search[0])\n search = search.slice(1);\n parse.call(
this, search, 'query');\n },\n\n get hash() {\n return this._isInvali
d || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\
n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n
this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1)
;\n parse.call(this, hash, 'fragment');\n }\n };\n\n scope.URL = jURL;
\n\n})(window);\n", |
| 144 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\n// Old versions of iOS do not have
bind.\n\nif (!Function.prototype.bind) {\n Function.prototype.bind = function(s
cope) {\n var self = this;\n var args = Array.prototype.slice.call(argumen
ts, 1);\n return function() {\n var args2 = args.slice();\n args2.p
ush.apply(args2, arguments);\n return self.apply(scope, args2);\n };\n
};\n}\n\n// mixin\n\n// copy all properties from inProps (et al) to inObj\nfunct
ion mixin(inObj/*, inProps, inMoreProps, ...*/) {\n var obj = inObj || {};\n f
or (var i = 1; i < arguments.length; i++) {\n var p = arguments[i];\n try
{\n for (var n in p) {\n copyProperty(n, p, obj);\n }\n } ca
tch(x) {\n }\n }\n return obj;\n}\n\n// copy property inName from inSource
object to inTarget object\nfunction copyProperty(inName, inSource, inTarget) {\n
var pd = getPropertyDescriptor(inSource, inName);\n Object.defineProperty(inT
arget, inName, pd);\n}\n\n// get property descriptor for inName on inObject, eve
n if\n// inName exists on some link in inObject's prototype chain\nfunction getP
ropertyDescriptor(inObject, inName) {\n if (inObject) {\n var pd = Object.ge
tOwnPropertyDescriptor(inObject, inName);\n return pd || getPropertyDescripto
r(Object.getPrototypeOf(inObject), inName);\n }\n}\n\n// export\n\nscope.mixin
= mixin;\n\n})(window.Platform);", |
| 145 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve
rsion 2.0 (the \"License\");\n// you may not use this file except in compliance
with the License.\n// You may obtain a copy of the License at\n//\n// http:/
/www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o
r agreed to in writing, software\n// distributed under the License is distribute
d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe
r express or implied.\n// See the License for the specific language governing pe
rmissions and\n// limitations under the License.\n\n(function(scope) {\n\n 'use
strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these methods
to take multiple classNames\n // * toggle: add a 2nd argument which forces the
given state rather\n // than toggling.\n\n var add = DOMTokenList.prototype.a
dd;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.add
= function() {\n for (var i = 0; i < arguments.length; i++) {\n add.cal
l(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = function(
) {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this, a
rguments[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name, boo
l) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n
}\n bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.prototyp
e.switch = function(oldName, newName) {\n oldName && this.remove(oldName);\n
newName && this.add(newName);\n };\n\n // add array() to NodeList, NamedNod
eMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.protot
ype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || wind
ow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n namedN
odeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = ArraySl
ice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n var s
tart = Date.now();\n // only at millisecond precision\n window.performance
= {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for req
uestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.request
AnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAnimat
ionFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeRaf
?\n function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n function
( callback ){\n return window.setTimeout(callback, 1000 / 60);\n
};\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.cancelA
nimationFrame = (function() {\n return window.webkitCancelAnimationFrame |
|\n window.mozCancelAnimationFrame ||\n function(id) {\n
clearTimeout(id);\n };\n })();\n }\n\n // TODO(sorvell): workaround
for bug:\n // https://code.google.com/p/chromium/issues/detail?id=229142\n //
remove when this bug is addressed\n // give main document templates a base that
allows them to fetch eagerly\n // resolved paths relative to the main document
\n var template = document.createElement('template');\n var base = document.cr
eateElement('base');\n base.href = document.baseURI;\n template.content.ownerD
ocument.appendChild(base);\n \n\n // utility\n\n function createDOM(inTagOrNo
de, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 'string' ?\n
document.createElement(inTagOrNode) : inTagOrNode.cloneNode(true);\n dom.inne
rHTML = inHTML;\n if (inAttrs) {\n for (var n in inAttrs) {\n dom
.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;\n }\n // Make a
stub for Polymer() for polyfill purposes; under the HTMLImports\n // polyfill,
scripts in the main document run before imports. That means\n // if (1) polyme
r is imported and (2) Polymer() is called in the main document\n // in a script
after the import, 2 occurs before 1. We correct this here\n // by specfiically
patching Polymer(); this is not necessary under native\n // HTMLImports.\n va
r elementDeclarations = [];\n\n var polymerStub = function(name, dictionary) {\
n elementDeclarations.push(arguments);\n }\n window.Polymer = polymerStub;\
n\n // deliver queued delcarations\n scope.deliverDeclarations = function() {\
n scope.deliverDeclarations = null;\n return elementDeclarations;\n }\n\n
// Once DOMContent has loaded, any main document scripts that depend on\n //
Polymer() should have run. Calling Polymer() now is an error until\n // polymer
is imported.\n window.addEventListener('DOMContentLoaded', function() {\n i
f (window.Polymer === polymerStub) {\n window.Polymer = function() {\n
console.error('You tried to use polymer without loading it first. To ' +\n
'load polymer, <link rel=\"import\" href=\"' + \n 'components/po
lymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope.create
DOM = createDOM;\n\n})(window.Platform);\n", |
| 146 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n// poor man's adapter for template.content on various pla
tform scenarios\nwindow.templateContent = window.templateContent || function(inT
emplate) {\n return inTemplate.content;\n};", |
| 147 "(function(scope) {\n \n scope = scope || (window.Inspector = {});\n \n
var inspector;\n\n window.sinspect = function(inNode, inProxy) {\n if (!insp
ector) {\n inspector = window.open('', 'ShadowDOM Inspector', null, true);\
n inspector.document.write(inspectorHTML);\n //inspector.document.clos
e();\n inspector.api = {\n shadowize: shadowize\n };\n }\n
inspect(inNode || wrap(document.body), inProxy);\n };\n\n var inspectorHTML
= [\n '<!DOCTYPE html>',\n '<html>',\n ' <head>',\n ' <title>Sha
dowDOM Inspector</title>',\n ' <style>',\n ' body {',\n '
}',\n ' pre {',\n ' font: 9pt \"Courier New\", monospace;',\n
' line-height: 1.5em;',\n ' }',\n ' tag {',\n '
color: purple;',\n ' }',\n ' ul {',\n ' margin: 0
;',\n ' padding: 0;',\n ' list-style: none;',\n '
}',\n ' li {',\n ' display: inline-block;',\n ' ba
ckground-color: #f1f1f1;',\n ' padding: 4px 6px;',\n ' bor
der-radius: 4px;',\n ' margin-right: 4px;',\n ' }',\n '
</style>',\n ' </head>',\n ' <body>',\n ' <ul id=\"crumbs\">',\n
' </ul>',\n ' <div id=\"tree\"></div>',\n ' </body>',\n '</ht
ml>'\n ].join('\\n');\n \n var crumbs = [];\n\n var displayCrumbs = function
() {\n // alias our document\n var d = inspector.document;\n // get cru
mbbar\n var cb = d.querySelector('#crumbs');\n // clear crumbs\n cb.tex
tContent = '';\n // build new crumbs\n for (var i=0, c; c=crumbs[i]; i++)
{\n var a = d.createElement('a');\n a.href = '#';\n a.textContent
= c.localName;\n a.idx = i;\n a.onclick = function(event) {\n
var c;\n while (crumbs.length > this.idx) {\n c = crumbs.pop();\
n }\n inspect(c.shadow || c, c);\n event.preventDefault();\
n };\n cb.appendChild(d.createElement('li')).appendChild(a);\n }\n
};\n\n var inspect = function(inNode, inProxy) {\n // alias our document\n
var d = inspector.document;\n // reset list of drillable nodes\n drilla
ble = [];\n // memoize our crumb proxy\n var proxy = inProxy || inNode;\n
crumbs.push(proxy);\n // update crumbs\n displayCrumbs();\n // refle
ct local tree\n d.body.querySelector('#tree').innerHTML =\n '<pre>' +
output(inNode, inNode.childNodes) + '</pre>';\n };\n\n var forEach = Array.pro
totype.forEach.call.bind(Array.prototype.forEach);\n\n var blacklisted = {STYLE
:1, SCRIPT:1, \"#comment\": 1, TEMPLATE: 1};\n var blacklist = function(inNode)
{\n return blacklisted[inNode.nodeName];\n };\n\n var output = function(in
Node, inChildNodes, inIndent) {\n if (blacklist(inNode)) {\n return '';\
n }\n var indent = inIndent || '';\n if (inNode.localName || inNode.nod
eType == 11) {\n var name = inNode.localName || 'shadow-root';\n //inC
hildNodes = ShadowDOM.localNodes(inNode);\n var info = indent + describe(in
Node);\n // if only textNodes\n // TODO(sjmiles): make correct for Sha
dowDOM\n /*if (!inNode.children.length && inNode.localName !== 'content' &&
inNode.localName !== 'shadow') {\n info += catTextContent(inChildNodes);
\n } else*/ {\n // TODO(sjmiles): native <shadow> has no reference t
o its projection\n if (name == 'content' /*|| name == 'shadow'*/) {\n
inChildNodes = inNode.getDistributedNodes();\n }\n info += '
<br/>';\n var ind = indent + ' ';\n forEach(inChildNode
s, function(n) {\n info += output(n, n.childNodes, ind);\n });\n
info += indent;\n }\n if (!({br:1}[name])) {\n info +=
'<tag></' + name + '></tag>';\n info += '<br/>';\n }\n } el
se {\n var text = inNode.textContent.trim();\n info = text ? indent +
'\"' + text + '\"' + '<br/>' : '';\n }\n return info;\n };\n\n var catTe
xtContent = function(inChildNodes) {\n var info = '';\n forEach(inChildNod
es, function(n) {\n info += n.textContent.trim();\n });\n return info
;\n };\n\n var drillable = [];\n\n var describe = function(inNode) {\n var
tag = '<tag>' + '<';\n var name = inNode.localName || 'shadow-root';\n
if (inNode.webkitShadowRoot || inNode.shadowRoot) {\n tag += ' <button idx
=\"' + drillable.length +\n '\" onclick=\"api.shadowize.call(this)\">' +
name + '</button>';\n drillable.push(inNode);\n } else {\n tag += n
ame || 'shadow-root';\n }\n if (inNode.attributes) {\n forEach(inNode
.attributes, function(a) {\n tag += ' ' + a.name + (a.value ? '=\"' + a.v
alue + '\"' : '');\n });\n }\n tag += '>'+ '</tag>';\n return t
ag;\n };\n\n // remote api\n\n shadowize = function() {\n var idx = Number
(this.attributes.idx.value);\n //alert(idx);\n var node = drillable[idx];\
n if (node) {\n inspect(node.webkitShadowRoot || node.shadowRoot, node)\
n } else {\n console.log(\"bad shadowize node\");\n console.dir(thi
s);\n }\n };\n \n // export\n \n scope.output = output;\n \n})(window.I
nspector);\n\n\n", |
| 148 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(scope) {\n\n // TODO(sorvell): It's desireable t
o provide a default stylesheet \n // that's convenient for styling unresolved e
lements, but\n // it's cumbersome to have to include this manually in every pag
e.\n // It would make sense to put inside some HTMLImport but \n // the HTMLIm
ports polyfill does not allow loading of stylesheets \n // that block rendering
. Therefore this injection is tolerated here.\n\n var style = document.createEl
ement('style');\n style.textContent = ''\n + 'body {'\n + 'transition
: opacity ease-in 0.2s;' \n + ' } \\n'\n + 'body[unresolved] {'\n
+ 'opacity: 0; display: block; overflow: hidden;' \n + ' } \\n'\n ;\n
var head = document.querySelector('head');\n head.insertBefore(style, head.fi
rstChild);\n\n})(Platform);\n", |
| 149 "(function(scope) {\n\n function withDependencies(task, depends) {\n dep
ends = depends || [];\n if (!depends.map) {\n depends = [depends];\n
}\n return task.apply(this, depends.map(marshal));\n }\n\n function module(
name, dependsOrFactory, moduleFactory) {\n var module;\n switch (arguments
.length) {\n case 0:\n return;\n case 1:\n module = null
;\n break;\n case 2:\n module = dependsOrFactory.apply(this);
\n break;\n default:\n module = withDependencies(moduleFactor
y, dependsOrFactory);\n break;\n }\n modules[name] = module;\n };\
n\n function marshal(name) {\n return modules[name];\n }\n\n var modules =
{};\n\n function using(depends, task) {\n HTMLImports.whenImportsReady(func
tion() {\n withDependencies(task, depends);\n });\n };\n\n // exports\
n\n scope.marshal = marshal;\n scope.module = module;\n scope.using = using;\
n\n})(window);", |
| 150 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(scope) {\n\nvar iterations = 0;\nvar callbacks =
[];\nvar twiddle = document.createTextNode('');\n\nfunction endOfMicrotask(callb
ack) {\n twiddle.textContent = iterations++;\n callbacks.push(callback);\n}\n\
nfunction atEndOfMicrotask() {\n while (callbacks.length) {\n callbacks.shif
t()();\n }\n}\n\nnew (window.MutationObserver || JsMutationObserver)(atEndOfMic
rotask)\n .observe(twiddle, {characterData: true})\n ;\n\n// exports\n\nscope.
endOfMicrotask = endOfMicrotask;\n\n})(Platform);\n\n", |
| 151 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\nvar urlResolver = {\n resolveDom:
function(root, url) {\n url = url || root.ownerDocument.baseURI;\n this.re
solveAttributes(root, url);\n this.resolveStyles(root, url);\n // handle t
emplate.content\n var templates = root.querySelectorAll('template');\n if
(templates) {\n for (var i = 0, l = templates.length, t; (i < l) && (t = te
mplates[i]); i++) {\n if (t.content) {\n this.resolveDom(t.conte
nt, url);\n }\n }\n }\n },\n resolveStyles: function(root, url)
{\n var styles = root.querySelectorAll('style');\n if (styles) {\n f
or (var i = 0, l = styles.length, s; (i < l) && (s = styles[i]); i++) {\n
this.resolveStyle(s, url);\n }\n }\n },\n resolveStyle: function(styl
e, url) {\n url = url || style.ownerDocument.baseURI;\n style.textContent
= this.resolveCssText(style.textContent, url);\n },\n resolveCssText: function
(cssText, baseUrl) {\n cssText = replaceUrlsInCssText(cssText, baseUrl, CSS_U
RL_REGEXP);\n return replaceUrlsInCssText(cssText, baseUrl, CSS_IMPORT_REGEXP
);\n },\n resolveAttributes: function(root, url) {\n if (root.hasAttributes
&& root.hasAttributes()) {\n this.resolveElementAttributes(root, url);\n
}\n // search for attributes that host urls\n var nodes = root && root.q
uerySelectorAll(URL_ATTRS_SELECTOR);\n if (nodes) {\n for (var i = 0, l
= nodes.length, n; (i < l) && (n = nodes[i]); i++) {\n this.resolveElemen
tAttributes(n, url);\n }\n }\n },\n resolveElementAttributes: function
(node, url) {\n url = url || node.ownerDocument.baseURI;\n URL_ATTRS.forEa
ch(function(v) {\n var attr = node.attributes[v];\n if (attr && attr.v
alue &&\n (attr.value.search(URL_TEMPLATE_SEARCH) < 0)) {\n var u
rlPath = resolveRelativeUrl(url, attr.value);\n attr.value = urlPath;\n
}\n });\n }\n};\n\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CS
S_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['hre
f', 'src', 'action'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + ']
';\nvar URL_TEMPLATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText
, baseUrl, regexp) {\n return cssText.replace(regexp, function(m, pre, url, pos
t) {\n var urlPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativ
eUrl(baseUrl, urlPath);\n return pre + '\\'' + urlPath + '\\'' + post;\n });
\n}\n\nfunction resolveRelativeUrl(baseUrl, url) {\n var u = new URL(url, baseU
rl);\n return makeDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(u
rl) {\n var root = document.baseURI;\n var u = new URL(url, root);\n if (u.ho
st === root.host && u.port === root.port &&\n u.protocol === root.protocol)
{\n return makeRelPath(root.pathname, u.pathname);\n } else {\n return u
rl;\n }\n}\n\n// make a relative path from source to target\nfunction makeRelPa
th(source, target) {\n var s = source.split('/');\n var t = target.split('/');
\n while (s.length && s[0] === t[0]){\n s.shift();\n t.shift();\n }\n f
or (var i = 0, l = s.length - 1; i < l; i++) {\n t.unshift('..');\n }\n ret
urn t.join('/');\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n})(Platfo
rm);\n", |
| 152 "/*\n * Copyright 2012 The Polymer Authors. All rights reserved.\n * Use of
this source code is goverened by a BSD-style\n * license that can be found in th
e LICENSE file.\n */\n\n(function(global) {\n\n var registrationsTable = new We
akMap();\n\n // We use setImmediate or postMessage for our future callback.\n
var setImmediate = window.msSetImmediate;\n\n // Use post message to emulate se
tImmediate.\n if (!setImmediate) {\n var setImmediateQueue = [];\n var se
ntinel = String(Math.random());\n window.addEventListener('message', function
(e) {\n if (e.data === sentinel) {\n var queue = setImmediateQueue;\
n setImmediateQueue = [];\n queue.forEach(function(func) {\n
func();\n });\n }\n });\n setImmediate = function(func) {\
n setImmediateQueue.push(func);\n window.postMessage(sentinel, '*');\n
};\n }\n\n // This is used to ensure that we never schedule 2 callas to se
tImmediate\n var isScheduled = false;\n\n // Keep track of observers that need
s to be notified next time.\n var scheduledObservers = [];\n\n /**\n * Sched
ules |dispatchCallback| to be called in the future.\n * @param {MutationObserv
er} observer\n */\n function scheduleCallback(observer) {\n scheduledObser
vers.push(observer);\n if (!isScheduled) {\n isScheduled = true;\n
setImmediate(dispatchCallbacks);\n }\n }\n\n function wrapIfNeeded(node) {\
n return window.ShadowDOMPolyfill &&\n window.ShadowDOMPolyfill.wrapIf
Needed(node) ||\n node;\n }\n\n function dispatchCallbacks() {\n //
http://dom.spec.whatwg.org/#mutation-observers\n\n isScheduled = false; // Us
ed to allow a new setImmediate call above.\n\n var observers = scheduledObser
vers;\n scheduledObservers = [];\n // Sort observers based on their creati
on UID (incremental).\n observers.sort(function(o1, o2) {\n return o1.ui
d_ - o2.uid_;\n });\n\n var anyNonEmpty = false;\n observers.forEach(fu
nction(observer) {\n\n // 2.1, 2.2\n var queue = observer.takeRecords(
);\n // 2.3. Remove all transient registered observers whose observer is mo
.\n removeTransientObserversFor(observer);\n\n // 2.4\n if (queue
.length) {\n observer.callback_(queue, observer);\n anyNonEmpty =
true;\n }\n });\n\n // 3.\n if (anyNonEmpty)\n dispatchCallba
cks();\n }\n\n function removeTransientObserversFor(observer) {\n observer.
nodes_.forEach(function(node) {\n var registrations = registrationsTable.ge
t(node);\n if (!registrations)\n return;\n registrations.forEac
h(function(registration) {\n if (registration.observer === observer)\n
registration.removeTransientObservers();\n });\n });\n }\n\n /*
*\n * This function is used for the \"For each registered observer observer (w
ith\n * observer's options as options) in target's list of registered observer
s,\n * run these substeps:\" and the \"For each ancestor ancestor of target, a
nd for\n * each registered observer observer (with options options) in ancesto
r's list\n * of registered observers, run these substeps:\" part of the algori
thms. The\n * |options.subtree| is checked to ensure that the callback is call
ed\n * correctly.\n *\n * @param {Node} target\n * @param {function(Muta
tionObserverInit):MutationRecord} callback\n */\n function forEachAncestorAnd
ObserverEnqueueRecord(target, callback) {\n for (var node = target; node; nod
e = node.parentNode) {\n var registrations = registrationsTable.get(node);\
n\n if (registrations) {\n for (var j = 0; j < registrations.length;
j++) {\n var registration = registrations[j];\n var options =
registration.options;\n\n // Only target ignores subtree.\n i
f (node !== target && !options.subtree)\n continue;\n\n var
record = callback(options);\n if (record)\n registration.enq
ueue(record);\n }\n }\n }\n }\n\n var uidCounter = 0;\n\n /**\
n * The class that maps to the DOM MutationObserver interface.\n * @param {F
unction} callback.\n * @constructor\n */\n function JsMutationObserver(call
back) {\n this.callback_ = callback;\n this.nodes_ = [];\n this.records
_ = [];\n this.uid_ = ++uidCounter;\n }\n\n JsMutationObserver.prototype =
{\n observe: function(target, options) {\n target = wrapIfNeeded(target)
;\n\n // 1.1\n if (!options.childList && !options.attributes && !optio
ns.characterData ||\n\n // 1.2\n options.attributeOldValue &&
!options.attributes ||\n\n // 1.3\n options.attributeFilter &&
options.attributeFilter.length &&\n !options.attributes ||\n\n
// 1.4\n options.characterDataOldValue && !options.characterData)
{\n\n throw new SyntaxError();\n }\n\n var registrations = reg
istrationsTable.get(target);\n if (!registrations)\n registrationsTa
ble.set(target, registrations = []);\n\n // 2\n // If target's list of
registered observers already includes a registered\n // observer associate
d with the context object, replace that registered\n // observer's options
with options.\n var registration;\n for (var i = 0; i < registrations.
length; i++) {\n if (registrations[i].observer === this) {\n reg
istration = registrations[i];\n registration.removeListeners();\n
registration.options = options;\n break;\n }\n }\n\n
// 3.\n // Otherwise, add a new registered observer to target's list of
registered\n // observers with the context object as the observer and optio
ns as the\n // options, and add target to context object's list of nodes on
which it\n // is registered.\n if (!registration) {\n registra
tion = new Registration(this, target, options);\n registrations.push(regi
stration);\n this.nodes_.push(target);\n }\n\n registration.add
Listeners();\n },\n\n disconnect: function() {\n this.nodes_.forEach(
function(node) {\n var registrations = registrationsTable.get(node);\n
for (var i = 0; i < registrations.length; i++) {\n var registratio
n = registrations[i];\n if (registration.observer === this) {\n
registration.removeListeners();\n registrations.splice(i, 1);\n
// Each node can only have one registered observer associated with\n
// this observer.\n break;\n }\n }\n }
, this);\n this.records_ = [];\n },\n\n takeRecords: function() {\n
var copyOfRecords = this.records_;\n this.records_ = [];\n return
copyOfRecords;\n }\n };\n\n /**\n * @param {string} type\n * @param {No
de} target\n * @constructor\n */\n function MutationRecord(type, target) {\
n this.type = type;\n this.target = target;\n this.addedNodes = [];\n
this.removedNodes = [];\n this.previousSibling = null;\n this.nextSiblin
g = null;\n this.attributeName = null;\n this.attributeNamespace = null;\n
this.oldValue = null;\n }\n\n function copyMutationRecord(original) {\n
var record = new MutationRecord(original.type, original.target);\n record.ad
dedNodes = original.addedNodes.slice();\n record.removedNodes = original.remo
vedNodes.slice();\n record.previousSibling = original.previousSibling;\n r
ecord.nextSibling = original.nextSibling;\n record.attributeName = original.a
ttributeName;\n record.attributeNamespace = original.attributeNamespace;\n
record.oldValue = original.oldValue;\n return record;\n };\n\n // We keep
track of the two (possibly one) records used in a single mutation.\n var curren
tRecord, recordWithOldValue;\n\n /**\n * Creates a record without |oldValue|
and caches it as |currentRecord| for\n * later use.\n * @param {string} oldV
alue\n * @return {MutationRecord}\n */\n function getRecord(type, target) {
\n return currentRecord = new MutationRecord(type, target);\n }\n\n /**\n
* Gets or creates a record with |oldValue| based in the |currentRecord|\n * @
param {string} oldValue\n * @return {MutationRecord}\n */\n function getRec
ordWithOldValue(oldValue) {\n if (recordWithOldValue)\n return recordWit
hOldValue;\n recordWithOldValue = copyMutationRecord(currentRecord);\n rec
ordWithOldValue.oldValue = oldValue;\n return recordWithOldValue;\n }\n\n f
unction clearRecords() {\n currentRecord = recordWithOldValue = undefined;\n
}\n\n /**\n * @param {MutationRecord} record\n * @return {boolean} Whether
the record represents a record from the current\n * mutation event.\n */\n
function recordRepresentsCurrentMutation(record) {\n return record === recor
dWithOldValue || record === currentRecord;\n }\n\n /**\n * Selects which rec
ord, if any, to replace the last record in the queue.\n * This returns |null|
if no record should be replaced.\n *\n * @param {MutationRecord} lastRecord\
n * @param {MutationRecord} newRecord\n * @param {MutationRecord}\n */\n
function selectRecord(lastRecord, newRecord) {\n if (lastRecord === newRecord
)\n return lastRecord;\n\n // Check if the the record we are adding repr
esents the same record. If\n // so, we keep the one with the oldValue in it.\
n if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))\n
return recordWithOldValue;\n\n return null;\n }\n\n /**\n * Class used
to represent a registered observer.\n * @param {MutationObserver} observer\n
* @param {Node} target\n * @param {MutationObserverInit} options\n * @cons
tructor\n */\n function Registration(observer, target, options) {\n this.o
bserver = observer;\n this.target = target;\n this.options = options;\n
this.transientObservedNodes = [];\n }\n\n Registration.prototype = {\n enq
ueue: function(record) {\n var records = this.observer.records_;\n var
length = records.length;\n\n // There are cases where we replace the last
record with the new record.\n // For example if the record represents the s
ame mutation we need to use\n // the one with the oldValue. If we get same
record (this can happen as we\n // walk up the tree) we ignore the new reco
rd.\n if (records.length > 0) {\n var lastRecord = records[length -
1];\n var recordToReplaceLast = selectRecord(lastRecord, record);\n
if (recordToReplaceLast) {\n records[length - 1] = recordToReplaceLas
t;\n return;\n }\n } else {\n scheduleCallback(this.
observer);\n }\n\n records[length] = record;\n },\n\n addListene
rs: function() {\n this.addListeners_(this.target);\n },\n\n addListe
ners_: function(node) {\n var options = this.options;\n if (options.at
tributes)\n node.addEventListener('DOMAttrModified', this, true);\n\n
if (options.characterData)\n node.addEventListener('DOMCharacterDataMod
ified', this, true);\n\n if (options.childList)\n node.addEventListe
ner('DOMNodeInserted', this, true);\n\n if (options.childList || options.su
btree)\n node.addEventListener('DOMNodeRemoved', this, true);\n },\n\n
removeListeners: function() {\n this.removeListeners_(this.target);\n
},\n\n removeListeners_: function(node) {\n var options = this.options
;\n if (options.attributes)\n node.removeEventListener('DOMAttrModif
ied', this, true);\n\n if (options.characterData)\n node.removeEvent
Listener('DOMCharacterDataModified', this, true);\n\n if (options.childList
)\n node.removeEventListener('DOMNodeInserted', this, true);\n\n if
(options.childList || options.subtree)\n node.removeEventListener('DOMNod
eRemoved', this, true);\n },\n\n /**\n * Adds a transient observer on
node. The transient observer gets removed\n * next time we deliver the chang
e records.\n * @param {Node} node\n */\n addTransientObserver: functi
on(node) {\n // Don't add transient observers on the target itself. We alre
ady have all\n // the required listeners set up on the target.\n if (n
ode === this.target)\n return;\n\n this.addListeners_(node);\n
this.transientObservedNodes.push(node);\n var registrations = registrations
Table.get(node);\n if (!registrations)\n registrationsTable.set(node
, registrations = []);\n\n // We know that registrations does not contain t
his because we already\n // checked if node === this.target.\n registr
ations.push(this);\n },\n\n removeTransientObservers: function() {\n
var transientObservedNodes = this.transientObservedNodes;\n this.transientO
bservedNodes = [];\n\n transientObservedNodes.forEach(function(node) {\n
// Transient observers are never added to the target.\n this.removeL
isteners_(node);\n\n var registrations = registrationsTable.get(node);\n
for (var i = 0; i < registrations.length; i++) {\n if (registrat
ions[i] === this) {\n registrations.splice(i, 1);\n // Eac
h node can only have one registered observer associated with\n // thi
s observer.\n break;\n }\n }\n }, this);\n },
\n\n handleEvent: function(e) {\n // Stop propagation since we are manag
ing the propagation manually.\n // This means that other mutation events on
the page will not work\n // correctly but that is by design.\n e.stop
ImmediatePropagation();\n\n switch (e.type) {\n case 'DOMAttrModifie
d':\n // http://dom.spec.whatwg.org/#concept-mo-queue-attributes\n\n
var name = e.attrName;\n var namespace = e.relatedNode.namespace
URI;\n var target = e.target;\n\n // 1.\n var record
= new getRecord('attributes', target);\n record.attributeName = name;\n
record.attributeNamespace = namespace;\n\n // 2.\n v
ar oldValue =\n e.attrChange === MutationEvent.ADDITION ? null : e.
prevValue;\n\n forEachAncestorAndObserverEnqueueRecord(target, function
(options) {\n // 3.1, 4.2\n if (!options.attributes)\n
return;\n\n // 3.2, 4.3\n if (options.attributeF
ilter && options.attributeFilter.length &&\n options.attributeFil
ter.indexOf(name) === -1 &&\n options.attributeFilter.indexOf(nam
espace) === -1) {\n return;\n }\n // 3.3, 4.4
\n if (options.attributeOldValue)\n return getRecordWith
OldValue(oldValue);\n\n // 3.4, 4.5\n return record;\n
});\n\n break;\n\n case 'DOMCharacterDataModified':\n
// http://dom.spec.whatwg.org/#concept-mo-queue-characterdata\n va
r target = e.target;\n\n // 1.\n var record = getRecord('chara
cterData', target);\n\n // 2.\n var oldValue = e.prevValue;\n\
n\n forEachAncestorAndObserverEnqueueRecord(target, function(options) {
\n // 3.1, 4.2\n if (!options.characterData)\n
return;\n\n // 3.2, 4.3\n if (options.characterDataOldVa
lue)\n return getRecordWithOldValue(oldValue);\n\n // 3.
3, 4.4\n return record;\n });\n\n break;\n\n
case 'DOMNodeRemoved':\n this.addTransientObserver(e.target);\n
// Fall through.\n case 'DOMNodeInserted':\n // http://dom.sp
ec.whatwg.org/#concept-mo-queue-childlist\n var target = e.relatedNode;
\n var changedNode = e.target;\n var addedNodes, removedNodes;
\n if (e.type === 'DOMNodeInserted') {\n addedNodes = [chang
edNode];\n removedNodes = [];\n } else {\n\n adde
dNodes = [];\n removedNodes = [changedNode];\n }\n
var previousSibling = changedNode.previousSibling;\n var nextSibling =
changedNode.nextSibling;\n\n // 1.\n var record = getRecord('c
hildList', target);\n record.addedNodes = addedNodes;\n record
.removedNodes = removedNodes;\n record.previousSibling = previousSiblin
g;\n record.nextSibling = nextSibling;\n\n forEachAncestorAndO
bserverEnqueueRecord(target, function(options) {\n // 2.1, 3.2\n
if (!options.childList)\n return;\n\n // 2.2, 3.3
\n return record;\n });\n\n }\n\n clearRecords();\
n }\n };\n\n global.JsMutationObserver = JsMutationObserver;\n\n if (!glob
al.MutationObserver)\n global.MutationObserver = JsMutationObserver;\n\n\n})(
this);\n", |
| 153 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};", |
| 154 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\n // imports\n var path = scope.pa
th;\n var xhr = scope.xhr;\n var flags = scope.flags;\n\n // TODO(sorvell): t
his loader supports a dynamic list of urls\n // and an oncomplete callback that
is called when the loader is done.\n // The polyfill currently does *not* need
this dynamism or the onComplete\n // concept. Because of this, the loader coul
d be simplified quite a bit.\n var Loader = function(onLoad, onComplete) {\n
this.cache = {};\n this.onload = onLoad;\n this.oncomplete = onComplete;\
n this.inflight = 0;\n this.pending = {};\n };\n\n Loader.prototype = {\
n addNodes: function(nodes) {\n // number of transactions to complete\n
this.inflight += nodes.length;\n // commence transactions\n for (
var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++) {\n this.require(
n);\n }\n // anything to do?\n this.checkDone();\n },\n add
Node: function(node) {\n // number of transactions to complete\n this.
inflight++;\n // commence transactions\n this.require(node);\n //
anything to do?\n this.checkDone();\n },\n require: function(elt) {\
n var url = elt.src || elt.href;\n // ensure we have a standard url th
at can be used\n // reliably for deduping.\n // TODO(sjmiles): ad-hoc\
n elt.__nodeUrl = url;\n // deduplication\n if (!this.dedupe(url,
elt)) {\n // fetch this resource\n this.fetch(url, elt);\n }
\n },\n dedupe: function(url, elt) {\n if (this.pending[url]) {\n
// add to list of nodes waiting for inUrl\n this.pending[url].push(el
t);\n // don't need fetch\n return true;\n }\n var resou
rce;\n if (this.cache[url]) {\n this.onload(url, elt, this.cache[url
]);\n // finished this transaction\n this.tail();\n // don'
t need fetch\n return true;\n }\n // first node waiting for inU
rl\n this.pending[url] = [elt];\n // need fetch (not a dupe)\n re
turn false;\n },\n fetch: function(url, elt) {\n flags.load && consol
e.log('fetch', url, elt);\n var receiveXhr = function(err, resource) {\n
this.receive(url, elt, err, resource);\n }.bind(this);\n xhr.load
(url, receiveXhr);\n // TODO(sorvell): blocked on\n // https://code.go
ogle.com/p/chromium/issues/detail?id=257221\n // xhr'ing for a document mak
es scripts in imports runnable; otherwise\n // they are not; however, it re
quires that we have doctype=html in\n // the import which is unacceptable.
This is only needed on Chrome\n // to avoid the bug above.\n /*\n
if (isDocumentLink(elt)) {\n xhr.loadDocument(url, receiveXhr);\n }
else {\n xhr.load(url, receiveXhr);\n }\n */\n },\n rece
ive: function(url, elt, err, resource) {\n this.cache[url] = resource;\n
var $p = this.pending[url];\n for (var i=0, l=$p.length, p; (i<l) && (p=
$p[i]); i++) {\n //if (!err) {\n this.onload(url, p, resource);\
n //}\n this.tail();\n }\n this.pending[url] = null;\n
},\n tail: function() {\n --this.inflight;\n this.checkDone();\n
},\n checkDone: function() {\n if (!this.inflight) {\n this.on
complete();\n }\n }\n };\n\n xhr = xhr || {\n async: true,\n ok:
function(request) {\n return (request.status >= 200 && request.status < 30
0)\n || (request.status === 304)\n || (request.status === 0);\
n },\n load: function(url, next, nextContext) {\n var request = new X
MLHttpRequest();\n if (scope.flags.debug || scope.flags.bust) {\n ur
l += '?' + Math.random();\n }\n request.open('GET', url, xhr.async);\n
request.addEventListener('readystatechange', function(e) {\n if (re
quest.readyState === 4) {\n next.call(nextContext, !xhr.ok(request) &&
request,\n request.response || request.responseText, url);\n
}\n });\n request.send();\n return request;\n },\n loadDoc
ument: function(url, next, nextContext) {\n this.load(url, next, nextContex
t).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr = xhr;\n
scope.Loader = Loader;\n\n})(window.HTMLImports);\n", |
| 155 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\nvar IMPORT_LINK_TYPE = 'import';\nv
ar flags = scope.flags;\nvar isIe = /Trident/.test(navigator.userAgent);\n// TOD
O(sorvell): SD polyfill intrusion\nvar mainDoc = window.ShadowDOMPolyfill ? \n
window.ShadowDOMPolyfill.wrapIfNeeded(document) : document;\n\n// importParser
\n// highlander object to manage parsing of imports\n// parses import related el
ements\n// and ensures proper parse order\n// parse order is enforced by crawlin
g the tree and monitoring which elements\n// have been parsed; async parsing is
also supported.\n\n// highlander object for parsing a document tree\nvar importP
arser = {\n // parse selectors for main document elements\n documentSelectors:
'link[rel=' + IMPORT_LINK_TYPE + ']',\n // parse selectors for import document
elements\n importsSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']',\n
'link[rel=stylesheet]',\n 'style',\n 'script:not([type])',\n 'script[t
ype=\"text/javascript\"]'\n ].join(','),\n map: {\n link: 'parseLink',\n
script: 'parseScript',\n style: 'parseStyle'\n },\n // try to parse the ne
xt import in the tree\n parseNext: function() {\n var next = this.nextToPars
e();\n if (next) {\n this.parse(next);\n }\n },\n parse: function(e
lt) {\n if (this.isParsed(elt)) {\n flags.parse && console.log('[%s] is
already parsed', elt.localName);\n return;\n }\n var fn = this[this.m
ap[elt.localName]];\n if (fn) {\n this.markParsing(elt);\n fn.call(
this, elt);\n }\n },\n // only 1 element may be parsed at a time; parsing i
s async so, each\n // parsing implementation must inform the system that parsin
g is complete\n // via markParsingComplete.\n markParsing: function(elt) {\n
flags.parse && console.log('parsing', elt);\n this.parsingElement = elt;\n
},\n markParsingComplete: function(elt) {\n elt.__importParsed = true;\n
if (elt.__importElement) {\n elt.__importElement.__importParsed = true;\n
}\n this.parsingElement = null;\n flags.parse && console.log('completed
', elt);\n this.parseNext();\n },\n parseImport: function(elt) {\n elt.i
mport.__importParsed = true;\n // TODO(sorvell): consider if there's a better
way to do this;\n // expose an imports parsing hook; this is needed, for exa
mple, by the\n // CustomElements polyfill.\n if (HTMLImports.__importsPars
ingHook) {\n HTMLImports.__importsParsingHook(elt);\n }\n // fire loa
d event\n if (elt.__resource) {\n elt.dispatchEvent(new CustomEvent('loa
d', {bubbles: false})); \n } else {\n elt.dispatchEvent(new CustomEve
nt('error', {bubbles: false}));\n }\n // TODO(sorvell): workaround for Saf
ari addEventListener not working\n // for elements not in the main document.\
n if (elt.__pending) {\n var fn;\n while (elt.__pending.length) {\n
fn = elt.__pending.shift();\n if (fn) {\n fn({target: el
t});\n }\n }\n }\n this.markParsingComplete(elt);\n },\n par
seLink: function(linkElt) {\n if (nodeIsImport(linkElt)) {\n this.parseI
mport(linkElt);\n } else {\n // make href absolute\n linkElt.href =
linkElt.href;\n this.parseGeneric(linkElt);\n }\n },\n parseStyle: fu
nction(elt) {\n // TODO(sorvell): style element load event can just not fire
so clone styles\n var src = elt;\n elt = cloneStyle(elt);\n elt.__impor
tElement = src;\n this.parseGeneric(elt);\n },\n parseGeneric: function(elt
) {\n this.trackElement(elt);\n document.head.appendChild(elt);\n },\n /
/ tracks when a loadable element has loaded\n trackElement: function(elt) {\n
var self = this;\n var done = function() {\n self.markParsingComplete(
elt);\n };\n elt.addEventListener('load', done);\n elt.addEventListener
('error', done);\n\n // NOTE: IE does not fire \"load\" event for styles that
have already loaded\n // This is in violation of the spec, so we try our har
dest to work around it\n if (isIe && elt.localName === 'style') {\n var
fakeLoad = false;\n // If there's not @import in the textContent, assume it
has loaded\n if (elt.textContent.indexOf('@import') == -1) {\n fake
Load = true;\n // if we have a sheet, we have been parsed\n } else if
(elt.sheet) {\n fakeLoad = true;\n var csr = elt.sheet.cssRules;\n
var len = csr ? csr.length : 0;\n // search the rules for @import
's\n for (var i = 0, r; (i < len) && (r = csr[i]); i++) {\n if (
r.type === CSSRule.IMPORT_RULE) {\n // if every @import has resolved,
fake the load\n fakeLoad = fakeLoad && Boolean(r.styleSheet);\n
}\n }\n }\n // dispatch a fake load event and continue par
sing\n if (fakeLoad) {\n elt.dispatchEvent(new CustomEvent('load', {
bubbles: false}));\n }\n }\n },\n parseScript: function(scriptElt) {\n
// acquire code to execute\n var code = (scriptElt.__resource || scriptEl
t.textContent).trim();\n if (code) {\n // calculate source map hint\n
var moniker = scriptElt.__nodeUrl;\n if (!moniker) {\n moniker =
scriptElt.ownerDocument.baseURI;\n // there could be more than one script
this url\n var tag = '[' + Math.floor((Math.random()+1)*1000) + ']';\n
// TODO(sjmiles): Polymer hack, should be pluggable if we need to allow \n
// this sort of thing\n var matches = code.match(/Polymer\\(['\"]
([^'\"]*)/);\n tag = matches && matches[1] || tag;\n // tag the mo
niker\n moniker += '/' + tag + '.js';\n }\n // source map hint\
n code += \"\\n//# sourceURL=\" + moniker + \"\\n\";\n // evaluate the
code\n scope.currentScript = scriptElt;\n eval.call(window, code);\n
scope.currentScript = null;\n }\n this.markParsingComplete(scriptElt)
;\n },\n // determine the next element in the tree which should be parsed\n n
extToParse: function() {\n return !this.parsingElement && this.nextToParseInD
oc(mainDoc);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = d
oc.querySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes
.length, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n
if (this.hasResource(n)) {\n return nodeIsImport(n) ? this.next
ToParseInDoc(n.import, n) : n;\n } else {\n return;\n }\n
}\n }\n // all nodes have been parsed, ready to parse import, if any
\n return link;\n },\n // return the set of parse selectors relevant for th
is node.\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDoc
ument || node;\n return doc === mainDoc ? this.documentSelectors : this.impor
tsSelectors;\n },\n isParsed: function(node) {\n return node.__importParsed
;\n },\n hasResource: function(node) {\n if (nodeIsImport(node) && !node.im
port) {\n return false;\n }\n if (node.localName === 'script' && node
.src && !node.__resource) {\n return false;\n }\n return true;\n }\n
};\n\nfunction nodeIsImport(elt) {\n return (elt.localName === 'link') && (elt.
rel === IMPORT_LINK_TYPE);\n}\n\n// style/stylesheet handling\n\n// clone style
with proper path resolution for main document\n// NOTE: styles are the only elem
ents that require direct path fixup.\nfunction cloneStyle(style) {\n var clone
= style.ownerDocument.createElement('style');\n clone.textContent = style.textC
ontent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fixup:
style elements in imports must be made relative to the main \n// document. We f
ixup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\
nvar CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nvar path = {
\n resolveUrlsInStyle: function(style) {\n var doc = style.ownerDocument;\n
var resolver = doc.createElement('a');\n style.textContent = this.resolveU
rlsInCssText(style.textContent, resolver);\n return style; \n },\n resolve
UrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(cssText
, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_REGEX
P);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n r
eturn text.replace(regexp, function(m, pre, url, post) {\n var urlPath = ur
l.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlObj.h
ref;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n}\n\
n// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE = isIe
;\n\n})(HTMLImports);\n", |
| 156 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\nvar hasNative = ('import' in docume
nt.createElement('link'));\nvar useNative = hasNative;\nvar flags = scope.flags;
\nvar IMPORT_LINK_TYPE = 'import';\n\n// TODO(sorvell): SD polyfill intrusion\nv
ar mainDoc = window.ShadowDOMPolyfill ? \n ShadowDOMPolyfill.wrapIfNeeded(doc
ument) : document;\n\nif (!useNative) {\n\n // imports\n var xhr = scope.xhr;\
n var Loader = scope.Loader;\n var parser = scope.parser;\n\n // importer\n
// highlander object to manage loading of imports\n\n // for any document, impo
rter:\n // - loads any linked import documents (with deduping)\n // for any im
port document, importer also:\n // - loads text of external script tags\n\n va
r importer = {\n documents: {},\n // nodes to load in the mian document\n
documentPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // nodes
to load in imports\n importsPreloadSelectors: [\n 'link[rel=' + IMPOR
T_LINK_TYPE + ']',\n 'script[src]:not([type])',\n 'script[src][typ
e=\"text/javascript\"]'\n ].join(','),\n loadNode: function(node) {\n
importLoader.addNode(node);\n },\n // load all loadable elements within t
he parent element\n loadSubtree: function(parent) {\n var nodes = this.m
arshalNodes(parent);\n // add these nodes to loader's queue\n importLo
ader.addNodes(nodes);\n },\n marshalNodes: function(parent) {\n // al
l preloadable nodes in inDocument\n return parent.querySelectorAll(this.loa
dSelectorsForNode(parent));\n },\n // find the proper set of load selector
s for a given node\n loadSelectorsForNode: function(node) {\n var doc =
node.ownerDocument || node;\n return doc === mainDoc ? this.documentPreload
Selectors :\n this.importsPreloadSelectors;\n },\n loaded: functi
on(url, elt, resource) {\n flags.load && console.log('loaded', url, elt);\n
// store generic resource\n // TODO(sorvell): fails for nodes inside
<template>.content\n // see https://code.google.com/p/chromium/issues/detai
l?id=249381.\n elt.__resource = resource;\n if (isDocumentLink(elt)) {
\n var doc = this.documents[url];\n // if we've never seen a docum
ent at this url\n if (!doc) {\n // generate an HTMLDocument from
data\n doc = makeDocument(resource, url);\n doc.__importLink
= elt;\n // TODO(sorvell): we cannot use MO to detect parsed nodes beca
use\n // SD polyfill does not report these as mutations.\n thi
s.bootDocument(doc);\n // cache document\n this.documents[url]
= doc;\n }\n // don't store import record until we're actually lo
aded\n // store document resource\n elt.import = doc;\n }\n
parser.parseNext();\n },\n bootDocument: function(doc) {\n this.l
oadSubtree(doc);\n this.observe(doc);\n parser.parseNext();\n },\n
loadedAll: function() {\n parser.parseNext();\n }\n };\n\n // loade
r singleton\n var importLoader = new Loader(importer.loaded.bind(importer), \n
importer.loadedAll.bind(importer));\n\n function isDocumentLink(elt) {\n
return isLinkRel(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel
) {\n return elt.localName === 'link' && elt.getAttribute('rel') === rel;\n
}\n\n function isScript(elt) {\n return elt.localName === 'script';\n }\n\n
function makeDocument(resource, url) {\n // create a new HTML document\n
var doc = resource;\n if (!(doc instanceof Document)) {\n doc = documen
t.implementation.createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the
new document's source url\n doc._URL = url;\n // establish a relative path
via <base>\n var base = doc.createElement('base');\n base.setAttribute('h
ref', url);\n // add baseURI support to browsers (IE) that lack it.\n if (
!doc.baseURI) {\n doc.baseURI = url;\n }\n doc.head.appendChild(base)
;\n // install HTML last as it may trigger CustomElement upgrades\n // TOD
O(sjmiles): problem wrt to template boostrapping below,\n // template bootstr
apping must (?) come before element upgrade\n // but we cannot bootstrap temp
lates until they are in a document\n // which is too late\n if (!(resource
instanceof Document)) {\n // install html\n doc.body.innerHTML = reso
urce;\n }\n // TODO(sorvell): ideally this code is not aware of Template p
olyfill,\n // but for now the polyfill needs help to bootstrap these template
s\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n
HTMLTemplateElement.bootstrap(doc);\n }\n return doc;\n }\n} else {\n /
/ do nothing if using native imports\n var importer = {};\n}\n\n// NOTE: We can
not polyfill document.currentScript because it's not possible\n// both to overri
de and maintain the ability to capture the native value;\n// therefore we choose
to expose _currentScript both when native imports\n// and the polyfill are in u
se.\nvar currentScriptDescriptor = {\n get: function() {\n return HTMLImport
s.currentScript || document.currentScript;\n },\n configurable: true\n};\n\nOb
ject.defineProperty(document, '_currentScript', currentScriptDescriptor);\nObjec
t.defineProperty(mainDoc, '_currentScript', currentScriptDescriptor);\n\n// Poly
fill document.baseURI for browsers without it.\nif (!document.baseURI) {\n var
baseURIDescriptor = {\n get: function() {\n return window.location.href;
\n },\n configurable: true\n };\n\n Object.defineProperty(document, 'bas
eURI', baseURIDescriptor);\n Object.defineProperty(mainDoc, 'baseURI', baseURID
escriptor);\n}\n\n// call a callback when all HTMLImports in the document at cal
l (or at least\n// document ready) time have loaded.\n// 1. ensure the document
is in a ready state (has dom), then \n// 2. watch for loading of imports and ca
ll callback when done\nfunction whenImportsReady(callback, doc) {\n doc = doc |
| mainDoc;\n // if document is loading, wait and try again\n whenDocumentReady
(function() {\n watchImportsLoad(callback, doc);\n }, doc);\n}\n\n// call th
e callback when the document is in a ready state (has dom)\nvar requiredReadySta
te = HTMLImports.isIE ? 'complete' : 'interactive';\nvar READY_EVENT = 'readysta
techange';\nfunction isDocumentReady(doc) {\n return (doc.readyState === 'compl
ete' ||\n doc.readyState === requiredReadyState);\n}\n\n// call <callback>
when we ensure the document is in a ready state\nfunction whenDocumentReady(call
back, doc) {\n if (!isDocumentReady(doc)) {\n var checkReady = function() {\
n if (doc.readyState === 'complete' || \n doc.readyState === requi
redReadyState) {\n doc.removeEventListener(READY_EVENT, checkReady);\n
whenDocumentReady(callback, doc);\n }\n }\n doc.addEventListener
(READY_EVENT, checkReady);\n } else if (callback) {\n callback();\n }\n}\n\
n// call <callback> when we ensure all imports have loaded\nfunction watchImport
sLoad(callback, doc) {\n var imports = doc.querySelectorAll('link[rel=import]')
;\n var loaded = 0, l = imports.length;\n function checkDone(d) { \n if (lo
aded == l) {\n // go async to ensure parser isn't stuck on a script tag\n
requestAnimationFrame(callback);\n }\n }\n function loadedImport(e) {\n
loaded++;\n checkDone();\n }\n if (l) {\n for (var i=0, imp; (i<l) &
& (imp=imports[i]); i++) {\n if (isImportLoaded(imp)) {\n loadedImpo
rt.call(imp);\n } else {\n imp.addEventListener('load', loadedImport
);\n imp.addEventListener('error', loadedImport);\n }\n }\n } el
se {\n checkDone();\n }\n}\n\nfunction isImportLoaded(link) {\n return useN
ative ? (link.import && (link.import.readyState !== 'loading')) :\n link.__
importParsed;\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useNative =
useNative;\nscope.importer = importer;\nscope.whenImportsReady = whenImportsRead
y;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = isImportL
oaded;\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\n", |
| 157 " /*\nCopyright 2013 The Polymer Authors. All rights reserved.\nUse of this
source code is governed by a BSD-style\nlicense that can be found in the LICENSE
file.\n*/\n\n(function(scope){\n\nvar IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE
;\nvar importSelector = 'link[rel=' + IMPORT_LINK_TYPE + ']';\nvar importer = sc
ope.importer;\n\n// we track mutations for addedNodes, looking for imports\nfunc
tion handler(mutations) {\n for (var i=0, l=mutations.length, m; (i<l) && (m=mu
tations[i]); i++) {\n if (m.type === 'childList' && m.addedNodes.length) {\n
addedNodes(m.addedNodes);\n }\n }\n}\n\n// find loadable elements and a
dd them to the importer\nfunction addedNodes(nodes) {\n for (var i=0, l=nodes.l
ength, n; (i<l) && (n=nodes[i]); i++) {\n if (shouldLoadNode(n)) {\n imp
orter.loadNode(n);\n }\n if (n.children && n.children.length) {\n add
edNodes(n.children);\n }\n }\n}\n\nfunction shouldLoadNode(node) {\n return
(node.nodeType === 1) && matches.call(node,\n importer.loadSelectorsForNod
e(node));\n}\n\n// x-plat matches\nvar matches = HTMLElement.prototype.matches |
| \n HTMLElement.prototype.matchesSelector || \n HTMLElement.prototype.web
kitMatchesSelector ||\n HTMLElement.prototype.mozMatchesSelector ||\n HTML
Element.prototype.msMatchesSelector;\n\nvar observer = new MutationObserver(hand
ler);\n\n// observe the given root for loadable elements\nfunction observe(root)
{\n observer.observe(root, {childList: true, subtree: true});\n}\n\n// exports
\n// TODO(sorvell): factor so can put on scope\nscope.observe = observe;\nimport
er.observe = observe;\n\n})(HTMLImports);\n", |
| 158 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(){\n\n// bootstrap\n\n// IE shim for CustomEvent\
nif (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = functio
n(inType, dictionary) {\n var e = document.createEvent('HTMLEvents');\n
e.initEvent(inType,\n dictionary.bubbles === false ? false : true,\n
dictionary.cancelable === false ? false : true,\n dictionary.detail);\
n return e;\n };\n}\n\n// TODO(sorvell): SD polyfill intrusion\nvar doc = w
indow.ShadowDOMPolyfill ? \n window.ShadowDOMPolyfill.wrapIfNeeded(document)
: document;\n\n// Fire the 'HTMLImportsLoaded' event when imports in document at
load time \n// have loaded. This event is required to simulate the script block
ing \n// behavior of native imports. A main document script that needs to be sur
e\n// imports have loaded should wait for this event.\nHTMLImports.whenImportsRe
ady(function() {\n HTMLImports.ready = true;\n HTMLImports.readyTime = new Dat
e().getTime();\n doc.dispatchEvent(\n new CustomEvent('HTMLImportsLoaded', {
bubbles: true})\n );\n});\n\n\n// no need to bootstrap the polyfill when native
imports is available.\nif (!HTMLImports.useNative) {\n function bootstrap() {\
n HTMLImports.importer.bootDocument(doc);\n }\n \n // TODO(sorvell): SD
polyfill does *not* generate mutations for nodes added\n // by the parser. For
this reason, we must wait until the dom exists to \n // bootstrap.\n if (docum
ent.readyState === 'complete' ||\n (document.readyState === 'interactive' &
& !window.attachEvent)) {\n bootstrap();\n } else {\n document.addEventLi
stener('DOMContentLoaded', bootstrap);\n }\n}\n\n})();\n", |
| 159 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\nwindow.CustomElements = window.CustomElements || {flags:{}}
;", |
| 160 " /*\r\nCopyright 2013 The Polymer Authors. All rights reserved.\r\nUse of t
his source code is governed by a BSD-style\r\nlicense that can be found in the L
ICENSE file.\r\n*/\r\n\r\n(function(scope){\r\n\r\nvar logFlags = window.logFlag
s || {};\r\nvar IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_
TYPE : 'none';\r\n\r\n// walk the subtree rooted at node, applying 'find(element
, data)' function\r\n// to each element\r\n// if 'find' returns true for 'elemen
t', do not search element's subtree\r\nfunction findAll(node, find, data) {\r\n
var e = node.firstElementChild;\r\n if (!e) {\r\n e = node.firstChild;\r\n
while (e && e.nodeType !== Node.ELEMENT_NODE) {\r\n e = e.nextSibling;\r
\n }\r\n }\r\n while (e) {\r\n if (find(e, data) !== true) {\r\n fi
ndAll(e, find, data);\r\n }\r\n e = e.nextElementSibling;\r\n }\r\n retu
rn null;\r\n}\r\n\r\n// walk all shadowRoots on a given node.\r\nfunction forRoo
ts(node, cb) {\r\n var root = node.shadowRoot;\r\n while(root) {\r\n forSub
tree(root, cb);\r\n root = root.olderShadowRoot;\r\n }\r\n}\r\n\r\n// walk t
he subtree rooted at node, including descent into shadow-roots,\r\n// applying '
cb' to each element\r\nfunction forSubtree(node, cb) {\r\n //logFlags.dom && no
de.childNodes && node.childNodes.length && console.group('subTree: ', node);\r\n
findAll(node, function(e) {\r\n if (cb(e)) {\r\n return true;\r\n }
\r\n forRoots(e, cb);\r\n });\r\n forRoots(node, cb);\r\n //logFlags.dom &
& node.childNodes && node.childNodes.length && console.groupEnd();\r\n}\r\n\r\n/
/ manage lifecycle on added node\r\nfunction added(node) {\r\n if (upgrade(node
)) {\r\n insertedNode(node);\r\n return true;\r\n }\r\n inserted(node);\
r\n}\r\n\r\n// manage lifecycle on added node's subtree only\r\nfunction addedSu
btree(node) {\r\n forSubtree(node, function(e) {\r\n if (added(e)) {\r\n
return true;\r\n }\r\n });\r\n}\r\n\r\n// manage lifecycle on added node a
nd it's subtree\r\nfunction addedNode(node) {\r\n return added(node) || addedSu
btree(node);\r\n}\r\n\r\n// upgrade custom elements at node, if applicable\r\nfu
nction upgrade(node) {\r\n if (!node.__upgraded__ && node.nodeType === Node.ELE
MENT_NODE) {\r\n var type = node.getAttribute('is') || node.localName;\r\n
var definition = scope.registry[type];\r\n if (definition) {\r\n logFla
gs.dom && console.group('upgrade:', node.localName);\r\n scope.upgrade(node
);\r\n logFlags.dom && console.groupEnd();\r\n return true;\r\n }\r
\n }\r\n}\r\n\r\nfunction insertedNode(node) {\r\n inserted(node);\r\n if (in
Document(node)) {\r\n forSubtree(node, function(e) {\r\n inserted(e);\r\
n });\r\n }\r\n}\r\n\r\n\r\n// TODO(sorvell): on platforms without MutationO
bserver, mutations may not be\r\n// reliable and therefore attached/detached are
not reliable.\r\n// To make these callbacks less likely to fail, we defer all i
nserts and removes\r\n// to give a chance for elements to be inserted into dom.\
r\n// This ensures attachedCallback fires for elements that are created and\r\n/
/ immediately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObser
ver ||\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope
.hasPolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = fa
lse;\r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingM
utations.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = t
rue;\r\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r
\n setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction t
akeMutations() {\r\n isPendingMutations = false;\r\n var $p = pendingMutations
;\r\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\r\n p();\r\n
}\r\n pendingMutations = [];\r\n}\r\n\r\nfunction inserted(element) {\r\n if
(hasPolyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(el
ement);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n/
/ TODO(sjmiles): if there are descents into trees that can never have inDocument
(*) true, fix this\r\nfunction _inserted(element) {\r\n // TODO(sjmiles): it's
possible we were inserted and removed in the space\r\n // of one microtask, in
which case we won't be 'inDocument' here\r\n // But there are other cases where
we are testing for inserted without\r\n // specific knowledge of mutations, an
d must test 'inDocument' to determine\r\n // whether to call inserted\r\n // I
f we can factor these cases into separate code paths we can have\r\n // better
diagnostics.\r\n // TODO(sjmiles): when logging, do work on all custom elements
so we can\r\n // track behavior even when callbacks not defined\r\n //console
.log('inserted: ', element.localName);\r\n if (element.attachedCallback || elem
ent.detachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlag
s.dom && console.group('inserted:', element.localName);\r\n if (inDocument(el
ement)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n
// if we are in a 'removed' state, bluntly adjust to an 'inserted' state\r\n
if (element.__inserted < 1) {\r\n element.__inserted = 1;\r\n }\r\
n // if we are 'over inserted', squelch the callback\r\n if (element._
_inserted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.lo
calName,\r\n 'insert/remove count:', element.__inserted)\r\n } els
e if (element.attachedCallback) {\r\n logFlags.dom && console.log('insert
ed:', element.localName);\r\n element.attachedCallback();\r\n }\r\n
}\r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction remo
vedNode(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n r
emoved(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfill
Mutations) {\r\n deferMutation(function() {\r\n _removed(element);\r\n
});\r\n } else {\r\n _removed(element);\r\n }\r\n}\r\n\r\nfunction _remov
ed(element) {\r\n // TODO(sjmiles): temporary: do work on all custom elements s
o we can track\r\n // behavior even when callbacks not defined\r\n if (element
.attachedCallback || element.detachedCallback || (element.__upgraded__ && logFla
gs.dom)) {\r\n logFlags.dom && console.group('removed:', element.localName);\
r\n if (!inDocument(element)) {\r\n element.__inserted = (element.__inse
rted || 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to a
n 'removed' state\r\n if (element.__inserted > 0) {\r\n element.__in
serted = 0;\r\n }\r\n // if we are 'over removed', squelch the callbac
k\r\n if (element.__inserted < 0) {\r\n logFlags.dom && console.warn
('removed:', element.localName,\r\n 'insert/remove count:', element._
_inserted)\r\n } else if (element.detachedCallback) {\r\n element.de
tachedCallback();\r\n }\r\n }\r\n logFlags.dom && console.groupEnd();
\r\n }\r\n}\r\n\r\n// SD polyfill intrustion due mainly to the fact that 'docum
ent'\r\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return
window.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;
\r\n}\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc =
wrapIfNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return
true;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction w
atchShadow(node) {\r\n if (node.shadowRoot && !node.shadowRoot.__watched) {\r\n
logFlags.dom && console.log('watching shadow-root for: ', node.localName);\r
\n // watch all unwatched roots...\r\n var root = node.shadowRoot;\r\n
while (root) {\r\n watchRoot(root);\r\n root = root.olderShadowRoot;\r
\n }\r\n }\r\n}\r\n\r\nfunction watchRoot(root) {\r\n if (!root.__watched)
{\r\n observe(root);\r\n root.__watched = true;\r\n }\r\n}\r\n\r\nfunctio
n handler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutation
s[0];\r\n if (mx && mx.type === 'childList' && mx.addedNodes) {\r\n if
(mx.addedNodes) {\r\n var d = mx.addedNodes[0];\r\n while (d
&& d !== document && !d.host) {\r\n d = d.parentNode;\r\n }\
r\n var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '
';\r\n u = u.split('/?').shift().split('/').pop();\r\n }\r\n
}\r\n console.group('mutations (%d) [%s]', mutations.length, u || '');\r\n }
\r\n //\r\n mutations.forEach(function(mx) {\r\n //logFlags.dom && console.
group('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.add
edNodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\
n if (!n.localName) {\r\n return;\r\n }\r\n // nod
es added may need lifecycle management\r\n addedNode(n);\r\n });\r\n
// removed nodes may need lifecycle management\r\n forEach(mx.removed
Nodes, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n removedN
ode(n);\r\n });\r\n }\r\n //logFlags.dom && console.groupEnd();\r\n
});\r\n logFlags.dom && console.groupEnd();\r\n};\r\n\r\nvar observer = new Mut
ationObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): a
sk Raf why we have to call handler ourselves\r\n handler(observer.takeRecords()
);\r\n takeMutations();\r\n}\r\n\r\nvar forEach = Array.prototype.forEach.call.
bind(Array.prototype.forEach);\r\n\r\nfunction observe(inRoot) {\r\n observer.o
bserve(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDo
cument(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n
logFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').po
p());\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\n
function upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n upgradeDo
cument(doc);\r\n //console.log('upgradeDocumentTree: ', (doc.baseURI).split('/'
).pop());\r\n // upgrade contained imported documents\r\n var imports = doc.qu
erySelectorAll('link[rel=' + IMPORT_LINK_TYPE + ']');\r\n for (var i=0, l=impor
ts.length, n; (i<l) && (n=imports[i]); i++) {\r\n if (n.import && n.import.__
parsed) {\r\n upgradeDocumentTree(n.import);\r\n }\r\n }\r\n}\r\n\r\n//
exports\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = wa
tchShadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeA
ll = addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\n\r\nscope.observeDocu
ment = observeDocument;\r\nscope.upgradeDocument = upgradeDocument;\r\n\r\nscope
.takeRecords = takeRecords;\r\n\r\n})(window.CustomElements);\r\n", |
| 161 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * Implements `document.register`\n * @module Custom
Elements\n*/\n\n/**\n * Polyfilled extensions to the `document` object.\n * @cla
ss Document\n*/\n\n(function(scope) {\n\n// imports\n\nif (!scope) {\n scope =
window.CustomElements = {flags:{}};\n}\nvar flags = scope.flags;\n\n// native do
cument.registerElement?\n\nvar hasNative = Boolean(document.registerElement);\n/
/ TODO(sorvell): See https://github.com/Polymer/polymer/issues/399\n// we'll add
ress this by defaulting to CE polyfill in the presence of the SD\n// polyfill. T
his will avoid spamming excess attached/detached callbacks.\n// If there is a co
mpelling need to run CE native with SD polyfill,\n// we'll need to fix this issu
e.\nvar useNative = !flags.register && hasNative && !window.ShadowDOMPolyfill;\n
\nif (useNative) {\n\n // stub\n var nop = function() {};\n\n // exports\n s
cope.registry = {};\n scope.upgradeElement = nop;\n\n scope.watchShadow = nop;
\n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgradeSubtree = no
p;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n scope.upgr
adeDocumentTree = nop;\n scope.takeRecords = nop;\n\n} else {\n\n /**\n * Re
gisters a custom tag name with the document.\n *\n * When a registered eleme
nt is created, a `readyCallback` method is called\n * in the scope of the elem
ent. The `readyCallback` method can be specified on\n * either `options.protot
ype` or `options.lifecycle` with the latter taking\n * precedence.\n *\n *
@method register\n * @param {String} name The tag name to register. Must incl
ude a dash ('-'),\n * for example 'x-component'.\n * @param {Object} opti
ons\n * @param {String} [options.extends]\n * (_off spec_) Tag name
of an element to extend (or blank for a new\n * element). This parameter
is not part of the specification, but instead\n * is a hint for the polyf
ill because the extendee is difficult to infer.\n * Remember that the inp
ut prototype must chain to the extended element's\n * prototype (or HTMLE
lement.prototype) regardless of the value of\n * `extends`.\n * @par
am {Object} options.prototype The prototype to use for the new\n * elemen
t. The prototype must inherit from HTMLElement.\n * @param {Object} [option
s.lifecycle]\n * Callbacks that fire at important phases in the life of t
he custom\n * element.\n *\n * @example\n * FancyButton = docu
ment.registerElement(\"fancy-button\", {\n * extends: 'button',\n *
prototype: Object.create(HTMLButtonElement.prototype, {\n * rea
dyCallback: {\n * value: function() {\n * console.lo
g(\"a fancy-button was created\",\n * }\n * }\n *
})\n * });\n * @return {Function} Constructor for the newly register
ed type.\n */\n function register(name, options) {\n //console.warn('docum
ent.registerElement(\"' + name + '\", ', options, ')');\n // construct a defi
ntion out of options\n // TODO(sjmiles): probably should clone options instea
d of mutating it\n var definition = options || {};\n if (!name) {\n /
/ TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('document.registerElement: first argum
ent `name` must not be empty');\n }\n if (name.indexOf('-') < 0) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('document.registerElement: first argu
ment (\\'name\\') must contain a dash (\\'-\\'). Argument provided was \\'' + St
ring(name) + '\\'.');\n }\n // elements may only be registered once\n i
f (getRegisteredDefinition(name)) {\n throw new Error('DuplicateDefinitionE
rror: a type with name \\'' + String(name) + '\\' is already registered');\n
}\n // must have a prototype, default to an extension of HTMLElement\n //
TODO(sjmiles): probably should throw if no prototype, check spec\n if (!defin
ition.prototype) {\n // TODO(sjmiles): replace with more appropriate error
(EricB can probably\n // offer guidance)\n throw new Error('Options mi
ssing required prototype property');\n }\n // record name\n definition.
__name = name.toLowerCase();\n // ensure a lifecycle object so we don't have
to null test it\n definition.lifecycle = definition.lifecycle || {};\n //
build a list of ancestral custom elements (for native base detection)\n // TO
DO(sjmiles): we used to need to store this, but current code only\n // uses i
t in 'resolveTagName': it should probably be inlined\n definition.ancestry =
ancestry(definition.extends);\n // extensions of native specializations of HT
MLElement require localName\n // to remain native, and use secondary 'is' spe
cifier for extension type\n resolveTagName(definition);\n // some platform
s require modifications to the user-supplied prototype\n // chain\n resolv
ePrototypeChain(definition);\n // overrides to implement attributeChanged cal
lback\n overrideAttributeApi(definition.prototype);\n // 7.1.5: Register t
he DEFINITION with DOCUMENT\n registerDefinition(definition.__name, definitio
n);\n // 7.1.7. Run custom element constructor generation algorithm with PROT
OTYPE\n // 7.1.8. Return the output of the previous step.\n definition.cto
r = generateConstructor(definition);\n definition.ctor.prototype = definition
.prototype;\n // force our .constructor to be our actual constructor\n def
inition.prototype.constructor = definition.ctor;\n // if initial parsing is c
omplete\n if (scope.ready) {\n // upgrade any pre-existing nodes of this
type\n scope.upgradeDocumentTree(document);\n }\n return definition.
ctor;\n }\n\n function ancestry(extnds) {\n var extendee = getRegisteredDef
inition(extnds);\n if (extendee) {\n return ancestry(extendee.extends).c
oncat([extendee]);\n }\n return [];\n }\n\n function resolveTagName(defi
nition) {\n // if we are explicitly extending something, that thing is our\n
// baseTag, unless it represents a custom component\n var baseTag = defini
tion.extends;\n // if our ancestry includes custom components, we only have a
\n // baseTag if one of them does\n for (var i=0, a; (a=definition.ancestr
y[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag is our base
Tag, if it exists, and otherwise just our name\n definition.tag = baseTag ||
definition.__name;\n if (baseTag) {\n // if there is a base tag, use sec
ondary 'is' specifier\n definition.is = definition.__name;\n }\n }\n\n
function resolvePrototypeChain(definition) {\n // if we don't support __prot
o__ we need to locate the native level\n // prototype for precise mixing in\n
if (!Object.__proto__) {\n // default prototype\n var nativeProtot
ype = HTMLElement.prototype;\n // work out prototype when using type-extens
ion\n if (definition.is) {\n var inst = document.createElement(defin
ition.tag);\n nativePrototype = Object.getPrototypeOf(inst);\n }\n
// ensure __proto__ reference is installed at each point on the prototype\n
// chain.\n // NOTE: On platforms without __proto__, a mixin strategy
is used instead\n // of prototype swizzling. In this case, this generated _
_proto__ provides\n // limited support for prototype traversal.\n var
proto = definition.prototype, ancestor;\n while (proto && (proto !== native
Prototype)) {\n var ancestor = Object.getPrototypeOf(proto);\n pro
to.__proto__ = ancestor;\n proto = ancestor;\n }\n }\n // cach
e this in case of mixin\n definition.native = nativePrototype;\n }\n\n // S
ECTION 4\n\n function instantiate(definition) {\n // 4.a.1. Create a new obj
ect that implements PROTOTYPE\n // 4.a.2. Let ELEMENT by this new object\n
//\n // the custom element instantiation algorithm must also ensure that the
\n // output is a valid DOM element with the proper wrapper in place.\n //
\n return upgrade(domCreateElement(definition.tag), definition);\n }\n\n fu
nction upgrade(element, definition) {\n // some definitions specify an 'is' a
ttribute\n if (definition.is) {\n element.setAttribute('is', definition.
is);\n }\n // remove 'unresolved' attr, which is a standin for :unresolved
.\n element.removeAttribute('unresolved');\n // make 'element' implement d
efinition.prototype\n implement(element, definition);\n // flag as upgrade
d\n element.__upgraded__ = true;\n // lifecycle management\n created(el
ement);\n // there should never be a shadow root on element at this point\n
// we require child nodes be upgraded before `created`\n scope.upgradeSubtr
ee(element);\n // OUTPUT\n return element;\n }\n\n function implement(el
ement, definition) {\n // prototype swizzling is best\n if (Object.__proto
__) {\n element.__proto__ = definition.prototype;\n } else {\n // w
here above we can re-acquire inPrototype via\n // getPrototypeOf(Element),
we cannot do so when\n // we use mixin, so we install a magic reference\n
customMixin(element, definition.prototype, definition.native);\n elemen
t.__proto__ = definition.prototype;\n }\n }\n\n function customMixin(inTarg
et, inSrc, inNative) {\n // TODO(sjmiles): 'used' allows us to only copy the
'youngest' version of\n // any property. This set should be precalculated. We
also need to\n // consider this for supporting 'super'.\n var used = {};\
n // start with inSrc\n var p = inSrc;\n // sometimes the default is HT
MLUnknownElement.prototype instead of\n // HTMLElement.prototype, so we add a
test\n // the idea is to avoid mixing in native prototypes, so adding\n /
/ the second test is WLOG\n while (p !== inNative && p !== HTMLUnknownElement
.prototype) {\n var keys = Object.getOwnPropertyNames(p);\n for (var i
=0, k; k=keys[i]; i++) {\n if (!used[k]) {\n Object.defineProper
ty(inTarget, k,\n Object.getOwnPropertyDescriptor(p, k));\n
used[k] = 1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n
}\n\n function created(element) {\n // invoke createdCallback\n if (ele
ment.createdCallback) {\n element.createdCallback();\n }\n }\n\n // at
tribute watching\n\n function overrideAttributeApi(prototype) {\n // overrid
es to implement callbacks\n // TODO(sjmiles): should support access via .attr
ibutes NamedNodeMap\n // TODO(sjmiles): preserves user defined overrides, if
any\n if (prototype.setAttribute._polyfilled) {\n return;\n }\n va
r setAttribute = prototype.setAttribute;\n prototype.setAttribute = function(
name, value) {\n changeAttribute.call(this, name, value, setAttribute);\n
}\n var removeAttribute = prototype.removeAttribute;\n prototype.removeA
ttribute = function(name) {\n changeAttribute.call(this, name, null, remove
Attribute);\n }\n prototype.setAttribute._polyfilled = true;\n }\n\n //
https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#
dfn-attribute-changed-callback\n function changeAttribute(name, value, operatio
n) {\n var oldValue = this.getAttribute(name);\n operation.apply(this, arg
uments);\n var newValue = this.getAttribute(name);\n if (this.attributeCha
ngedCallback\n && (newValue !== oldValue)) {\n this.attributeChanged
Callback(name, oldValue, newValue);\n }\n }\n\n // element registry (maps t
ag names to definitions)\n\n var registry = {};\n\n function getRegisteredDefi
nition(name) {\n if (name) {\n return registry[name.toLowerCase()];\n
}\n }\n\n function registerDefinition(name, definition) {\n if (registry[n
ame]) {\n throw new Error('a type with that name is already registered.');\
n }\n registry[name] = definition;\n }\n\n function generateConstructor(
definition) {\n return function() {\n return instantiate(definition);\n
};\n }\n\n function createElement(tag, typeExtension) {\n // TODO(sjmile
s): ignore 'tag' when using 'typeExtension', we could\n // error check it, or
perhaps there should only ever be one argument\n var definition = getRegiste
redDefinition(typeExtension || tag);\n if (definition) {\n if (tag == de
finition.tag && typeExtension == definition.is) {\n return new definition
.ctor();\n }\n // Handle empty string for type extension.\n if (!
typeExtension && !definition.is) {\n return new definition.ctor();\n
}\n }\n\n if (typeExtension) {\n var element = createElement(tag);\n
element.setAttribute('is', typeExtension);\n return element;\n }\n
var element = domCreateElement(tag);\n // Custom tags should be HTMLEleme
nts even if not upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(ele
ment, HTMLElement);\n }\n return element;\n }\n\n function upgradeElemen
t(element) {\n if (!element.__upgraded__ && (element.nodeType === Node.ELEMEN
T_NODE)) {\n var is = element.getAttribute('is');\n var definition = g
etRegisteredDefinition(is || element.localName);\n if (definition) {\n
if (is && definition.tag == element.localName) {\n return upgrade(el
ement, definition);\n } else if (!is && !definition.extends) {\n
return upgrade(element, definition);\n }\n }\n }\n }\n\n funct
ion cloneNode(deep) {\n // call original clone\n var n = domCloneNode.call
(this, deep);\n // upgrade the element and subtree\n scope.upgradeAll(n);\
n // return the clone\n return n;\n }\n // capture native createElement
before we override it\n\n var domCreateElement = document.createElement.bind(do
cument);\n\n // capture native cloneNode before we override it\n\n var domClon
eNode = Node.prototype.cloneNode;\n\n // exports\n\n document.registerElement
= register;\n document.createElement = createElement; // override\n Node.proto
type.cloneNode = cloneNode; // override\n\n scope.registry = registry;\n\n /**
\n * Upgrade an element to a custom element. Upgrading an element\n * causes
the custom prototype to be applied, an `is` attribute\n * to be attached (as
needed), and invocation of the `readyCallback`.\n * `upgrade` does nothing if
the element is already upgraded, or\n * if it matches no registered custom tag
name.\n *\n * @method ugprade\n * @param {Element} element The element to
upgrade.\n * @return {Element} The upgraded element.\n */\n scope.upgrade
= upgradeElement;\n}\n\n// bc\ndocument.register = document.registerElement;\n\n
scope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomEl
ements);\n", |
| 162 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n\n// import\n\nvar IMPORT_LINK_TYPE =
scope.IMPORT_LINK_TYPE;\n\n// highlander object for parsing a document tree\n\n
var parser = {\n selectors: [\n 'link[rel=' + IMPORT_LINK_TYPE + ']'\n ],\n
map: {\n link: 'parseLink'\n },\n parse: function(inDocument) {\n if (
!inDocument.__parsed) {\n // only parse once\n inDocument.__parsed = t
rue;\n // all parsable elements in inDocument (depth-first pre-order traver
sal)\n var elts = inDocument.querySelectorAll(parser.selectors);\n //
for each parsable node type, call the mapped parsing method\n forEach(elts,
function(e) {\n parser[parser.map[e.localName]](e);\n });\n //
upgrade all upgradeable static elements, anything dynamically\n // created
should be caught by observer\n CustomElements.upgradeDocument(inDocument);
\n // observe document for dom changes\n CustomElements.observeDocumen
t(inDocument);\n }\n },\n parseLink: function(linkElt) {\n // imports\n
if (isDocumentLink(linkElt)) {\n this.parseImport(linkElt);\n }\n },
\n parseImport: function(linkElt) {\n if (linkElt.import) {\n parser.pa
rse(linkElt.import);\n }\n }\n};\n\nfunction isDocumentLink(inElt) {\n retu
rn (inElt.localName === 'link'\n && inElt.getAttribute('rel') === IMPORT_LI
NK_TYPE);\n}\n\nvar forEach = Array.prototype.forEach.call.bind(Array.prototype.
forEach);\n\n// exports\n\nscope.parser = parser;\nscope.IMPORT_LINK_TYPE = IMPO
RT_LINK_TYPE;\n\n})(window.CustomElements);", |
| 163 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(scope){\n\n// bootstrap parsing\nfunction bootstr
ap() {\n // parse document\n CustomElements.parser.parse(document);\n // one
more pass before register is 'live'\n CustomElements.upgradeDocument(document);
\n // choose async\n var async = window.Platform && Platform.endOfMicrotask ?
\n Platform.endOfMicrotask :\n setTimeout;\n async(function() {\n // s
et internal 'ready' flag, now document.registerElement will trigger \n // syn
chronous upgrades\n CustomElements.ready = true;\n // capture blunt profil
ing data\n CustomElements.readyTime = Date.now();\n if (window.HTMLImports
) {\n CustomElements.elapsed = CustomElements.readyTime - HTMLImports.ready
Time;\n }\n // notify the system that we are bootstrapped\n document.di
spatchEvent(\n new CustomEvent('WebComponentsReady', {bubbles: true})\n
);\n\n // install upgrade hook if HTMLImports are available\n if (window.H
TMLImports) {\n HTMLImports.__importsParsingHook = function(elt) {\n
CustomElements.parser.parse(elt.import);\n }\n }\n });\n}\n\n// Custom
Event shim for IE\nif (typeof window.CustomEvent !== 'function') {\n window.Cus
tomEvent = function(inType) {\n var e = document.createEvent('HTMLEvents');\n
e.initEvent(inType, true, true);\n return e;\n };\n}\n\n// When loading
at readyState complete time (or via flag), boot custom elements\n// immediately.
\n// If relevant, HTMLImports must already be loaded.\nif (document.readyState =
== 'complete' || scope.flags.eager) {\n bootstrap();\n// When loading at readyS
tate interactive time, bootstrap only if HTMLImports\n// are not pending. Also a
void IE as the semantics of this state are unreliable.\n} else if (document.read
yState === 'interactive' && !window.attachEvent &&\n (!window.HTMLImports ||
window.HTMLImports.ready)) {\n bootstrap();\n// When loading at other readyStat
es, wait for the appropriate DOM event to \n// bootstrap.\n} else {\n var loadE
vent = window.HTMLImports && !HTMLImports.ready ?\n 'HTMLImportsLoaded' : '
DOMContentLoaded';\n window.addEventListener(loadEvent, bootstrap);\n}\n\n})(wi
ndow.CustomElements);\n", |
| 164 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function() {\n\n// inject style sheet\nvar style = documen
t.createElement('style');\nstyle.textContent = 'element {display: none !importan
t;} /* injected by platform.js */';\nvar head = document.querySelector('head');\
nhead.insertBefore(style, head.firstChild);\n\nif (window.ShadowDOMPolyfill) {\n
\n // ensure wrapped inputs for these functions\n var fns = ['upgradeAll', 'up
gradeSubtree', 'observeDocument',\n 'upgradeDocument'];\n\n // cache origi
nals\n var original = {};\n fns.forEach(function(fn) {\n original[fn] = Cus
tomElements[fn];\n });\n\n // override\n fns.forEach(function(fn) {\n Cust
omElements[fn] = function(inNode) {\n return original[fn](wrap(inNode));\n
};\n });\n\n}\n\n})();\n", |
| 165 "/*\n * Copyright 2014 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(scope) {\n\nvar STYLE_SELECTOR = 'style';\n\nvar
urlResolver = scope.urlResolver;\n\nvar loader = {\n cacheStyles: function(styl
es, callback) {\n var css = [];\n for (var i=0, l=styles.length, s; (i<l)
&& (s=styles[i]); i++) {\n css.push(s.textContent);\n }\n cacheCssTex
t(css.join('\\n'), callback);\n },\n xhrStyles: function(styles, callback) {\n
var loaded=0, l = styles.length;\n // called in the context of the style\
n function loadedStyle(style) {\n //console.log(style.textContent);\n
loaded++;\n if (loaded === l && callback) {\n callback();\n
}\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n xhrLoadStyl
e(s, loadedStyle);\n }\n }\n};\n\n// use the platform to preload styles\nvar
preloadElement = document.createElement('preloader');\npreloadElement.style.dis
play = 'none';\nvar preloadRoot = preloadElement.createShadowRoot();\ndocument.h
ead.appendChild(preloadElement);\n\nfunction cacheCssText(cssText, callback) {\n
var style = createStyleElement(cssText);\n if (callback) {\n style.addEven
tListener('load', callback);\n style.addEventListener('error', callback);\n
}\n preloadRoot.appendChild(style);\n}\n\nfunction createStyleElement(cssText,
scope) {\n scope = scope || document;\n scope = scope.createElement ? scope :
scope.ownerDocument;\n var style = scope.createElement('style');\n style.textC
ontent = cssText;\n return style;\n}\n\n// TODO(sorvell): use a common loader s
hared with HTMLImports polyfill\n// currently, this just loads the first @import
per style element \n// and does not recurse into loaded elements; we'll address
this with a \n// generalized loader that's built out of the one in the HTMLImpo
rts polyfill.\n// polyfill the loading of a style element's @import via xhr\nfun
ction xhrLoadStyle(style, callback) {\n HTMLImports.xhr.load(atImportUrlFromSty
le(style), function (err, resource,\n url) {\n replaceAtImportWithCssTex
t(this, url, resource);\n this.textContent = urlResolver.resolveCssText(this.
textContent, url);\n callback && callback(this);\n }, style);\n}\n\nvar atIm
portRe = /@import\\s[(]?['\"]?([^\\s'\";)]*)/;\n\n// get the first @import rule
from a style\nfunction atImportUrlFromStyle(style) {\n var matches = style.text
Content.match(atImportRe);\n return matches && matches[1];\n}\n\nfunction repla
ceAtImportWithCssText(style, url, cssText) {\n var re = new RegExp('@import[^;]
*' + url + '[^;]*;', 'i');\n style.textContent = style.textContent.replace(re,
cssText);\n}\n\n// exports\nscope.loader = loader;\n\n})(window.Platform);\n", |
| 166 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n scope = scope || {};\n scope.exter
nal = scope.external || {};\n var target = {\n shadow: function(inEl) {\n
if (inEl) {\n return inEl.shadowRoot || inEl.webkitShadowRoot;\n
}\n },\n canTarget: function(shadow) {\n return shadow && Boolean(sha
dow.elementFromPoint);\n },\n targetingShadow: function(inEl) {\n var
s = this.shadow(inEl);\n if (this.canTarget(s)) {\n return s;\n
}\n },\n olderShadow: function(shadow) {\n var os = shadow.olderSha
dowRoot;\n if (!os) {\n var se = shadow.querySelector('shadow');\n
if (se) {\n os = se.olderShadowRoot;\n }\n }\n r
eturn os;\n },\n allShadows: function(element) {\n var shadows = [],
s = this.shadow(element);\n while(s) {\n shadows.push(s);\n s
= this.olderShadow(s);\n }\n return shadows;\n },\n searchRoot:
function(inRoot, x, y) {\n if (inRoot) {\n var t = inRoot.elementFr
omPoint(x, y);\n var st, sr, os;\n // is element a shadow host?\n
sr = this.targetingShadow(t);\n while (sr) {\n // find th
e the element inside the shadow root\n st = sr.elementFromPoint(x, y);\
n if (!st) {\n // check for older shadows\n sr =
this.olderShadow(sr);\n } else {\n // shadowed element may c
ontain a shadow root\n var ssr = this.targetingShadow(st);\n
return this.searchRoot(ssr, x, y) || st;\n }\n }\n //
light dom element is the target\n return t;\n }\n },\n owner:
function(element) {\n var s = element;\n // walk up until you hit the
shadow root or document\n while (s.parentNode) {\n s = s.parentNode;
\n }\n // the owner element is expected to be a Document or ShadowRoot
\n if (s.nodeType != Node.DOCUMENT_NODE && s.nodeType != Node.DOCUMENT_FRAG
MENT_NODE) {\n s = document;\n }\n return s;\n },\n findT
arget: function(inEvent) {\n var x = inEvent.clientX, y = inEvent.clientY;\
n // if the listener is in the shadow root, it is much faster to start ther
e\n var s = this.owner(inEvent.target);\n // if x, y is not in this ro
ot, fall back to document search\n if (!s.elementFromPoint(x, y)) {\n
s = document;\n }\n return this.searchRoot(s, x, y);\n }\n };\n
scope.targetFinding = target;\n scope.findTarget = target.findTarget.bind(targ
et);\n\n window.PointerEventsPolyfill = scope;\n})(window.PointerEventsPolyfill
);\n", |
| 167 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function() {\n function shadowSelector(v) {\n return '
body ^^ ' + selector(v);\n }\n function selector(v) {\n return '[touch-acti
on=\"' + v + '\"]';\n }\n function rule(v) {\n return '{ -ms-touch-action:
' + v + '; touch-action: ' + v + '; touch-action-delay: none; }';\n }\n var at
trib2css = [\n 'none',\n 'auto',\n 'pan-x',\n 'pan-y',\n {\n
rule: 'pan-x pan-y',\n selectors: [\n 'pan-x pan-y',\n 'pan-
y pan-x'\n ]\n }\n ];\n var styles = '';\n attrib2css.forEach(functio
n(r) {\n if (String(r) === r) {\n styles += selector(r) + rule(r) + '\\n
';\n styles += shadowSelector(r) + rule(r) + '\\n';\n } else {\n st
yles += r.selectors.map(selector) + rule(r.rule) + '\\n';\n styles += r.sel
ectors.map(shadowSelector) + rule(r.rule) + '\\n';\n }\n });\n var el = doc
ument.createElement('style');\n el.textContent = styles;\n document.head.appen
dChild(el);\n})();\n", |
| 168 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This is the constructor for new PointerEvents.\n
*\n * New Pointer Events must be given a type, and an optional dictionary of\n *
initialization properties.\n *\n * Due to certain platform requirements, events
returned from the constructor\n * identify as MouseEvents.\n *\n * @constructor
\n * @param {String} inType The type of the event to create.\n * @param {Object}
[inDict] An optional dictionary of initial event properties.\n * @return {Event
} A new PointerEvent of type `inType` and initialized with properties from `inDi
ct`.\n */\n(function(scope) {\n // test for DOM Level 4 Events\n var NEW_MOUSE
_EVENT = false;\n var HAS_BUTTONS = false;\n try {\n var ev = new MouseEven
t('click', {buttons: 1});\n NEW_MOUSE_EVENT = true;\n HAS_BUTTONS = ev.but
tons === 1;\n } catch(e) {\n }\n\n var MOUSE_PROPS = [\n 'bubbles',\n '
cancelable',\n 'view',\n 'detail',\n 'screenX',\n 'screenY',\n 'c
lientX',\n 'clientY',\n 'ctrlKey',\n 'altKey',\n 'shiftKey',\n 'm
etaKey',\n 'button',\n 'relatedTarget',\n ];\n\n var MOUSE_DEFAULTS = [\
n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n 0,\n
false,\n false,\n false,\n false,\n 0,\n null\n ];\n\n funct
ion PointerEvent(inType, inDict) {\n inDict = inDict || {};\n // According
to the w3c spec,\n // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseE
vent-button\n // MouseEvent.button == 0 can mean either no mouse button depre
ssed, or the\n // left mouse button depressed.\n //\n // As of now, the
only way to distinguish between the two states of\n // MouseEvent.button is
by using the deprecated MouseEvent.which property, as\n // this maps mouse bu
ttons to positive integers > 0, and uses 0 to mean that\n // no mouse button
is held.\n //\n // MouseEvent.which is derived from MouseEvent.button at M
ouseEvent creation,\n // but initMouseEvent does not expose an argument with
which to set\n // MouseEvent.which. Calling initMouseEvent with a buttonArg o
f 0 will set\n // MouseEvent.button == 0 and MouseEvent.which == 1, breaking
the expectations\n // of app developers.\n //\n // The only way to prop
agate the correct state of MouseEvent.which and\n // MouseEvent.button to a n
ew MouseEvent.button == 0 and MouseEvent.which == 0\n // is to call initMouse
Event with a buttonArg value of -1.\n //\n // This is fixed with DOM Level
4's use of buttons\n var buttons;\n if (inDict.buttons || HAS_BUTTONS) {\
n buttons = inDict.buttons;\n } else {\n switch (inDict.which) {\n
case 1: buttons = 1; break;\n case 2: buttons = 4; break;\n
case 3: buttons = 2; break;\n default: buttons = 0;\n }\n }\n\n
var e;\n if (NEW_MOUSE_EVENT) {\n e = new MouseEvent(inType, inDict);
\n } else {\n e = document.createEvent('MouseEvent');\n\n // import
values from the given dictionary\n var props = {}, p;\n for(var i = 0
; i < MOUSE_PROPS.length; i++) {\n p = MOUSE_PROPS[i];\n props[p]
= inDict[p] || MOUSE_DEFAULTS[i];\n }\n\n // define the properties inh
erited from MouseEvent\n e.initMouseEvent(\n inType, props.bubbles,
props.cancelable, props.view, props.detail,\n props.screenX, props.screen
Y, props.clientX, props.clientY, props.ctrlKey,\n props.altKey, props.shi
ftKey, props.metaKey, props.button, props.relatedTarget\n );\n }\n\n
// make the event pass instanceof checks\n e.__proto__ = PointerEvent.prototy
pe;\n\n // define the buttons property according to DOM Level 3 spec\n if
(!HAS_BUTTONS) {\n // IE 10 has buttons on MouseEvent.prototype as a getter
w/o any setting\n // mechanism\n Object.defineProperty(e, 'buttons',
{get: function(){ return buttons; }, enumerable: true});\n }\n\n // Spec r
equires that pointers without pressure specified use 0.5 for down\n // state
and 0 for up state.\n var pressure = 0;\n if (inDict.pressure) {\n pr
essure = inDict.pressure;\n } else {\n pressure = buttons ? 0.5 : 0;\n
}\n\n // define the properties of the PointerEvent interface\n Object.de
fineProperties(e, {\n pointerId: { value: inDict.pointerId || 0, enumerable
: true },\n width: { value: inDict.width || 0, enumerable: true },\n h
eight: { value: inDict.height || 0, enumerable: true },\n pressure: { value
: pressure, enumerable: true },\n tiltX: { value: inDict.tiltX || 0, enumer
able: true },\n tiltY: { value: inDict.tiltY || 0, enumerable: true },\n
pointerType: { value: inDict.pointerType || '', enumerable: true },\n hw
Timestamp: { value: inDict.hwTimestamp || 0, enumerable: true },\n isPrimar
y: { value: inDict.isPrimary || false, enumerable: true }\n });\n return e
;\n }\n\n // PointerEvent extends MouseEvent\n PointerEvent.prototype = Objec
t.create(MouseEvent.prototype);\n\n // attach to window\n if (!scope.PointerEv
ent) {\n scope.PointerEvent = PointerEvent;\n }\n})(window);\n", |
| 169 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n
*/\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE
ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa
p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS
_FN;\n return m;\n } else {\n this.keys = [];\n this.values =
[];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent)
{\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val
ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v
alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t
his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var
i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1
);\n this.values.splice(i, 1);\n }\n },\n get: function(inId)
{\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\
n clear: function() {\n this.keys.length = 0;\n this.values.length
= 0;\n },\n // return value, key, map\n forEach: function(callback, thi
sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA
rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() {
\n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap
;\n})(window.PointerEventsPolyfill);\n", |
| 170 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv
ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX
',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey'
,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n //
DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',
\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',
\n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n
'target',\n 'currentTarget',\n 'which'\n ];\n\n var CLONE_DEFAULTS = [\n
// MouseEvent\n false,\n false,\n null,\n null,\n 0,\n 0,\
n 0,\n 0,\n false,\n false,\n false,\n false,\n 0,\n nul
l,\n // DOM Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n
0,\n 0,\n 0,\n '',\n 0,\n false,\n // event instance\n '',
\n null,\n null,\n 0\n ];\n\n var HAS_SVG_INSTANCE = (typeof SVGEleme
ntInstance !== 'undefined');\n\n /**\n * This module is for normalizing event
s. Mouse and Touch events will be\n * collected here, and fire PointerEvents t
hat have the same semantics, no\n * matter the source.\n * Events fired:\n
* - pointerdown: a pointing is added\n * - pointerup: a pointer is remove
d\n * - pointermove: a pointer is moved\n * - pointerover: a pointer cro
sses into an element\n * - pointerout: a pointer leaves an element\n * -
pointercancel: a pointer will no longer generate events\n */\n var dispatche
r = {\n targets: new WeakMap(),\n handledEvents: new WeakMap(),\n point
ermap: new scope.PointerMap(),\n eventMap: {},\n // Scope objects for nati
ve events.\n // This exists for ease of testing.\n eventSources: {},\n
eventSourceList: [],\n /**\n * Add a new event source that will generate
pointer events.\n *\n * `inSource` must contain an array of event names
named `events`, and\n * functions with the names specified in the `events` a
rray.\n * @param {string} name A name for the event source\n * @param {O
bject} source A new source of platform events.\n */\n registerSource: fun
ction(name, source) {\n var s = source;\n var newEvents = s.events;\n
if (newEvents) {\n newEvents.forEach(function(e) {\n if (s[
e]) {\n this.eventMap[e] = s[e].bind(s);\n }\n }, thi
s);\n this.eventSources[name] = s;\n this.eventSourceList.push(s);
\n }\n },\n register: function(element) {\n var l = this.eventSo
urceList.length;\n for (var i = 0, es; (i < l) && (es = this.eventSourceLis
t[i]); i++) {\n // call eventsource register\n es.register.call(es
, element);\n }\n },\n unregister: function(element) {\n var l =
this.eventSourceList.length;\n for (var i = 0, es; (i < l) && (es = this.e
ventSourceList[i]); i++) {\n // call eventsource register\n es.unr
egister.call(es, element);\n }\n },\n contains: scope.external.contai
ns || function(container, contained) {\n return container.contains(containe
d);\n },\n // EVENTS\n down: function(inEvent) {\n this.fireEvent(
'pointerdown', inEvent);\n },\n move: function(inEvent) {\n this.fire
Event('pointermove', inEvent);\n },\n up: function(inEvent) {\n this.
fireEvent('pointerup', inEvent);\n },\n enter: function(inEvent) {\n
inEvent.bubbles = false;\n this.fireEvent('pointerenter', inEvent);\n },
\n leave: function(inEvent) {\n inEvent.bubbles = false;\n this.fir
eEvent('pointerleave', inEvent);\n },\n over: function(inEvent) {\n i
nEvent.bubbles = true;\n this.fireEvent('pointerover', inEvent);\n },\n
out: function(inEvent) {\n inEvent.bubbles = true;\n this.fireEvent
('pointerout', inEvent);\n },\n cancel: function(inEvent) {\n this.fi
reEvent('pointercancel', inEvent);\n },\n leaveOut: function(event) {\n
this.out(event);\n if (!this.contains(event.target, event.relatedTarget)
) {\n this.leave(event);\n }\n },\n enterOver: function(event)
{\n this.over(event);\n if (!this.contains(event.target, event.relate
dTarget)) {\n this.enter(event);\n }\n },\n // LISTENER LOGIC\
n eventHandler: function(inEvent) {\n // This is used to prevent multipl
e dispatch of pointerevents from\n // platform events. This can happen when
two elements in different scopes\n // are set up to create pointer events,
which is relevant to Shadow DOM.\n if (this.handledEvents.get(inEvent)) {\
n return;\n }\n var type = inEvent.type;\n var fn = this.e
ventMap && this.eventMap[type];\n if (fn) {\n fn(inEvent);\n }\
n this.handledEvents.set(inEvent, true);\n },\n // set up event liste
ners\n listen: function(target, events) {\n events.forEach(function(e) {
\n this.addEvent(target, e);\n }, this);\n },\n // remove even
t listeners\n unlisten: function(target, events) {\n events.forEach(func
tion(e) {\n this.removeEvent(target, e);\n }, this);\n },\n ad
dEvent: scope.external.addEvent || function(target, eventName) {\n target.a
ddEventListener(eventName, this.boundHandler);\n },\n removeEvent: scope.e
xternal.removeEvent || function(target, eventName) {\n target.removeEventLi
stener(eventName, this.boundHandler);\n },\n // EVENT CREATION AND TRACKIN
G\n /**\n * Creates a new Event of type `inType`, based on the informatio
n in\n * `inEvent`.\n *\n * @param {string} inType A string represen
ting the type of event to create\n * @param {Event} inEvent A platform event
with a target\n * @return {Event} A PointerEvent of type `inType`\n */\
n makeEvent: function(inType, inEvent) {\n // relatedTarget must be null
if pointer is captured\n if (this.captureInfo) {\n inEvent.relatedT
arget = null;\n }\n var e = new PointerEvent(inType, inEvent);\n
if (inEvent.preventDefault) {\n e.preventDefault = inEvent.preventDefault
;\n }\n this.targets.set(e, this.targets.get(inEvent) || inEvent.targe
t);\n return e;\n },\n // make and dispatch an event in one call\n
fireEvent: function(inType, inEvent) {\n var e = this.makeEvent(inType, in
Event);\n return this.dispatchEvent(e);\n },\n /**\n * Returns a
snapshot of inEvent, with writable properties.\n *\n * @param {Event} in
Event An event that contains properties to copy.\n * @return {Object} An obj
ect containing shallow copies of `inEvent`'s\n * properties.\n */\n
cloneEvent: function(inEvent) {\n var eventCopy = {}, p;\n for (var
i = 0; i < CLONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n even
tCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];\n // Work around SVGInstanceE
lement shadow tree\n // Return the <use> element that is represented by t
he instance for Safari, Chrome, IE.\n // This is the behavior implemented
by Firefox.\n if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedT
arget')) {\n if (eventCopy[p] instanceof SVGElementInstance) {\n
eventCopy[p] = eventCopy[p].correspondingUseElement;\n }\n
}\n }\n // keep the semantics of preventDefault\n if (inEvent.pre
ventDefault) {\n eventCopy.preventDefault = function() {\n inEve
nt.preventDefault();\n };\n }\n return eventCopy;\n },\n
getTarget: function(inEvent) {\n // if pointer capture is set, route all ev
ents for the specified pointerId\n // to the capture target\n if (this
.captureInfo) {\n if (this.captureInfo.id === inEvent.pointerId) {\n
return this.captureInfo.target;\n }\n }\n return this.targ
ets.get(inEvent);\n },\n setCapture: function(inPointerId, inTarget) {\n
if (this.captureInfo) {\n this.releaseCapture(this.captureInfo.id);\n
}\n this.captureInfo = {id: inPointerId, target: inTarget};\n va
r e = new PointerEvent('gotpointercapture', { bubbles: true });\n this.impl
icitRelease = this.releaseCapture.bind(this, inPointerId);\n document.addEv
entListener('pointerup', this.implicitRelease);\n document.addEventListener
('pointercancel', this.implicitRelease);\n this.targets.set(e, inTarget);\n
this.asyncDispatchEvent(e);\n },\n releaseCapture: function(inPointe
rId) {\n if (this.captureInfo && this.captureInfo.id === inPointerId) {\n
var e = new PointerEvent('lostpointercapture', { bubbles: true });\n
var t = this.captureInfo.target;\n this.captureInfo = null;\n do
cument.removeEventListener('pointerup', this.implicitRelease);\n document
.removeEventListener('pointercancel', this.implicitRelease);\n this.targe
ts.set(e, t);\n this.asyncDispatchEvent(e);\n }\n },\n /**\n
* Dispatches the event to its target.\n *\n * @param {Event} inEvent
The event to be dispatched.\n * @return {Boolean} True if an event handler r
eturns true, false otherwise.\n */\n dispatchEvent: scope.external.dispat
chEvent || function(inEvent) {\n var t = this.getTarget(inEvent);\n if
(t) {\n return t.dispatchEvent(inEvent);\n }\n },\n asyncDisp
atchEvent: function(inEvent) {\n setTimeout(this.dispatchEvent.bind(this, i
nEvent), 0);\n }\n };\n dispatcher.boundHandler = dispatcher.eventHandler.b
ind(dispatcher);\n scope.dispatcher = dispatcher;\n scope.register = dispatche
r.register.bind(dispatcher);\n scope.unregister = dispatcher.unregister.bind(di
spatcher);\n})(window.PointerEventsPolyfill);\n", |
| 171 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This module uses Mutation Observers to dynamicall
y adjust which nodes will\n * generate Pointer Events.\n *\n * All nodes that wi
sh to generate Pointer Events must have the attribute\n * `touch-action` set to
`none`.\n */\n(function(scope) {\n var forEach = Array.prototype.forEach.call.b
ind(Array.prototype.forEach);\n var map = Array.prototype.map.call.bind(Array.p
rototype.map);\n var toArray = Array.prototype.slice.call.bind(Array.prototype.
slice);\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter)
;\n var MO = window.MutationObserver || window.WebKitMutationObserver;\n var S
ELECTOR = '[touch-action]';\n var OBSERVER_INIT = {\n subtree: true,\n ch
ildList: true,\n attributes: true,\n attributeOldValue: true,\n attribu
teFilter: ['touch-action']\n };\n\n function Installer(add, remove, changed, b
inder) {\n this.addCallback = add.bind(binder);\n this.removeCallback = re
move.bind(binder);\n this.changedCallback = changed.bind(binder);\n if (MO
) {\n this.observer = new MO(this.mutationWatcher.bind(this));\n }\n }\
n\n Installer.prototype = {\n watchSubtree: function(target) {\n // Onl
y watch scopes that can target find, as these are top-level.\n // Otherwise
we can see duplicate additions and removals that add noise.\n //\n //
TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see\n /
/ a removal without an insertion when a node is redistributed among\n // sh
adows. Since it all ends up correct in the document, watching only\n // the
document will yield the correct mutations to watch.\n if (scope.targetFind
ing.canTarget(target)) {\n this.observer.observe(target, OBSERVER_INIT);\
n }\n },\n enableOnSubtree: function(target) {\n this.watchSubtr
ee(target);\n if (target === document && document.readyState !== 'complete'
) {\n this.installOnLoad();\n } else {\n this.installNewSubtr
ee(target);\n }\n },\n installNewSubtree: function(target) {\n f
orEach(this.findElements(target), this.addElement, this);\n },\n findEleme
nts: function(target) {\n if (target.querySelectorAll) {\n return ta
rget.querySelectorAll(SELECTOR);\n }\n return [];\n },\n removeE
lement: function(el) {\n this.removeCallback(el);\n },\n addElement:
function(el) {\n this.addCallback(el);\n },\n elementChanged: functio
n(el, oldValue) {\n this.changedCallback(el, oldValue);\n },\n concat
Lists: function(accum, list) {\n return accum.concat(toArray(list));\n }
,\n // register all touch-action = none nodes on document load\n installOn
Load: function() {\n document.addEventListener('DOMContentLoaded', this.ins
tallNewSubtree.bind(this, document));\n },\n isElement: function(n) {\n
return n.nodeType === Node.ELEMENT_NODE;\n },\n flattenMutationTree: fu
nction(inNodes) {\n // find children with touch-action\n var tree = ma
p(inNodes, this.findElements, this);\n // make sure the added nodes are acc
ounted for\n tree.push(filter(inNodes, this.isElement));\n // flatten
the list\n return tree.reduce(this.concatLists, []);\n },\n mutationW
atcher: function(mutations) {\n mutations.forEach(this.mutationHandler, thi
s);\n },\n mutationHandler: function(m) {\n if (m.type === 'childList
') {\n var added = this.flattenMutationTree(m.addedNodes);\n added
.forEach(this.addElement, this);\n var removed = this.flattenMutationTree
(m.removedNodes);\n removed.forEach(this.removeElement, this);\n } e
lse if (m.type === 'attributes') {\n this.elementChanged(m.target, m.oldV
alue);\n }\n }\n };\n\n if (!MO) {\n Installer.prototype.watchSubtr
ee = function(){\n console.warn('PointerEventsPolyfill: MutationObservers n
ot found, touch-action will not be dynamically detected');\n };\n }\n\n sco
pe.Installer = Installer;\n})(window.PointerEventsPolyfill);\n", |
| 172 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function (scope) {\n var dispatcher = scope.dispatcher;
\n var pointermap = dispatcher.pointermap;\n // radius around touchend that sw
allows mouse events\n var DEDUP_DIST = 25;\n\n // handler block for native mou
se events\n var mouseEvents = {\n POINTER_ID: 1,\n POINTER_TYPE: 'mouse',
\n events: [\n 'mousedown',\n 'mousemove',\n 'mouseup',\n
'mouseover',\n 'mouseout'\n ],\n register: function(target) {\n
dispatcher.listen(target, this.events);\n },\n unregister: function(targe
t) {\n dispatcher.unlisten(target, this.events);\n },\n lastTouches:
[],\n // collide with the global mouse listener\n isEventSimulatedFromTouc
h: function(inEvent) {\n var lts = this.lastTouches;\n var x = inEvent
.clientX, y = inEvent.clientY;\n for (var i = 0, l = lts.length, t; i < l &
& (t = lts[i]); i++) {\n // simulated mouse events will be swallowed near
a primary touchend\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);
\n if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {\n return true;\n
}\n }\n },\n prepareEvent: function(inEvent) {\n var e =
dispatcher.cloneEvent(inEvent);\n // forward mouse preventDefault\n va
r pd = e.preventDefault;\n e.preventDefault = function() {\n inEvent
.preventDefault();\n pd();\n };\n e.pointerId = this.POINTER_ID
;\n e.isPrimary = true;\n e.pointerType = this.POINTER_TYPE;\n re
turn e;\n },\n mousedown: function(inEvent) {\n if (!this.isEventSimu
latedFromTouch(inEvent)) {\n var p = pointermap.has(this.POINTER_ID);\n
// TODO(dfreedman) workaround for some elements not sending mouseup\n
// http://crbug/149091\n if (p) {\n this.cancel(inEvent);\n
}\n var e = this.prepareEvent(inEvent);\n pointermap.set(thi
s.POINTER_ID, inEvent);\n dispatcher.down(e);\n }\n },\n mouse
move: function(inEvent) {\n if (!this.isEventSimulatedFromTouch(inEvent)) {
\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\n
}\n },\n mouseup: function(inEvent) {\n if (!this.isEventSimulatedF
romTouch(inEvent)) {\n var p = pointermap.get(this.POINTER_ID);\n
if (p && p.button === inEvent.button) {\n var e = this.prepareEvent(inE
vent);\n dispatcher.up(e);\n this.cleanupMouse();\n }\n
}\n },\n mouseover: function(inEvent) {\n if (!this.isEventSimu
latedFromTouch(inEvent)) {\n var e = this.prepareEvent(inEvent);\n
dispatcher.enterOver(e);\n }\n },\n mouseout: function(inEvent) {\n
if (!this.isEventSimulatedFromTouch(inEvent)) {\n var e = this.prepa
reEvent(inEvent);\n dispatcher.leaveOut(e);\n }\n },\n cancel:
function(inEvent) {\n var e = this.prepareEvent(inEvent);\n dispatche
r.cancel(e);\n this.cleanupMouse();\n },\n cleanupMouse: function() {
\n pointermap['delete'](this.POINTER_ID);\n }\n };\n\n scope.mouseEven
ts = mouseEvents;\n})(window.PointerEventsPolyfill);\n", |
| 173 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\
n var findTarget = scope.findTarget;\n var allShadows = scope.targetFinding.al
lShadows.bind(scope.targetFinding);\n var pointermap = dispatcher.pointermap;\n
var touchMap = Array.prototype.map.call.bind(Array.prototype.map);\n // This
should be long enough to ignore compat mouse events made by touch\n var DEDUP_T
IMEOUT = 2500;\n var CLICK_COUNT_TIMEOUT = 200;\n var ATTRIB = 'touch-action';
\n var INSTALLER;\n // The presence of touch event handlers blocks scrolling,
and so we must be careful to\n // avoid adding handlers unnecessarily. Chrome
plans to add a touch-action-delay property\n // (crbug.com/329559) to address t
his, and once we have that we can opt-in to a simpler\n // handler registration
mechanism. Rather than try to predict how exactly to opt-in to\n // that we'l
l just leave this disabled until there is a build of Chrome to test.\n var HAS_
TOUCH_ACTION_DELAY = false;\n \n // handler block for native touch events\n v
ar touchEvents = {\n scrollType: new WeakMap(),\n events: [\n 'touchs
tart',\n 'touchmove',\n 'touchend',\n 'touchcancel'\n ],\n
register: function(target) {\n if (HAS_TOUCH_ACTION_DELAY) {\n dispa
tcher.listen(target, this.events);\n } else {\n INSTALLER.enableOnSu
btree(target);\n }\n },\n unregister: function(target) {\n if (H
AS_TOUCH_ACTION_DELAY) {\n dispatcher.unlisten(target, this.events);\n
} else {\n // TODO(dfreedman): is it worth it to disconnect the MO?\n
}\n },\n elementAdded: function(el) {\n var a = el.getAttribute(
ATTRIB);\n var st = this.touchActionToScrollType(a);\n if (st) {\n
this.scrollType.set(el, st);\n dispatcher.listen(el, this.events);\n
// set touch-action on shadows as well\n allShadows(el).forEach(fu
nction(s) {\n this.scrollType.set(s, st);\n dispatcher.listen(
s, this.events);\n }, this);\n }\n },\n elementRemoved: functi
on(el) {\n this.scrollType['delete'](el);\n dispatcher.unlisten(el, th
is.events);\n // remove touch-action from shadow\n allShadows(el).forE
ach(function(s) {\n this.scrollType['delete'](s);\n dispatcher.unl
isten(s, this.events);\n }, this);\n },\n elementChanged: function(el
, oldValue) {\n var a = el.getAttribute(ATTRIB);\n var st = this.touch
ActionToScrollType(a);\n var oldSt = this.touchActionToScrollType(oldValue)
;\n // simply update scrollType if listeners are already established\n
if (st && oldSt) {\n this.scrollType.set(el, st);\n allShadows(el
).forEach(function(s) {\n this.scrollType.set(s, st);\n }, this)
;\n } else if (oldSt) {\n this.elementRemoved(el);\n } else if
(st) {\n this.elementAdded(el);\n }\n },\n scrollTypes: {\n
EMITTER: 'none',\n XSCROLLER: 'pan-x',\n YSCROLLER: 'pan-y',\n
SCROLLER: /^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/\n },\n touchActionToSc
rollType: function(touchAction) {\n var t = touchAction;\n var st = th
is.scrollTypes;\n if (t === 'none') {\n return 'none';\n } else
if (t === st.XSCROLLER) {\n return 'X';\n } else if (t === st.YSCRO
LLER) {\n return 'Y';\n } else if (st.SCROLLER.exec(t)) {\n r
eturn 'XY';\n }\n },\n POINTER_TYPE: 'touch',\n firstTouch: null,\
n isPrimaryTouch: function(inTouch) {\n return this.firstTouch === inTou
ch.identifier;\n },\n setPrimaryTouch: function(inTouch) {\n // set p
rimary touch if there no pointers, or the only pointer is the mouse\n if (p
ointermap.pointers() === 0 || (pointermap.pointers() === 1 && pointermap.has(1))
) {\n this.firstTouch = inTouch.identifier;\n this.firstXY = {X: i
nTouch.clientX, Y: inTouch.clientY};\n this.scrolling = false;\n t
his.cancelResetClickCount();\n }\n },\n removePrimaryPointer: functio
n(inPointer) {\n if (inPointer.isPrimary) {\n this.firstTouch = null
;\n this.firstXY = null;\n this.resetClickCount();\n }\n }
,\n clickCount: 0,\n resetId: null,\n resetClickCount: function() {\n
var fn = function() {\n this.clickCount = 0;\n this.resetId =
null;\n }.bind(this);\n this.resetId = setTimeout(fn, CLICK_COUNT_TIME
OUT);\n },\n cancelResetClickCount: function() {\n if (this.resetId)
{\n clearTimeout(this.resetId);\n }\n },\n touchToPointer: fun
ction(inTouch) {\n var e = dispatcher.cloneEvent(inTouch);\n // Spec s
pecifies that pointerId 1 is reserved for Mouse.\n // Touch identifiers can
start at 0.\n // Add 2 to the touch identifier for compatibility.\n e
.pointerId = inTouch.identifier + 2;\n e.target = findTarget(e);\n e.b
ubbles = true;\n e.cancelable = true;\n e.detail = this.clickCount;\n
e.button = 0;\n e.buttons = 1;\n e.width = inTouch.webkitRadiusX
|| inTouch.radiusX || 0;\n e.height = inTouch.webkitRadiusY || inTouch.radi
usY || 0;\n e.pressure = inTouch.webkitForce || inTouch.force || 0.5;\n
e.isPrimary = this.isPrimaryTouch(inTouch);\n e.pointerType = this.POINTE
R_TYPE;\n return e;\n },\n processTouches: function(inEvent, inFuncti
on) {\n var tl = inEvent.changedTouches;\n var pointers = touchMap(tl,
this.touchToPointer, this);\n // forward touch preventDefaults\n poin
ters.forEach(function(p) {\n p.preventDefault = function() {\n t
his.scrolling = false;\n this.firstXY = null;\n inEvent.preven
tDefault();\n };\n }, this);\n pointers.forEach(inFunction, thi
s);\n },\n // For single axis scrollers, determines whether the element sh
ould emit\n // pointer events or behave as a scroller\n shouldScroll: func
tion(inEvent) {\n if (this.firstXY) {\n var ret;\n var scroll
Axis = this.scrollType.get(inEvent.currentTarget);\n if (scrollAxis === '
none') {\n // this element is a touch-action: none, should never scroll
\n ret = false;\n } else if (scrollAxis === 'XY') {\n /
/ this element should always scroll\n ret = true;\n } else {\n
var t = inEvent.changedTouches[0];\n // check the intended scro
ll axis, and other axis\n var a = scrollAxis;\n var oa = scrol
lAxis === 'Y' ? 'X' : 'Y';\n var da = Math.abs(t['client' + a] - this.f
irstXY[a]);\n var doa = Math.abs(t['client' + oa] - this.firstXY[oa]);\
n // if delta in the scroll axis > delta other axis, scroll instead of\
n // making events\n ret = da >= doa;\n }\n this
.firstXY = null;\n return ret;\n }\n },\n findTouch: function(
inTL, inId) {\n for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]);
i++) {\n if (t.identifier === inId) {\n return true;\n }
\n }\n },\n // In some instances, a touchstart can happen without a t
ouchend. This\n // leaves the pointermap in a broken state.\n // Therefore
, on every touchstart, we remove the touches that did not fire a\n // touchen
d event.\n // To keep state globally consistent, we fire a\n // pointercan
cel for this \"abandoned\" touch\n vacuumTouches: function(inEvent) {\n
var tl = inEvent.touches;\n // pointermap.pointers() should be < tl.length
here, as the touchstart has not\n // been processed yet.\n if (pointer
map.pointers() >= tl.length) {\n var d = [];\n pointermap.forEach(
function(value, key) {\n // Never remove pointerId == 1, which is mouse
.\n // Touch identifiers are 2 smaller than their pointerId, which is t
he\n // index in pointermap.\n if (key !== 1 && !this.findTouc
h(tl, key - 2)) {\n var p = value.out;\n d.push(this.touch
ToPointer(p));\n }\n }, this);\n d.forEach(this.cancelOut
, this);\n }\n },\n touchstart: function(inEvent) {\n this.vacuu
mTouches(inEvent);\n this.setPrimaryTouch(inEvent.changedTouches[0]);\n
this.dedupSynthMouse(inEvent);\n if (!this.scrolling) {\n this.cli
ckCount++;\n this.processTouches(inEvent, this.overDown);\n }\n }
,\n overDown: function(inPointer) {\n var p = pointermap.set(inPointer.p
ointerId, {\n target: inPointer.target,\n out: inPointer,\n
outTarget: inPointer.target\n });\n dispatcher.over(inPointer);\n
dispatcher.enter(inPointer);\n dispatcher.down(inPointer);\n },\n t
ouchmove: function(inEvent) {\n if (!this.scrolling) {\n if (this.sh
ouldScroll(inEvent)) {\n this.scrolling = true;\n this.touchca
ncel(inEvent);\n } else {\n inEvent.preventDefault();\n
this.processTouches(inEvent, this.moveOverOut);\n }\n }\n },\n
moveOverOut: function(inPointer) {\n var event = inPointer;\n var po
inter = pointermap.get(event.pointerId);\n // a finger drifted off the scre
en, ignore it\n if (!pointer) {\n return;\n }\n var outEve
nt = pointer.out;\n var outTarget = pointer.outTarget;\n dispatcher.mo
ve(event);\n if (outEvent && outTarget !== event.target) {\n outEven
t.relatedTarget = event.target;\n event.relatedTarget = outTarget;\n
// recover from retargeting by shadow\n outEvent.target = outTarget;\n
if (event.target) {\n dispatcher.leaveOut(outEvent);\n
dispatcher.enterOver(event);\n } else {\n // clean up case when
finger leaves the screen\n event.target = outTarget;\n event.
relatedTarget = null;\n this.cancelOut(event);\n }\n }\n
pointer.out = event;\n pointer.outTarget = event.target;\n },\n to
uchend: function(inEvent) {\n this.dedupSynthMouse(inEvent);\n this.pr
ocessTouches(inEvent, this.upOut);\n },\n upOut: function(inPointer) {\n
if (!this.scrolling) {\n dispatcher.up(inPointer);\n dispatche
r.out(inPointer);\n dispatcher.leave(inPointer);\n }\n this.cle
anUpPointer(inPointer);\n },\n touchcancel: function(inEvent) {\n thi
s.processTouches(inEvent, this.cancelOut);\n },\n cancelOut: function(inPo
inter) {\n dispatcher.cancel(inPointer);\n dispatcher.out(inPointer);\
n dispatcher.leave(inPointer);\n this.cleanUpPointer(inPointer);\n
},\n cleanUpPointer: function(inPointer) {\n pointermap['delete'](inPoin
ter.pointerId);\n this.removePrimaryPointer(inPointer);\n },\n // pre
vent synth mouse events from creating pointer events\n dedupSynthMouse: funct
ion(inEvent) {\n var lts = scope.mouseEvents.lastTouches;\n var t = in
Event.changedTouches[0];\n // only the primary finger will synth mouse even
ts\n if (this.isPrimaryTouch(t)) {\n // remember x/y of last touch\n
var lt = {x: t.clientX, y: t.clientY};\n lts.push(lt);\n v
ar fn = (function(lts, lt){\n var i = lts.indexOf(lt);\n if (i
> -1) {\n lts.splice(i, 1);\n }\n }).bind(null, lts,
lt);\n setTimeout(fn, DEDUP_TIMEOUT);\n }\n }\n };\n\n if (!HA
S_TOUCH_ACTION_DELAY) {\n INSTALLER = new scope.Installer(touchEvents.element
Added, touchEvents.elementRemoved, touchEvents.elementChanged, touchEvents);\n
}\n\n scope.touchEvents = touchEvents;\n})(window.PointerEventsPolyfill);\n", |
| 174 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\
n var pointermap = dispatcher.pointermap;\n var HAS_BITMAP_TYPE = window.MSPoi
nterEvent && typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';\n
var msEvents = {\n events: [\n 'MSPointerDown',\n 'MSPointerMove',\
n 'MSPointerUp',\n 'MSPointerOut',\n 'MSPointerOver',\n 'MSP
ointerCancel',\n 'MSGotPointerCapture',\n 'MSLostPointerCapture'\n
],\n register: function(target) {\n dispatcher.listen(target, this.event
s);\n },\n unregister: function(target) {\n dispatcher.unlisten(targe
t, this.events);\n },\n POINTER_TYPES: [\n '',\n 'unavailable',\
n 'touch',\n 'pen',\n 'mouse'\n ],\n prepareEvent: function
(inEvent) {\n var e = inEvent;\n if (HAS_BITMAP_TYPE) {\n e = d
ispatcher.cloneEvent(inEvent);\n e.pointerType = this.POINTER_TYPES[inEve
nt.pointerType];\n }\n return e;\n },\n cleanup: function(id) {\
n pointermap['delete'](id);\n },\n MSPointerDown: function(inEvent) {
\n pointermap.set(inEvent.pointerId, inEvent);\n var e = this.prepareE
vent(inEvent);\n dispatcher.down(e);\n },\n MSPointerMove: function(i
nEvent) {\n var e = this.prepareEvent(inEvent);\n dispatcher.move(e);\
n },\n MSPointerUp: function(inEvent) {\n var e = this.prepareEvent(i
nEvent);\n dispatcher.up(e);\n this.cleanup(inEvent.pointerId);\n }
,\n MSPointerOut: function(inEvent) {\n var e = this.prepareEvent(inEven
t);\n dispatcher.leaveOut(e);\n },\n MSPointerOver: function(inEvent)
{\n var e = this.prepareEvent(inEvent);\n dispatcher.enterOver(e);\n
},\n MSPointerCancel: function(inEvent) {\n var e = this.prepareEvent
(inEvent);\n dispatcher.cancel(e);\n this.cleanup(inEvent.pointerId);\
n },\n MSLostPointerCapture: function(inEvent) {\n var e = dispatcher
.makeEvent('lostpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n
},\n MSGotPointerCapture: function(inEvent) {\n var e = dispatcher.m
akeEvent('gotpointercapture', inEvent);\n dispatcher.dispatchEvent(e);\n
}\n };\n\n scope.msEvents = msEvents;\n})(window.PointerEventsPolyfill);\n", |
| 175 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This module contains the handlers for native plat
form events.\n * From here, the dispatcher is called to create unified pointer e
vents.\n * Included are touch events (v1), mouse events, and MSPointerEvents.\n
*/\n(function(scope) {\n var dispatcher = scope.dispatcher;\n\n // only activa
te if this platform does not have pointer events\n if (window.navigator.pointer
Enabled === undefined) {\n Object.defineProperty(window.navigator, 'pointerEn
abled', {value: true, enumerable: true});\n\n if (window.navigator.msPointerE
nabled) {\n var tp = window.navigator.msMaxTouchPoints;\n Object.defin
eProperty(window.navigator, 'maxTouchPoints', {\n value: tp,\n enu
merable: true\n });\n dispatcher.registerSource('ms', scope.msEvents);
\n } else {\n dispatcher.registerSource('mouse', scope.mouseEvents);\n
if (window.ontouchstart !== undefined) {\n dispatcher.registerSource(
'touch', scope.touchEvents);\n }\n }\n\n dispatcher.register(document
);\n }\n})(window.PointerEventsPolyfill);\n", |
| 176 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\
n var n = window.navigator;\n var s, r;\n function assertDown(id) {\n if (
!dispatcher.pointermap.has(id)) {\n throw new Error('InvalidPointerId');\n
}\n }\n if (n.msPointerEnabled) {\n s = function(pointerId) {\n ass
ertDown(pointerId);\n this.msSetPointerCapture(pointerId);\n };\n r =
function(pointerId) {\n assertDown(pointerId);\n this.msReleasePointe
rCapture(pointerId);\n };\n } else {\n s = function setPointerCapture(poi
nterId) {\n assertDown(pointerId);\n dispatcher.setCapture(pointerId,
this);\n };\n r = function releasePointerCapture(pointerId) {\n asser
tDown(pointerId);\n dispatcher.releaseCapture(pointerId, this);\n };\n
}\n if (window.Element && !Element.prototype.setPointerCapture) {\n Object.d
efineProperties(Element.prototype, {\n 'setPointerCapture': {\n valu
e: s\n },\n 'releasePointerCapture': {\n value: r\n }\n
});\n }\n})(window.PointerEventsPolyfill);\n", |
| 177 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * PointerGestureEvent is the constructor for all Po
interGesture events.\n *\n * @module PointerGestures\n * @class PointerGestureEv
ent\n * @extends UIEvent\n * @constructor\n * @param {String} inType Event type\
n * @param {Object} [inDict] Dictionary of properties to initialize on the event
\n */\n\nfunction PointerGestureEvent(inType, inDict) {\n var dict = inDict ||
{};\n var e = document.createEvent('Event');\n var props = {\n bubbles: Boo
lean(dict.bubbles) === dict.bubbles || true,\n cancelable: Boolean(dict.cance
lable) === dict.cancelable || true\n };\n\n e.initEvent(inType, props.bubbles,
props.cancelable);\n\n var keys = Object.keys(dict), k;\n for (var i = 0; i <
keys.length; i++) {\n k = keys[i];\n e[k] = dict[k];\n }\n\n e.preventT
ap = this.preventTap;\n\n return e;\n}\n\n/**\n * Allows for any gesture to pre
vent the tap gesture.\n *\n * @method preventTap\n */\nPointerGestureEvent.proto
type.preventTap = function() {\n this.tapPrevented = true;\n};\n\n", |
| 178 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n /**\n * This class contains the g
esture recognizers that create the PointerGesture\n * events.\n *\n * @cla
ss PointerGestures\n * @static\n */\n scope = scope || {};\n scope.utils =
{\n LCA: {\n // Determines the lowest node in the ancestor chain of a a
nd b\n find: function(a, b) {\n if (a === b) {\n return a;\
n }\n // fast case, a is a direct descendant of b or vice versa\n
if (a.contains) {\n if (a.contains(b)) {\n return a;\
n }\n if (b.contains(a)) {\n return b;\n }
\n }\n var adepth = this.depth(a);\n var bdepth = this.dept
h(b);\n var d = adepth - bdepth;\n if (d > 0) {\n a = thi
s.walk(a, d);\n } else {\n b = this.walk(b, -d);\n }\n
while(a && b && a !== b) {\n a = this.walk(a, 1);\n b = t
his.walk(b, 1);\n }\n return a;\n },\n walk: function(n,
u) {\n for (var i = 0; i < u; i++) {\n n = n.parentNode;\n
}\n return n;\n },\n depth: function(n) {\n var d = 0
;\n while(n) {\n d++;\n n = n.parentNode;\n }\n
return d;\n }\n }\n };\n scope.findLCA = function(a, b) {\n
return scope.utils.LCA.find(a, b);\n }\n window.PointerGestures = scope;\n})(w
indow.PointerGestures);\n", |
| 179 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This module implements an map of pointer states\n
*/\n(function(scope) {\n var USE_MAP = window.Map && window.Map.prototype.forE
ach;\n var POINTERS_FN = function(){ return this.size; };\n function PointerMa
p() {\n if (USE_MAP) {\n var m = new Map();\n m.pointers = POINTERS
_FN;\n return m;\n } else {\n this.keys = [];\n this.values =
[];\n }\n }\n\n PointerMap.prototype = {\n set: function(inId, inEvent)
{\n var i = this.keys.indexOf(inId);\n if (i > -1) {\n this.val
ues[i] = inEvent;\n } else {\n this.keys.push(inId);\n this.v
alues.push(inEvent);\n }\n },\n has: function(inId) {\n return t
his.keys.indexOf(inId) > -1;\n },\n 'delete': function(inId) {\n var
i = this.keys.indexOf(inId);\n if (i > -1) {\n this.keys.splice(i, 1
);\n this.values.splice(i, 1);\n }\n },\n get: function(inId)
{\n var i = this.keys.indexOf(inId);\n return this.values[i];\n },\
n clear: function() {\n this.keys.length = 0;\n this.values.length
= 0;\n },\n // return value, key, map\n forEach: function(callback, thi
sArg) {\n this.values.forEach(function(v, i) {\n callback.call(thisA
rg, v, this.keys[i], this);\n }, this);\n },\n pointers: function() {
\n return this.keys.length;\n }\n };\n\n scope.PointerMap = PointerMap
;\n})(window.PointerGestures);\n", |
| 180 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n(function(scope) {\n var CLONE_PROPS = [\n // MouseEv
ent\n 'bubbles',\n 'cancelable',\n 'view',\n 'detail',\n 'screenX
',\n 'screenY',\n 'clientX',\n 'clientY',\n 'ctrlKey',\n 'altKey'
,\n 'shiftKey',\n 'metaKey',\n 'button',\n 'relatedTarget',\n //
DOM Level 3\n 'buttons',\n // PointerEvent\n 'pointerId',\n 'width',
\n 'height',\n 'pressure',\n 'tiltX',\n 'tiltY',\n 'pointerType',
\n 'hwTimestamp',\n 'isPrimary',\n // event instance\n 'type',\n
'target',\n 'currentTarget',\n 'screenX',\n 'screenY',\n 'pageX',\n
'pageY',\n 'tapPrevented'\n ];\n\n var CLONE_DEFAULTS = [\n // MouseE
vent\n false,\n false,\n null,\n null,\n 0,\n 0,\n 0,\n
0,\n false,\n false,\n false,\n false,\n 0,\n null,\n // DO
M Level 3\n 0,\n // PointerEvent\n 0,\n 0,\n 0,\n 0,\n 0,\n
0,\n '',\n 0,\n false,\n // event instance\n '',\n null,\n
null,\n 0,\n 0,\n 0,\n 0\n ];\n\n var dispatcher = {\n hand
ledEvents: new WeakMap(),\n targets: new WeakMap(),\n handlers: {},\n r
ecognizers: {},\n events: {},\n // Add a new gesture recognizer to the eve
nt listeners.\n // Recognizer needs an `events` property.\n registerRecogn
izer: function(inName, inRecognizer) {\n var r = inRecognizer;\n this.
recognizers[inName] = r;\n r.events.forEach(function(e) {\n if (r[e]
) {\n this.events[e] = true;\n var f = r[e].bind(r);\n
this.addHandler(e, f);\n }\n }, this);\n },\n addHandler: fu
nction(inEvent, inFn) {\n var e = inEvent;\n if (!this.handlers[e]) {\
n this.handlers[e] = [];\n }\n this.handlers[e].push(inFn);\n
},\n // add event listeners for inTarget\n registerTarget: function(inTa
rget) {\n this.listen(Object.keys(this.events), inTarget);\n },\n //
remove event listeners for inTarget\n unregisterTarget: function(inTarget) {\
n this.unlisten(Object.keys(this.events), inTarget);\n },\n // LISTEN
ER LOGIC\n eventHandler: function(inEvent) {\n if (this.handledEvents.ge
t(inEvent)) {\n return;\n }\n var type = inEvent.type, fns = th
is.handlers[type];\n if (fns) {\n this.makeQueue(fns, inEvent);\n
}\n this.handledEvents.set(inEvent, true);\n },\n // queue event f
or async dispatch\n makeQueue: function(inHandlerFns, inEvent) {\n // mu
st clone events to keep the (possibly shadowed) target correct for\n // asy
nc dispatching\n var e = this.cloneEvent(inEvent);\n setTimeout(this.r
unQueue.bind(this, inHandlerFns, e), 0);\n },\n // Dispatch the queued eve
nts\n runQueue: function(inHandlers, inEvent) {\n this.currentPointerId
= inEvent.pointerId;\n for (var i = 0, f, l = inHandlers.length; (i < l) &&
(f = inHandlers[i]); i++) {\n f(inEvent);\n }\n this.currentPo
interId = 0;\n },\n // set up event listeners\n listen: function(inEven
ts, inTarget) {\n inEvents.forEach(function(e) {\n this.addEvent(e,
this.boundHandler, false, inTarget);\n }, this);\n },\n // remove eve
nt listeners\n unlisten: function(inEvents) {\n inEvents.forEach(functio
n(e) {\n this.removeEvent(e, this.boundHandler, false, inTarget);\n
}, this);\n },\n addEvent: function(inEventName, inEventHandler, inCapture
, inTarget) {\n inTarget.addEventListener(inEventName, inEventHandler, inCa
pture);\n },\n removeEvent: function(inEventName, inEventHandler, inCaptur
e, inTarget) {\n inTarget.removeEventListener(inEventName, inEventHandler,
inCapture);\n },\n // EVENT CREATION AND TRACKING\n // Creates a new Ev
ent of type `inType`, based on the information in\n // `inEvent`.\n makeEv
ent: function(inType, inDict) {\n return new PointerGestureEvent(inType, in
Dict);\n },\n /*\n * Returns a snapshot of inEvent, with writable prop
erties.\n *\n * @method cloneEvent\n * @param {Event} inEvent An eve
nt that contains properties to copy.\n * @return {Object} An object containi
ng shallow copies of `inEvent`'s\n * properties.\n */\n cloneEvent
: function(inEvent) {\n var eventCopy = {}, p;\n for (var i = 0; i < C
LONE_PROPS.length; i++) {\n p = CLONE_PROPS[i];\n eventCopy[p] = i
nEvent[p] || CLONE_DEFAULTS[i];\n }\n return eventCopy;\n },\n /
/ Dispatches the event to its target.\n dispatchEvent: function(inEvent, inTa
rget) {\n var t = inTarget || this.targets.get(inEvent);\n if (t) {\n
t.dispatchEvent(inEvent);\n if (inEvent.tapPrevented) {\n
this.preventTap(this.currentPointerId);\n }\n }\n },\n asyncD
ispatchEvent: function(inEvent, inTarget) {\n var fn = function() {\n
this.dispatchEvent(inEvent, inTarget);\n }.bind(this);\n setTimeout(
fn, 0);\n },\n preventTap: function(inPointerId) {\n var t = this.rec
ognizers.tap;\n if (t){\n t.preventTap(inPointerId);\n }\n }
\n };\n dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);\n
scope.dispatcher = dispatcher;\n var registerQueue = [];\n var immediateRegis
ter = false;\n /**\n * Enable gesture events for a given scope, typically\n
* [ShadowRoots](https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/i
ndex.html#shadow-root-object).\n *\n * @for PointerGestures\n * @method re
gister\n * @param {ShadowRoot} scope A top level scope to enable gesture\n *
support on.\n */\n scope.register = function(inScope) {\n if (immediateRe
gister) {\n var pe = window.PointerEventsPolyfill;\n if (pe) {\n
pe.register(inScope);\n }\n scope.dispatcher.registerTarget(inScope)
;\n } else {\n registerQueue.push(inScope);\n }\n };\n // wait to r
egister scopes until recognizers load\n document.addEventListener('DOMContentLo
aded', function() {\n immediateRegister = true;\n registerQueue.push(docum
ent);\n registerQueue.forEach(scope.register);\n });\n})(window.PointerGestu
res);\n", |
| 181 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This event is fired when a pointer is held down f
or 200ms.\n *\n * @module PointerGestures\n * @submodule Events\n * @class hold\
n */\n/**\n * Milliseconds pointer has been held down.\n * @type Number\n * @pro
perty holdTime\n */\n/**\n * Type of pointer that made the holding event.\n * @t
ype String\n * @property pointerType\n */\n/**\n * This event is fired every 200
ms while a pointer is held down.\n *\n * @class holdpulse\n * @extends hold\n */
\n/**\n * This event is fired when a held pointer is released or moved.\n *\n *
@class released\n */\n/**\n * Type of pointer that made the holding event.\n * @
type String\n * @property pointerType\n */\n\n(function(scope) {\n var dispatch
er = scope.dispatcher;\n var hold = {\n // wait at least HOLD_DELAY ms betwe
en hold and pulse events\n HOLD_DELAY: 200,\n // pointer can move WIGGLE_T
HRESHOLD pixels before not counting as a hold\n WIGGLE_THRESHOLD: 16,\n ev
ents: [\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n '
pointercancel'\n ],\n heldPointer: null,\n holdJob: null,\n pulse: f
unction() {\n var hold = Date.now() - this.heldPointer.timeStamp;\n va
r type = this.held ? 'holdpulse' : 'hold';\n this.fireHold(type, hold);\n
this.held = true;\n },\n cancel: function() {\n clearInterval(thi
s.holdJob);\n if (this.held) {\n this.fireHold('release');\n }\
n this.held = false;\n this.heldPointer = null;\n this.target = n
ull;\n this.holdJob = null;\n },\n pointerdown: function(inEvent) {\n
if (inEvent.isPrimary && !this.heldPointer) {\n this.heldPointer =
inEvent;\n this.target = inEvent.target;\n this.holdJob = setInter
val(this.pulse.bind(this), this.HOLD_DELAY);\n }\n },\n pointerup: fu
nction(inEvent) {\n if (this.heldPointer && this.heldPointer.pointerId ===
inEvent.pointerId) {\n this.cancel();\n }\n },\n pointercancel
: function(inEvent) {\n this.cancel();\n },\n pointermove: function(i
nEvent) {\n if (this.heldPointer && this.heldPointer.pointerId === inEvent.
pointerId) {\n var x = inEvent.clientX - this.heldPointer.clientX;\n
var y = inEvent.clientY - this.heldPointer.clientY;\n if ((x * x + y *
y) > this.WIGGLE_THRESHOLD) {\n this.cancel();\n }\n }\n
},\n fireHold: function(inType, inHoldTime) {\n var p = {\n poi
nterType: this.heldPointer.pointerType\n };\n if (inHoldTime) {\n
p.holdTime = inHoldTime;\n }\n var e = dispatcher.makeEvent(inType,
p);\n dispatcher.dispatchEvent(e, this.target);\n if (e.tapPrevented)
{\n dispatcher.preventTap(this.heldPointer.pointerId);\n }\n }\n
};\n dispatcher.registerRecognizer('hold', hold);\n})(window.PointerGestures)
;\n", |
| 182 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This event denotes the beginning of a series of t
racking events.\n *\n * @module PointerGestures\n * @submodule Events\n * @class
trackstart\n */\n/**\n * Pixels moved in the x direction since trackstart.\n *
@type Number\n * @property dx\n */\n/**\n * Pixes moved in the y direction since
trackstart.\n * @type Number\n * @property dy\n */\n/**\n * Pixels moved in the
x direction since the last track.\n * @type Number\n * @property ddx\n */\n/**\
n * Pixles moved in the y direction since the last track.\n * @type Number\n * @
property ddy\n */\n/**\n * The clientX position of the track gesture.\n * @type
Number\n * @property clientX\n */\n/**\n * The clientY position of the track ges
ture.\n * @type Number\n * @property clientY\n */\n/**\n * The pageX position of
the track gesture.\n * @type Number\n * @property pageX\n */\n/**\n * The pageY
position of the track gesture.\n * @type Number\n * @property pageY\n */\n/**\n
* The screenX position of the track gesture.\n * @type Number\n * @property scr
eenX\n */\n/**\n * The screenY position of the track gesture.\n * @type Number\n
* @property screenY\n */\n/**\n * The last x axis direction of the pointer.\n *
@type Number\n * @property xDirection\n */\n/**\n * The last y axis direction o
f the pointer.\n * @type Number\n * @property yDirection\n */\n/**\n * A shared
object between all tracking events.\n * @type Object\n * @property trackInfo\n *
/\n/**\n * The element currently under the pointer.\n * @type Element\n * @prope
rty relatedTarget\n */\n/**\n * The type of pointer that make the track gesture.
\n * @type String\n * @property pointerType\n */\n/**\n *\n * This event fires f
or all pointer movement being tracked.\n *\n * @class track\n * @extends trackst
art\n */\n/**\n * This event fires when the pointer is no longer being tracked.\
n *\n * @class trackend\n * @extends trackstart\n */\n\n (function(scope) {\n
var dispatcher = scope.dispatcher;\n var pointermap = new scope.PointerMap();\
n var track = {\n events: [\n 'pointerdown',\n 'pointermove',\
n 'pointerup',\n 'pointercancel'\n ],\n WIGGLE_THRESHOLD: 4,
\n clampDir: function(inDelta) {\n return inDelta > 0 ? 1 : -1;\n
},\n calcPositionDelta: function(inA, inB) {\n var x = 0, y = 0;\n
if (inA && inB) {\n x = inB.pageX - inA.pageX;\n y = inB.page
Y - inA.pageY;\n }\n return {x: x, y: y};\n },\n fireTrack:
function(inType, inEvent, inTrackingData) {\n var t = inTrackingData;\n
var d = this.calcPositionDelta(t.downEvent, inEvent);\n var dd = this.
calcPositionDelta(t.lastMoveEvent, inEvent);\n if (dd.x) {\n t.xDi
rection = this.clampDir(dd.x);\n }\n if (dd.y) {\n t.yDirect
ion = this.clampDir(dd.y);\n }\n var trackData = {\n dx: d.x
,\n dy: d.y,\n ddx: dd.x,\n ddy: dd.y,\n clientX
: inEvent.clientX,\n clientY: inEvent.clientY,\n pageX: inEvent.
pageX,\n pageY: inEvent.pageY,\n screenX: inEvent.screenX,\n
screenY: inEvent.screenY,\n xDirection: t.xDirection,\n yDi
rection: t.yDirection,\n trackInfo: t.trackInfo,\n relatedTarget
: inEvent.target,\n pointerType: inEvent.pointerType\n };\n
var e = dispatcher.makeEvent(inType, trackData);\n t.lastMoveEvent = inEve
nt;\n dispatcher.dispatchEvent(e, t.downTarget);\n },\n pointerdow
n: function(inEvent) {\n if (inEvent.isPrimary && (inEvent.pointerType ===
'mouse' ? inEvent.buttons === 1 : true)) {\n var p = {\n down
Event: inEvent,\n downTarget: inEvent.target,\n trackInfo: {
},\n lastMoveEvent: null,\n xDirection: 0,\n yDire
ction: 0,\n tracking: false\n };\n pointermap.set(inEv
ent.pointerId, p);\n }\n },\n pointermove: function(inEvent) {\n
var p = pointermap.get(inEvent.pointerId);\n if (p) {\n if (!
p.tracking) {\n var d = this.calcPositionDelta(p.downEvent, inEvent);\
n var move = d.x * d.x + d.y * d.y;\n // start tracking only
if finger moves more than WIGGLE_THRESHOLD\n if (move > this.WIGGLE_T
HRESHOLD) {\n p.tracking = true;\n this.fireTrack('track
start', p.downEvent, p);\n this.fireTrack('track', inEvent, p);\n
}\n } else {\n this.fireTrack('track', inEvent, p);\n
}\n }\n },\n pointerup: function(inEvent) {\n var p
= pointermap.get(inEvent.pointerId);\n if (p) {\n if (p.tracking)
{\n this.fireTrack('trackend', inEvent, p);\n }\n poin
termap.delete(inEvent.pointerId);\n }\n },\n pointercancel: functi
on(inEvent) {\n this.pointerup(inEvent);\n }\n };\n dispatcher.reg
isterRecognizer('track', track);\n })(window.PointerGestures);\n", |
| 183 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This event denotes a rapid down/move/up sequence
from a pointer.\n *\n * The event is sent to the first element the pointer went
down on.\n *\n * @module PointerGestures\n * @submodule Events\n * @class flick\
n */\n/**\n * Signed velocity of the flick in the x direction.\n * @property xVe
locity\n * @type Number\n */\n/**\n * Signed velocity of the flick in the y dire
ction.\n * @type Number\n * @property yVelocity\n */\n/**\n * Unsigned total vel
ocity of the flick.\n * @type Number\n * @property velocity\n */\n/**\n * Angle
of the flick in degrees, with 0 along the\n * positive x axis.\n * @type Number\
n * @property angle\n */\n/**\n * Axis with the greatest absolute velocity. Deno
ted\n * with 'x' or 'y'.\n * @type String\n * @property majorAxis\n */\n/**\n *
Type of the pointer that made the flick.\n * @type String\n * @property pointerT
ype\n */\n\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var flic
k = {\n // TODO(dfreedman): value should be low enough for low speed flicks,
but\n // high enough to remove accidental flicks\n MIN_VELOCITY: 0.5 /* px
/ms */,\n MAX_QUEUE: 4,\n moveQueue: [],\n target: null,\n pointerId
: null,\n events: [\n 'pointerdown',\n 'pointermove',\n 'point
erup',\n 'pointercancel'\n ],\n pointerdown: function(inEvent) {\n
if (inEvent.isPrimary && !this.pointerId) {\n this.pointerId = inEvent
.pointerId;\n this.target = inEvent.target;\n this.addMove(inEvent
);\n }\n },\n pointermove: function(inEvent) {\n if (inEvent.poi
nterId === this.pointerId) {\n this.addMove(inEvent);\n }\n },\n
pointerup: function(inEvent) {\n if (inEvent.pointerId === this.pointerI
d) {\n this.fireFlick(inEvent);\n }\n this.cleanup();\n },\n
pointercancel: function(inEvent) {\n this.cleanup();\n },\n clean
up: function() {\n this.moveQueue = [];\n this.target = null;\n t
his.pointerId = null;\n },\n addMove: function(inEvent) {\n if (this.
moveQueue.length >= this.MAX_QUEUE) {\n this.moveQueue.shift();\n }\
n this.moveQueue.push(inEvent);\n },\n fireFlick: function(inEvent) {
\n var e = inEvent;\n var l = this.moveQueue.length;\n var dt, dx
, dy, tx, ty, tv, x = 0, y = 0, v = 0;\n // flick based off the fastest seg
ment of movement\n for (var i = 0, m; i < l && (m = this.moveQueue[i]); i++
) {\n dt = e.timeStamp - m.timeStamp;\n dx = e.clientX - m.clientX
, dy = e.clientY - m.clientY;\n tx = dx / dt, ty = dy / dt, tv = Math.sqr
t(tx * tx + ty * ty);\n if (tv > v) {\n x = tx, y = ty, v = tv;\
n }\n }\n var ma = Math.abs(x) > Math.abs(y) ? 'x' : 'y';\n
var a = this.calcAngle(x, y);\n if (Math.abs(v) >= this.MIN_VELOCITY) {\n
var ev = dispatcher.makeEvent('flick', {\n xVelocity: x,\n
yVelocity: y,\n velocity: v,\n angle: a,\n major
Axis: ma,\n pointerType: inEvent.pointerType\n });\n disp
atcher.dispatchEvent(ev, this.target);\n }\n },\n calcAngle: function
(inX, inY) {\n return (Math.atan2(inY, inX) * 180 / Math.PI);\n }\n };\
n dispatcher.registerRecognizer('flick', flick);\n})(window.PointerGestures);\n
", |
| 184 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/*\n * Basic strategy: find the farthest apart points, us
e as diameter of circle\n * react to size change and rotation of the chord\n */\
n\n/**\n * @module PointerGestures\n * @submodule Events\n * @class pinch\n */\n
/**\n * Scale of the pinch zoom gesture\n * @property scale\n * @type Number\n *
/\n/**\n * Center X position of pointers causing pinch\n * @property centerX\n *
@type Number\n */\n/**\n * Center Y position of pointers causing pinch\n * @pro
perty centerY\n * @type Number\n */\n\n/**\n * @module PointerGestures\n * @subm
odule Events\n * @class rotate\n */\n/**\n * Angle (in degrees) of rotation. Mea
sured from starting positions of pointers.\n * @property angle\n * @type Number\
n */\n/**\n * Center X position of pointers causing rotation\n * @property cente
rX\n * @type Number\n */\n/**\n * Center Y position of pointers causing rotation
\n * @property centerY\n * @type Number\n */\n(function(scope) {\n var dispatch
er = scope.dispatcher;\n var pointermap = new scope.PointerMap();\n var RAD_TO
_DEG = 180 / Math.PI;\n var pinch = {\n events: [\n 'pointerdown',\n
'pointermove',\n 'pointerup',\n 'pointercancel'\n ],\n refere
nce: {},\n pointerdown: function(ev) {\n pointermap.set(ev.pointerId, ev
);\n if (pointermap.pointers() == 2) {\n var points = this.calcChord
();\n var angle = this.calcAngle(points);\n this.reference = {\n
angle: angle,\n diameter: points.diameter,\n target: s
cope.findLCA(points.a.target, points.b.target)\n };\n }\n },\n
pointerup: function(ev) {\n pointermap.delete(ev.pointerId);\n },\n
pointermove: function(ev) {\n if (pointermap.has(ev.pointerId)) {\n
pointermap.set(ev.pointerId, ev);\n if (pointermap.pointers() > 1) {\n
this.calcPinchRotate();\n }\n }\n },\n pointercancel: f
unction(ev) {\n this.pointerup(ev);\n },\n dispatchPinch: function(di
ameter, points) {\n var zoom = diameter / this.reference.diameter;\n v
ar ev = dispatcher.makeEvent('pinch', {\n scale: zoom,\n centerX:
points.center.x,\n centerY: points.center.y\n });\n dispatcher.
dispatchEvent(ev, this.reference.target);\n },\n dispatchRotate: function(
angle, points) {\n var diff = Math.round((angle - this.reference.angle) % 3
60);\n var ev = dispatcher.makeEvent('rotate', {\n angle: diff,\n
centerX: points.center.x,\n centerY: points.center.y\n });\n
dispatcher.dispatchEvent(ev, this.reference.target);\n },\n calcPinchRo
tate: function() {\n var points = this.calcChord();\n var diameter = p
oints.diameter;\n var angle = this.calcAngle(points);\n if (diameter !
= this.reference.diameter) {\n this.dispatchPinch(diameter, points);\n
}\n if (angle != this.reference.angle) {\n this.dispatchRotate(an
gle, points);\n }\n },\n calcChord: function() {\n var pointers
= [];\n pointermap.forEach(function(p) {\n pointers.push(p);\n
});\n var dist = 0;\n var points = {};\n var x, y, d;\n for
(var i = 0; i < pointers.length; i++) {\n var a = pointers[i];\n f
or (var j = i + 1; j < pointers.length; j++) {\n var b = pointers[j];\n
x = Math.abs(a.clientX - b.clientX);\n y = Math.abs(a.clientY
- b.clientY);\n d = x + y;\n if (d > dist) {\n dis
t = d;\n points = {a: a, b: b};\n }\n }\n }\n
x = Math.abs(points.a.clientX + points.b.clientX) / 2;\n y = Math.abs(po
ints.a.clientY + points.b.clientY) / 2;\n points.center = { x: x, y: y };\n
points.diameter = dist;\n return points;\n },\n calcAngle: func
tion(points) {\n var x = points.a.clientX - points.b.clientX;\n var y
= points.a.clientY - points.b.clientY;\n return (360 + Math.atan2(y, x) * R
AD_TO_DEG) % 360;\n },\n };\n dispatcher.registerRecognizer('pinch', pinch)
;\n})(window.PointerGestures);\n", |
| 185 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n\n/**\n * This event is fired when a pointer quickly goes d
own and up, and is used to\n * denote activation.\n *\n * Any gesture event can
prevent the tap event from being created by calling\n * `event.preventTap`.\n *\
n * Any pointer event can prevent the tap by setting the `tapPrevented` property
\n * on itself.\n *\n * @module PointerGestures\n * @submodule Events\n * @class
tap\n */\n/**\n * X axis position of the tap.\n * @property x\n * @type Number\
n */\n/**\n * Y axis position of the tap.\n * @property y\n * @type Number\n */\
n/**\n * Type of the pointer that made the tap.\n * @property pointerType\n * @t
ype String\n */\n(function(scope) {\n var dispatcher = scope.dispatcher;\n var
pointermap = new scope.PointerMap();\n var tap = {\n events: [\n 'poin
terdown',\n 'pointermove',\n 'pointerup',\n 'pointercancel',\n
'keyup'\n ],\n pointerdown: function(inEvent) {\n if (inEvent.isPr
imary && !inEvent.tapPrevented) {\n pointermap.set(inEvent.pointerId, {\n
target: inEvent.target,\n x: inEvent.clientX,\n y: i
nEvent.clientY\n });\n }\n },\n pointermove: function(inEvent)
{\n if (inEvent.isPrimary) {\n var start = pointermap.get(inEvent.p
ointerId);\n if (start) {\n if (inEvent.tapPrevented) {\n
pointermap.delete(inEvent.pointerId);\n }\n }\n }\n
},\n pointerup: function(inEvent) {\n var start = pointermap.get(inEven
t.pointerId);\n if (start && !inEvent.tapPrevented) {\n var t = scop
e.findLCA(start.target, inEvent.target);\n if (t) {\n var e = di
spatcher.makeEvent('tap', {\n x: inEvent.clientX,\n y: inE
vent.clientY,\n detail: inEvent.detail,\n pointerType: inE
vent.pointerType\n });\n dispatcher.dispatchEvent(e, t);\n
}\n }\n pointermap.delete(inEvent.pointerId);\n },\n pointer
cancel: function(inEvent) {\n pointermap.delete(inEvent.pointerId);\n },
\n keyup: function(inEvent) {\n var code = inEvent.keyCode;\n // 32
== spacebar\n if (code === 32) {\n var t = inEvent.target;\n
if (!(t instanceof HTMLInputElement || t instanceof HTMLTextAreaElement)) {\n
dispatcher.dispatchEvent(dispatcher.makeEvent('tap', {\n x: 0
,\n y: 0,\n detail: 0,\n pointerType: 'unavaila
ble'\n }), t);\n }\n }\n },\n preventTap: function(in
PointerId) {\n pointermap.delete(inPointerId);\n }\n };\n dispatcher.r
egisterRecognizer('tap', tap);\n})(window.PointerGestures);\n", |
| 186 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve
rsion 2.0 (the \"License\");\n// you may not use this file except in compliance
with the License.\n// You may obtain a copy of the License at\n//\n// http:/
/www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o
r agreed to in writing, software\n// distributed under the License is distribute
d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe
r express or implied.\n// See the License for the specific language governing pe
rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use
strict';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filt
er);\n\n function getTreeScope(node) {\n while (node.parentNode) {\n no
de = node.parentNode;\n }\n\n return typeof node.getElementById === 'funct
ion' ? node : null;\n }\n\n // JScript does not have __proto__. We wrap all ob
ject literals with\n // createObject which uses Object.create, Object.definePro
perty and\n // Object.getOwnPropertyDescriptor to create a new object that does
the exact\n // same thing. The main downside to this solution is that we have
to extract\n // all those property descriptors for IE.\n var createObject = ('
__proto__' in {}) ?\n function(obj) { return obj; } :\n function(obj)
{\n var proto = obj.__proto__;\n if (!proto)\n return obj
;\n var newObject = Object.create(proto);\n Object.getOwnPropertyN
ames(obj).forEach(function(name) {\n Object.defineProperty(newObject, n
ame,\n Object.getOwnPropertyDescriptor(obj, name))
;\n });\n return newObject;\n };\n\n // IE does not support
have Document.prototype.contains.\n if (typeof document.contains != 'function')
{\n Document.prototype.contains = function(node) {\n if (node === this
|| node.parentNode === this)\n return true;\n return this.documentEl
ement.contains(node);\n }\n }\n\n Node.prototype.bind = function(name, obse
rvable) {\n console.error('Unhandled binding to Node: ', this, name, observab
le);\n };\n\n function unbind(node, name) {\n var bindings = node.bindings;
\n if (!bindings) {\n node.bindings = {};\n return;\n }\n\n v
ar binding = bindings[name];\n if (!binding)\n return;\n\n binding.cl
ose();\n bindings[name] = undefined;\n }\n\n Node.prototype.unbind = functi
on(name) {\n unbind(this, name);\n };\n\n Node.prototype.unbindAll = functi
on() {\n if (!this.bindings)\n return;\n var names = Object.keys(this
.bindings);\n for (var i = 0; i < names.length; i++) {\n var binding = t
his.bindings[names[i]];\n if (binding)\n binding.close();\n }\n\n
this.bindings = {};\n };\n\n function sanitizeValue(value) {\n return v
alue == null ? '' : value;\n }\n\n function updateText(node, value) {\n nod
e.data = sanitizeValue(value);\n }\n\n function textBinding(node) {\n retur
n function(value) {\n return updateText(node, value);\n };\n }\n\n Tex
t.prototype.bind = function(name, value, oneTime) {\n if (name !== 'textConte
nt')\n return Node.prototype.bind.call(this, name, value, oneTime);\n\n
if (oneTime)\n return updateText(this, value);\n\n unbind(this, 'textCon
tent');\n updateText(this, value.open(textBinding(this)));\n return this.b
indings.textContent = value;\n }\n\n function updateAttribute(el, name, condit
ional, value) {\n if (conditional) {\n if (value)\n el.setAttribu
te(name, '');\n else\n el.removeAttribute(name);\n return;\n
}\n\n el.setAttribute(name, sanitizeValue(value));\n }\n\n function attrib
uteBinding(el, name, conditional) {\n return function(value) {\n updateA
ttribute(el, name, conditional, value);\n };\n }\n\n Element.prototype.bind
= function(name, value, oneTime) {\n var conditional = name[name.length - 1]
== '?';\n if (conditional) {\n this.removeAttribute(name);\n name
= name.slice(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(th
is, name, conditional, value);\n\n unbind(this, name);\n updateAttribute(t
his, name, conditional,\n value.open(attributeBinding(this, name, conditi
onal)));\n\n return this.bindings[name] = value;\n };\n\n var checkboxEvent
Type;\n (function() {\n // Attempt to feature-detect which event (change or
click) is fired first\n // for checkboxes.\n var div = document.createElem
ent('div');\n var checkbox = div.appendChild(document.createElement('input'))
;\n checkbox.setAttribute('type', 'checkbox');\n var first;\n var count
= 0;\n checkbox.addEventListener('click', function(e) {\n count++;\n
first = first || 'click';\n });\n checkbox.addEventListener('change', f
unction() {\n count++;\n first = first || 'change';\n });\n\n va
r event = document.createEvent('MouseEvent');\n event.initMouseEvent(\"click\
", true, true, window, 0, 0, 0, 0, 0, false,\n false, false, false, 0, nu
ll);\n checkbox.dispatchEvent(event);\n // WebKit/Blink don't fire the cha
nge event if the element is outside the\n // document, so assume 'change' for
that case.\n checkboxEventType = count == 1 ? 'change' : first;\n })();\n\n
function getEventForInputType(element) {\n switch (element.type) {\n c
ase 'checkbox':\n return checkboxEventType;\n case 'radio':\n c
ase 'select-multiple':\n case 'select-one':\n return 'change';\n
default:\n return 'input';\n }\n }\n\n function updateInput(input,
property, value, santizeFn) {\n input[property] = (santizeFn || sanitizeValu
e)(value);\n }\n\n function inputBinding(input, property, santizeFn) {\n re
turn function(value) {\n return updateInput(input, property, value, santize
Fn);\n }\n }\n\n function noop() {}\n\n function bindInputEvent(input, pro
perty, observable, postEventFn) {\n var eventType = getEventForInputType(inpu
t);\n\n function eventHandler() {\n observable.setValue(input[property])
;\n observable.discardChanges();\n (postEventFn || noop)(input);\n
Platform.performMicrotaskCheckpoint();\n }\n input.addEventListener(even
tType, eventHandler);\n\n var capturedClose = observable.close;\n observab
le.close = function() {\n if (!capturedClose)\n return;\n input
.removeEventListener(eventType, eventHandler);\n\n observable.close = captu
redClose;\n observable.close();\n capturedClose = undefined;\n }\n
}\n\n function booleanSanitize(value) {\n return Boolean(value);\n }\n\n
// |element| is assumed to be an HTMLInputElement with |type| == 'radio'.\n //
Returns an array containing all radio buttons other than |element| that\n // ha
ve the same |name|, either in the form that |element| belongs to or,\n // if no
form, in the document tree to which |element| belongs.\n //\n // This impleme
ntation is based upon the HTML spec definition of a\n // \"radio button group\"
:\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/number-sta
te.html#radio-button-group\n //\n function getAssociatedRadioButtons(element)
{\n if (element.form) {\n return filter(element.form.elements, function(
el) {\n return el != element &&\n el.tagName == 'INPUT' &&\n
el.type == 'radio' &&\n el.name == element.name;\n });
\n } else {\n var treeScope = getTreeScope(element);\n if (!treeSco
pe)\n return [];\n var radios = treeScope.querySelectorAll(\n
'input[type=\"radio\"][name=\"' + element.name + '\"]');\n return filter
(radios, function(el) {\n return el != element && !el.form;\n });\n
}\n }\n\n function checkedPostEvent(input) {\n // Only the radio button
that is getting checked gets an event. We\n // therefore find all the associa
ted radio buttons and update their\n // check binding manually.\n if (inpu
t.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAssociated
RadioButtons(input).forEach(function(radio) {\n var checkedBinding = radi
o.bindings.checked;\n if (checkedBinding) {\n // Set the value d
irectly to avoid an infinite call stack.\n checkedBinding.setValue(fals
e);\n }\n });\n }\n }\n\n HTMLInputElement.prototype.bind = fun
ction(name, value, oneTime) {\n if (name !== 'value' && name !== 'checked')\n
return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n\n
this.removeAttribute(name);\n var sanitizeFn = name == 'checked' ? boolean
Sanitize : sanitizeValue;\n var postEventFn = name == 'checked' ? checkedPost
Event : noop;\n\n if (oneTime)\n return updateInput(this, name, value, s
anitizeFn);\n\n unbind(this, name);\n bindInputEvent(this, name, value, po
stEventFn);\n updateInput(this, name,\n value.open(inputBindin
g(this, name, sanitizeFn)),\n sanitizeFn);\n\n return this.bin
dings[name] = value;\n }\n\n HTMLTextAreaElement.prototype.bind = function(nam
e, value, oneTime) {\n if (name !== 'value')\n return HTMLElement.protot
ype.bind.call(this, name, value, oneTime);\n\n this.removeAttribute('value');
\n\n if (oneTime)\n return updateInput(this, 'value', value);\n\n unb
ind(this, 'value');\n bindInputEvent(this, 'value', value);\n updateInput(
this, 'value',\n value.open(inputBinding(this, 'value', sanitizeV
alue)));\n\n return this.bindings.value = value;\n }\n\n function updateOpt
ion(option, value) {\n var parentNode = option.parentNode;;\n var select;\
n var selectBinding;\n var oldValue;\n if (parentNode instanceof HTMLSe
lectElement &&\n parentNode.bindings &&\n parentNode.bindings.valu
e) {\n select = parentNode;\n selectBinding = select.bindings.value;\n
oldValue = select.value;\n }\n\n option.value = sanitizeValue(value)
;\n\n if (select && select.value != oldValue) {\n selectBinding.setValue
(select.value);\n selectBinding.discardChanges();\n Platform.performMi
crotaskCheckpoint();\n }\n }\n\n function optionBinding(option) {\n retu
rn function(value) {\n updateOption(option, value);\n }\n }\n\n HTMLOp
tionElement.prototype.bind = function(name, value, oneTime) {\n if (name !==
'value')\n return HTMLElement.prototype.bind.call(this, name, value, oneTim
e);\n\n this.removeAttribute('value');\n\n if (oneTime)\n return upda
teOption(this, value);\n\n unbind(this, 'value');\n bindInputEvent(this, '
value', value);\n updateOption(this, value.open(optionBinding(this)));\n r
eturn this.bindings.value = value;\n }\n\n HTMLSelectElement.prototype.bind =
function(name, value, oneTime) {\n if (name === 'selectedindex')\n name
= 'selectedIndex';\n\n if (name !== 'selectedIndex' && name !== 'value')\n
return HTMLElement.prototype.bind.call(this, name, value, oneTime);\n\n th
is.removeAttribute(name);\n\n if (oneTime)\n return updateInput(this, na
me, value);\n\n unbind(this, name);\n bindInputEvent(this, name, value);\n
updateInput(this, name,\n value.open(inputBinding(this, name)
));\n return this.bindings[name] = value;\n }\n})(this);\n", |
| 187 "// Copyright 2011 Google Inc.\n//\n// Licensed under the Apache License, Ve
rsion 2.0 (the \"License\");\n// you may not use this file except in compliance
with the License.\n// You may obtain a copy of the License at\n//\n// http:/
/www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o
r agreed to in writing, software\n// distributed under the License is distribute
d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe
r express or implied.\n// See the License for the specific language governing pe
rmissions and\n// limitations under the License.\n\n(function(global) {\n 'use
strict';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertio
n failed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Array.prot
otype.forEach);\n\n function getFragmentRoot(node) {\n var p;\n while (p
= node.parentNode) {\n node = p;\n }\n\n return node;\n }\n\n funct
ion searchRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n va
r selector = '#' + id;\n while (!ref) {\n node = getFragmentRoot(node);\
n\n if (node.protoContent_)\n ref = node.protoContent_.querySelector
(selector);\n else if (node.getElementById)\n ref = node.getElementB
yId(id);\n\n if (ref || !node.templateCreator_)\n break\n\n nod
e = node.templateCreator_;\n }\n\n return ref;\n }\n\n function getInsta
nceRoot(node) {\n while (node.parentNode) {\n node = node.parentNode;\n
}\n return node.templateCreator_ ? node : null;\n }\n\n var Map;\n if (
global.Map && typeof global.Map.prototype.forEach === 'function') {\n Map = g
lobal.Map;\n } else {\n Map = function() {\n this.keys = [];\n thi
s.values = [];\n };\n\n Map.prototype = {\n set: function(key, value)
{\n var index = this.keys.indexOf(key);\n if (index < 0) {\n
this.keys.push(key);\n this.values.push(value);\n } else {\
n this.values[index] = value;\n }\n },\n\n get: functi
on(key) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n
return;\n\n return this.values[index];\n },\n\n delet
e: function(key, value) {\n var index = this.keys.indexOf(key);\n
if (index < 0)\n return false;\n\n this.keys.splice(index, 1);\n
this.values.splice(index, 1);\n return true;\n },\n\n f
orEach: function(f, opt_this) {\n for (var i = 0; i < this.keys.length; i
++)\n f.call(opt_this || this, this.values[i], this.keys[i], this);\n
}\n };\n }\n\n // JScript does not have __proto__. We wrap all object l
iterals with\n // createObject which uses Object.create, Object.defineProperty
and\n // Object.getOwnPropertyDescriptor to create a new object that does the e
xact\n // same thing. The main downside to this solution is that we have to ext
ract\n // all those property descriptors for IE.\n var createObject = ('__prot
o__' in {}) ?\n function(obj) { return obj; } :\n function(obj) {\n
var proto = obj.__proto__;\n if (!proto)\n return obj;\n
var newObject = Object.create(proto);\n Object.getOwnPropertyNames(o
bj).forEach(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n
});\n return newObject;\n };\n\n // IE does not support have D
ocument.prototype.contains.\n if (typeof document.contains != 'function') {\n
Document.prototype.contains = function(node) {\n if (node === this || nod
e.parentNode === this)\n return true;\n return this.documentElement.
contains(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repeat';\n
var IF = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\
n 'repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semantic
TemplateElements = {\n 'THEAD': true,\n 'TBODY': true,\n 'TFOOT': true,
\n 'TH': true,\n 'TR': true,\n 'TD': true,\n 'COLGROUP': true,\n
'COL': true,\n 'CAPTION': true,\n 'OPTION': true,\n 'OPTGROUP': true\n
};\n\n var hasTemplateElement = typeof HTMLTemplateElement !== 'undefined';\n\
n var allTemplatesSelectors = 'template, ' +\n Object.keys(semanticTemplat
eElements).map(function(tagName) {\n return tagName.toLowerCase() + '[tem
plate]';\n }).join(', ');\n\n function isSVGTemplate(el) {\n return el.
tagName == 'template' &&\n el.namespaceURI == 'http://www.w3.org/2000/
svg';\n }\n\n function isHTMLTemplate(el) {\n return el.tagName == 'TEMPLAT
E' &&\n el.namespaceURI == 'http://www.w3.org/1999/xhtml';\n }\n\n f
unction isAttributeTemplate(el) {\n return Boolean(semanticTemplateElements[e
l.tagName] &&\n el.hasAttribute('template'));\n }\n\n functi
on isTemplate(el) {\n if (el.isTemplate_ === undefined)\n el.isTemplate_
= el.tagName == 'TEMPLATE' || isAttributeTemplate(el);\n\n return el.isTempl
ate_;\n }\n\n // FIXME: Observe templates being added/removed from documents\n
// FIXME: Expose imperative API to decorate and observe templates in\n // \"d
isconnected tress\" (e.g. ShadowRoot)\n document.addEventListener('DOMContentLo
aded', function(e) {\n bootstrapTemplatesRecursivelyFrom(document);\n // F
IXME: Is this needed? Seems like it shouldn't be.\n Platform.performMicrotask
Checkpoint();\n }, false);\n\n function forAllTemplatesFrom(node, fn) {\n v
ar subTemplates = node.querySelectorAll(allTemplatesSelectors);\n\n if (isTem
plate(node))\n fn(node)\n forEach(subTemplates, fn);\n }\n\n function
bootstrapTemplatesRecursivelyFrom(node) {\n function bootstrap(template) {\n
if (!HTMLTemplateElement.decorate(template))\n bootstrapTemplatesRec
ursivelyFrom(template.content);\n }\n\n forAllTemplatesFrom(node, bootstra
p);\n }\n\n if (!hasTemplateElement) {\n /**\n * This represents a <tem
plate> element.\n * @constructor\n * @extends {HTMLElement}\n */\n
global.HTMLTemplateElement = function() {\n throw TypeError('Illegal cons
tructor');\n };\n }\n\n var hasProto = '__proto__' in {};\n\n function mix
in(to, from) {\n Object.getOwnPropertyNames(from).forEach(function(name) {\n
Object.defineProperty(to, name,\n Object.getOwnP
ropertyDescriptor(from, name));\n });\n }\n\n // http://dvcs.w3.org/hg/webc
omponents/raw-file/tip/spec/templates/index.html#dfn-template-contents-owner\n
function getOrCreateTemplateContentsOwner(template) {\n var doc = template.ow
nerDocument\n if (!doc.defaultView)\n return doc;\n var d = doc.templ
ateContentsOwner_;\n if (!d) {\n // TODO(arv): This should either be a D
ocument or HTMLDocument depending\n // on doc.\n d = doc.implementatio
n.createHTMLDocument('');\n while (d.lastChild) {\n d.removeChild(d.
lastChild);\n }\n doc.templateContentsOwner_ = d;\n }\n return d
;\n }\n\n function getTemplateStagingDocument(template) {\n if (!template.s
tagingDocument_) {\n var owner = template.ownerDocument;\n if (!owner.
stagingDocument_) {\n owner.stagingDocument_ = owner.implementation.creat
eHTMLDocument('');\n owner.stagingDocument_.stagingDocument_ = owner.stag
ingDocument_;\n }\n\n template.stagingDocument_ = owner.stagingDocumen
t_;\n }\n\n return template.stagingDocument_;\n }\n\n // For non-templat
e browsers, the parser will disallow <template> in certain\n // locations, so w
e allow \"attribute templates\" which combine the template\n // element with th
e top-level container node of the content, e.g.\n //\n // <tr template repea
t=\"{{ foo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n /
/ <template repeat=\"{{ foo }}\">\n // + #document-fragment\n // + <tr
class=\"bar\">\n // + <td>Bar</td>\n //\n function extractTemplateFrom
AttributeTemplate(el) {\n var template = el.ownerDocument.createElement('temp
late');\n el.parentNode.insertBefore(template, el);\n\n var attribs = el.a
ttributes;\n var count = attribs.length;\n while (count-- > 0) {\n va
r attrib = attribs[count];\n if (templateAttributeDirectives[attrib.name])
{\n if (attrib.name !== 'template')\n template.setAttribute(attr
ib.name, attrib.value);\n el.removeAttribute(attrib.name);\n }\n
}\n\n return template;\n }\n\n function extractTemplateFromSVGTemplate(el)
{\n var template = el.ownerDocument.createElement('template');\n el.parent
Node.insertBefore(template, el);\n\n var attribs = el.attributes;\n var co
unt = attribs.length;\n while (count-- > 0) {\n var attrib = attribs[cou
nt];\n template.setAttribute(attrib.name, attrib.value);\n el.removeAt
tribute(attrib.name);\n }\n\n el.parentNode.removeChild(el);\n return t
emplate;\n }\n\n function liftNonNativeTemplateChildrenIntoContent(template, e
l, useRoot) {\n var content = template.content;\n if (useRoot) {\n co
ntent.appendChild(el);\n return;\n }\n\n var child;\n while (child
= el.firstChild) {\n content.appendChild(child);\n }\n }\n\n /**\n
* Ensures proper API and content model for template elements.\n * @param {HTML
TemplateElement} opt_instanceRef The template element which\n * |el| templ
ate element will return as the value of its ref(), and whose\n * content w
ill be used as source when createInstance() is invoked.\n */\n HTMLTemplateEl
ement.decorate = function(el, opt_instanceRef) {\n if (el.templateIsDecorated
_)\n return false;\n\n var templateElement = el;\n templateElement.te
mplateIsDecorated_ = true;\n\n var isNativeHTMLTemplate = isHTMLTemplate(temp
lateElement) &&\n hasTemplateElement;\n var boo
tstrapContents = isNativeHTMLTemplate;\n var liftContents = !isNativeHTMLTemp
late;\n var liftRoot = false;\n\n if (!isNativeHTMLTemplate) {\n if (
isAttributeTemplate(templateElement)) {\n assert(!opt_instanceRef);\n
templateElement = extractTemplateFromAttributeTemplate(el);\n templat
eElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = hasTemplat
eElement;\n liftRoot = true;\n } else if (isSVGTemplate(templateElem
ent)) {\n templateElement = extractTemplateFromSVGTemplate(el);\n
templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = has
TemplateElement;\n }\n }\n\n if (!isNativeHTMLTemplate) {\n fixT
emplateElementPrototype(templateElement);\n var doc = getOrCreateTemplateCo
ntentsOwner(templateElement);\n templateElement.content_ = doc.createDocume
ntFragment();\n }\n\n if (opt_instanceRef) {\n // template is contain
ed within an instance, its direct content must be\n // empty\n templat
eElement.instanceRef_ = opt_instanceRef;\n } else if (liftContents) {\n
liftNonNativeTemplateChildrenIntoContent(templateElement,\n
el,\n li
ftRoot);\n } else if (bootstrapContents) {\n bootstrapTemplatesRecursive
lyFrom(templateElement.content);\n }\n\n return true;\n };\n\n // TODO(r
afaelw): This used to decorate recursively all templates from a given\n // node
. This happens by default on 'DOMContentLoaded', but may be needed\n // in subt
rees not descendent from document (e.g. ShadowRoot).\n // Review whether this i
s the right public API.\n HTMLTemplateElement.bootstrap = bootstrapTemplatesRec
ursivelyFrom;\n\n var htmlElement = global.HTMLUnknownElement || HTMLElement;\n
\n var contentDescriptor = {\n get: function() {\n return this.content_
;\n },\n enumerable: true,\n configurable: true\n };\n\n if (!hasTemp
lateElement) {\n // Gecko is more picky with the prototype than WebKit. Make
sure to use the\n // same prototype as created in the constructor.\n HTMLT
emplateElement.prototype = Object.create(htmlElement.prototype);\n\n Object.d
efineProperty(HTMLTemplateElement.prototype, 'content',\n
contentDescriptor);\n }\n\n function fixTemplateElementPrototype(el) {\n
if (hasProto)\n el.__proto__ = HTMLTemplateElement.prototype;\n else\n
mixin(el, HTMLTemplateElement.prototype);\n }\n\n function ensureSetModel
Scheduled(template) {\n if (!template.setModelFn_) {\n template.setModel
Fn_ = function() {\n template.setModelFnScheduled_ = false;\n var
map = getBindings(template,\n template.delegate_ && template.delegate
_.prepareBinding);\n processBindings(template, map, template.model_);\n
};\n }\n\n if (!template.setModelFnScheduled_) {\n template.setMo
delFnScheduled_ = true;\n Observer.runEOM_(template.setModelFn_);\n }\n
}\n\n mixin(HTMLTemplateElement.prototype, {\n processBindingDirectives_: f
unction(directives) {\n if (this.iterator_)\n this.iterator_.closeDe
ps();\n\n if (!directives.if && !directives.bind && !directives.repeat) {\n
if (this.iterator_) {\n this.iterator_.close();\n this
.iterator_ = undefined;\n this.bindings.iterator = undefined;\n
}\n\n return;\n }\n\n if (!this.iterator_) {\n this.iter
ator_ = new TemplateIterator(this);\n this.bindings = this.bindings || {}
;\n this.bindings.iterator = this.iterator_;\n }\n\n this.itera
tor_.updateDependencies(directives, this.model_);\n return this.iterator_;\
n },\n\n createInstance: function(model, bindingDelegate, delegate_,\n
instanceBindings_) {\n if (bindingDelegate)\n
delegate_ = this.newDelegate_(bindingDelegate);\n\n var content = this.r
ef.content;\n var map = this.bindingMap_;\n if (!map || map.content !=
= content) {\n // TODO(rafaelw): Setup a MutationObserver on content to d
etect\n // when the instanceMap is invalid.\n map = createInstance
BindingMap(content,\n delegate_ && delegate_.prepareBinding) || [];\n
map.content = content;\n this.bindingMap_ = map;\n }\n\n
var stagingDocument = getTemplateStagingDocument(this);\n var instance =
stagingDocument.createDocumentFragment();\n instance.templateCreator_ = thi
s;\n instance.protoContent_ = content;\n\n var instanceRecord = {\n
firstNode: null,\n lastNode: null,\n model: model\n };\n
\n var i = 0;\n for (var child = content.firstChild; child; child = ch
ild.nextSibling) {\n var clone = cloneAndBindInstance(child, instance, st
agingDocument,\n map.children[i++],\n
model,\n
delegate_,\n instanceBindings_);\
n clone.templateInstance_ = instanceRecord;\n }\n\n instanceRec
ord.firstNode = instance.firstChild;\n instanceRecord.lastNode = instance.l
astChild;\n instance.templateCreator_ = undefined;\n instance.protoCon
tent_ = undefined;\n return instance;\n },\n\n get model() {\n r
eturn this.model_;\n },\n\n set model(model) {\n this.model_ = model;
\n ensureSetModelScheduled(this);\n },\n\n get bindingDelegate() {\n
return this.delegate_ && this.delegate_.raw;\n },\n\n setDelegate_: f
unction(delegate) {\n this.delegate_ = delegate;\n this.bindingMap_ =
undefined;\n if (this.iterator_) {\n this.iterator_.instancePosition
ChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = undefined;\n
}\n },\n\n newDelegate_: function(bindingDelegate) {\n if (!bind
ingDelegate)\n return {};\n\n function delegateFn(name) {\n v
ar fn = bindingDelegate && bindingDelegate[name];\n if (typeof fn != 'fun
ction')\n return;\n\n return function() {\n return fn.a
pply(bindingDelegate, arguments);\n };\n }\n\n return {\n
raw: bindingDelegate,\n prepareBinding: delegateFn('prepareBinding'),\n
prepareInstanceModel: delegateFn('prepareInstanceModel'),\n prepa
reInstancePositionChanged:\n delegateFn('prepareInstancePositionChang
ed')\n };\n },\n\n // TODO(rafaelw): Assigning .bindingDelegate alway
s succeeds. It may\n // make sense to issue a warning or even throw if the te
mplate is already\n // \"activated\", since this would be a strange thing to
do.\n set bindingDelegate(bindingDelegate) {\n this.setDelegate_(this.ne
wDelegate_(bindingDelegate));\n },\n\n get ref() {\n var ref = search
RefId(this, this.getAttribute('ref'));\n if (!ref)\n ref = this.inst
anceRef_;\n\n if (!ref)\n return this;\n\n var nextRef = ref.re
f;\n return nextRef ? nextRef : ref;\n }\n });\n\n // Returns\n //
a) undefined if there are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELE
GATE_FN, TEXT)+] if there is at least one mustache.\n function parseMustaches(s
, name, node, prepareBindingFn) {\n if (!s || !s.length)\n return;\n\n
var tokens;\n var length = s.length;\n var startIndex = 0, lastIndex = 0
, endIndex = 0;\n var onlyOneTime = true;\n while (lastIndex < length) {\n
var startIndex = s.indexOf('{{', lastIndex);\n var oneTimeStart = s.i
ndexOf('[[', lastIndex);\n var oneTime = false;\n var terminator = '}}
';\n\n if (oneTimeStart >= 0 &&\n (startIndex < 0 || oneTimeStart
< startIndex)) {\n startIndex = oneTimeStart;\n oneTime = true;\n
terminator = ']]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.i
ndexOf(terminator, startIndex + 2);\n\n if (endIndex < 0) {\n if (!t
okens)\n return;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n
break;\n }\n\n tokens = tokens || [];\n tokens.push(s.slic
e(lastIndex, startIndex)); // TEXT\n var pathString = s.slice(startIndex +
2, endIndex).trim();\n tokens.push(oneTime); // ONE_TIME?\n onlyOneTim
e = onlyOneTime && oneTime;\n tokens.push(Path.get(pathString)); // PATH\n
var delegateFn = prepareBindingFn &&\n prepareBinding
Fn(pathString, name, node);\n tokens.push(delegateFn); // DELEGATE_FN\n
lastIndex = endIndex + 2;\n }\n\n if (lastIndex === length)\n token
s.push(''); // TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.
isSimplePath = tokens.hasOnePath &&\n tokens[0] == '' &
&\n tokens[4] == '';\n tokens.onlyOneTime = onlyOneT
ime;\n\n tokens.combinator = function(values) {\n var newValue = tokens[
0];\n\n for (var i = 1; i < tokens.length; i += 4) {\n var value = t
okens.hasOnePath ? values : values[(i - 1) / 4];\n if (value !== undefine
d)\n newValue += value;\n newValue += tokens[i + 3];\n }\n\
n return newValue;\n }\n\n return tokens;\n };\n\n function process
OneTimeBinding(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n
var delegateFn = tokens[3];\n var value = delegateFn ? delegateFn(model, n
ode, true) :\n tokens[2].getValueFrom(model);\n
return tokens.isSimplePath ? value : tokens.combinator(value);\n }\n\n
var values = [];\n for (var i = 1; i < tokens.length; i += 4) {\n var de
legateFn = tokens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(m
odel, node) :\n tokens[i + 1].getValueFrom(model);\n }\n\n return
tokens.combinator(values);\n }\n\n function processSinglePathBinding(name, to
kens, node, model) {\n var delegateFn = tokens[3];\n var observer = delega
teFn ? delegateFn(model, node, false) :\n new PathObserver(model, tokens[
2]);\n\n return tokens.isSimplePath ? observer :\n new ObserverTransfo
rm(observer, tokens.combinator);\n }\n\n function processBinding(name, tokens,
node, model) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding
(name, tokens, node, model);\n\n if (tokens.hasOnePath)\n return process
SinglePathBinding(name, tokens, node, model);\n\n var observer = new Compound
Observer();\n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTi
me = tokens[i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn)
{\n var value = delegateFn(model, node, oneTime);\n if (oneTime)\n
observer.addPath(value)\n else\n observer.addObserver(
value);\n continue;\n }\n\n var path = tokens[i + 1];\n if
(oneTime)\n observer.addPath(path.getValueFrom(model))\n else\n
observer.addPath(model, path);\n }\n\n return new ObserverTransform(ob
server, tokens.combinator);\n }\n\n function processBindings(node, bindings, m
odel, instanceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n
var name = bindings[i]\n var tokens = bindings[i + 1];\n var valu
e = processBinding(name, tokens, node, model);\n var binding = node.bind(na
me, value, tokens.onlyOneTime);\n if (binding && instanceBindings)\n
instanceBindings.push(binding);\n }\n\n if (!bindings.isTemplate)\n
return;\n\n node.model_ = model;\n var iter = node.processBindingDirective
s_(bindings);\n if (instanceBindings && iter)\n instanceBindings.push(it
er);\n }\n\n function parseWithDefault(el, name, prepareBindingFn) {\n var
v = el.getAttribute(name);\n return parseMustaches(v == '' ? '{{}}' : v, name
, el, prepareBindingFn);\n }\n\n function parseAttributeBindings(element, prep
areBindingFn) {\n assert(element);\n\n var bindings = [];\n var ifFound
= false;\n var bindFound = false;\n\n for (var i = 0; i < element.attribu
tes.length; i++) {\n var attr = element.attributes[i];\n var name = at
tr.name;\n var value = attr.value;\n\n // Allow bindings expressed in
attributes to be prefixed with underbars.\n // We do this to allow correct
semantics for browsers that don't implement\n // <template> where certain a
ttributes might trigger side-effects -- and\n // for IE which sanitizes cer
tain attributes, disallowing mustache\n // replacements in their text.\n
while (name[0] === '_') {\n name = name.substring(1);\n }\n\n
if (isTemplate(element) &&\n (name === IF || name === BIND || name ==
= REPEAT)) {\n continue;\n }\n\n var tokens = parseMustaches(va
lue, name, element,\n prepareBindingFn);\n
if (!tokens)\n continue;\n\n bindings.push(name, tokens);\n }\n\
n if (isTemplate(element)) {\n bindings.isTemplate = true;\n bindin
gs.if = parseWithDefault(element, IF, prepareBindingFn);\n bindings.bind =
parseWithDefault(element, BIND, prepareBindingFn);\n bindings.repeat = pars
eWithDefault(element, REPEAT, prepareBindingFn);\n\n if (bindings.if && !bi
ndings.bind && !bindings.repeat)\n bindings.bind = parseMustaches('{{}}',
BIND, element, prepareBindingFn);\n }\n\n return bindings;\n }\n\n func
tion getBindings(node, prepareBindingFn) {\n if (node.nodeType === Node.ELEME
NT_NODE)\n return parseAttributeBindings(node, prepareBindingFn);\n\n if
(node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMustaches(node.da
ta, 'textContent', node,\n prepareBindingFn);\n
if (tokens)\n return ['textContent', tokens];\n }\n\n return
[];\n }\n\n function cloneAndBindInstance(node, parent, stagingDocument, bindi
ngs, model,\n delegate,\n
instanceBindings,\n instanceRecord) {\n
var clone = parent.appendChild(stagingDocument.importNode(node, false));\n\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSib
ling) {\n cloneAndBindInstance(child, clone, stagingDocument,\n
bindings.children[i++],\n model,\n
delegate,\n instanceBindings
);\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateElement.decorate(
clone, node);\n if (delegate)\n clone.setDelegate_(delegate);\n }
\n\n processBindings(clone, bindings, model, instanceBindings);\n return c
lone;\n }\n\n function createInstanceBindingMap(node, prepareBindingFn) {\n
var map = getBindings(node, prepareBindingFn);\n map.children = {};\n var
index = 0;\n for (var child = node.firstChild; child; child = child.nextSibl
ing) {\n map.children[index++] = createInstanceBindingMap(child, prepareBin
dingFn);\n }\n\n return map;\n }\n\n Object.defineProperty(Node.prototyp
e, 'templateInstance', {\n get: function() {\n var instance = this.templ
ateInstance_;\n return instance ? instance :\n (this.parentNode ?
this.parentNode.templateInstance : undefined);\n }\n });\n\n function Templ
ateIterator(templateElement) {\n this.closed = false;\n this.templateEleme
nt_ = templateElement;\n\n // Flattened array of tuples:\n // <instanceT
erminatorNode, [bindingsSetupByInstance]>\n this.terminators = [];\n\n thi
s.deps = undefined;\n this.iteratedValue = [];\n this.presentValue = undef
ined;\n this.arrayObserver = undefined;\n }\n\n TemplateIterator.prototype
= {\n closeDeps: function() {\n var deps = this.deps;\n if (deps) {
\n if (deps.ifOneTime === false)\n deps.ifValue.close();\n
if (deps.oneTime === false)\n deps.value.close();\n }\n },\n\
n updateDependencies: function(directives, model) {\n this.closeDeps();\
n\n var deps = this.deps = {};\n var template = this.templateElement_;
\n\n if (directives.if) {\n deps.hasIf = true;\n deps.ifOneTi
me = directives.if.onlyOneTime;\n deps.ifValue = processBinding(IF, direc
tives.if, template, model);\n\n // oneTime if & predicate is false. nothi
ng else to do.\n if (deps.ifOneTime && !deps.ifValue) {\n this.u
pdateIteratedValue();\n return;\n }\n\n if (!deps.ifOneTi
me)\n deps.ifValue.open(this.updateIteratedValue, this);\n }\n\n
if (directives.repeat) {\n deps.repeat = true;\n deps.oneTime
= directives.repeat.onlyOneTime;\n deps.value = processBinding(REPEAT, di
rectives.repeat, template, model);\n } else {\n deps.repeat = false;
\n deps.oneTime = directives.bind.onlyOneTime;\n deps.value = proc
essBinding(BIND, directives.bind, template, model);\n }\n\n if (!deps.
oneTime)\n deps.value.open(this.updateIteratedValue, this);\n\n this
.updateIteratedValue();\n },\n\n updateIteratedValue: function() {\n
if (this.deps.hasIf) {\n var ifValue = this.deps.ifValue;\n if (!t
his.deps.ifOneTime)\n ifValue = ifValue.discardChanges();\n if (
!ifValue) {\n this.valueChanged();\n return;\n }\n
}\n\n var value = this.deps.value;\n if (!this.deps.oneTime)\n
value = value.discardChanges();\n if (!this.deps.repeat)\n value =
[value];\n var observe = this.deps.repeat &&\n !this.dep
s.oneTime &&\n Array.isArray(value);\n this.valueChanged
(value, observe);\n },\n\n valueChanged: function(value, observeValue) {\n
if (!Array.isArray(value))\n value = [];\n\n if (value === thi
s.iteratedValue)\n return;\n\n this.unobserve();\n this.present
Value = value;\n if (observeValue) {\n this.arrayObserver = new Arra
yObserver(this.presentValue);\n this.arrayObserver.open(this.handleSplice
s, this);\n }\n\n this.handleSplices(ArrayObserver.calculateSplices(th
is.presentValue,\n this.i
teratedValue));\n },\n\n getTerminatorAt: function(index) {\n if (ind
ex == -1)\n return this.templateElement_;\n var terminator = this.te
rminators[index*2];\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n
this.templateElement_ === terminator) {\n return terminator;\n
}\n\n var subIterator = terminator.iterator_;\n if (!subIterator)\n
return terminator;\n\n return subIterator.getTerminatorAt(subIterato
r.terminators.length/2 - 1);\n },\n\n // TODO(rafaelw): If we inserting se
quences of instances we can probably\n // avoid lots of calls to getTerminato
rAt(), or cache its result.\n insertInstanceAt: function(index, fragment, ins
tanceNodes,\n instanceBindings) {\n var previ
ousTerminator = this.getTerminatorAt(index - 1);\n var terminator = previou
sTerminator;\n if (fragment)\n terminator = fragment.lastChild || te
rminator;\n else if (instanceNodes)\n terminator = instanceNodes[ins
tanceNodes.length - 1] || terminator;\n\n this.terminators.splice(index*2,
0, terminator, instanceBindings);\n var parent = this.templateElement_.pare
ntNode;\n var insertBeforeNode = previousTerminator.nextSibling;\n\n i
f (fragment) {\n parent.insertBefore(fragment, insertBeforeNode);\n
} else if (instanceNodes) {\n for (var i = 0; i < instanceNodes.length; i
++)\n parent.insertBefore(instanceNodes[i], insertBeforeNode);\n }
\n },\n\n extractInstanceAt: function(index) {\n var instanceNodes =
[];\n var previousTerminator = this.getTerminatorAt(index - 1);\n var
terminator = this.getTerminatorAt(index);\n instanceNodes.instanceBindings
= this.terminators[index*2 + 1];\n this.terminators.splice(index*2, 2);\n\n
var parent = this.templateElement_.parentNode;\n while (terminator !=
= previousTerminator) {\n var node = previousTerminator.nextSibling;\n
if (node == terminator)\n terminator = previousTerminator;\n\n
parent.removeChild(node);\n instanceNodes.push(node);\n }\n\n
return instanceNodes;\n },\n\n getDelegateFn: function(fn) {\n fn
= fn && fn(this.templateElement_);\n return typeof fn === 'function' ? fn :
null;\n },\n\n handleSplices: function(splices) {\n if (this.closed
|| !splices.length)\n return;\n\n var template = this.templateElemen
t_;\n\n if (!template.parentNode) {\n this.close();\n return;
\n }\n\n ArrayObserver.applySplices(this.iteratedValue, this.presentVa
lue,\n splices);\n\n var delegate = templat
e.delegate_;\n if (this.instanceModelFn_ === undefined) {\n this.ins
tanceModelFn_ =\n this.getDelegateFn(delegate && delegate.prepareInst
anceModel);\n }\n\n if (this.instancePositionChangedFn_ === undefined)
{\n this.instancePositionChangedFn_ =\n this.getDelegateFn(de
legate &&\n delegate.prepareInstancePositionChange
d);\n }\n\n var instanceCache = new Map;\n var removeDelta = 0;\n
splices.forEach(function(splice) {\n splice.removed.forEach(functio
n(model) {\n var instanceNodes =\n this.extractInstanceAt(
splice.index + removeDelta);\n instanceCache.set(model, instanceNodes);
\n }, this);\n\n removeDelta -= splice.addedCount;\n }, this)
;\n\n splices.forEach(function(splice) {\n var addIndex = splice.ind
ex;\n for (; addIndex < splice.index + splice.addedCount; addIndex++) {\n
var model = this.iteratedValue[addIndex];\n var fragment = un
defined;\n var instanceNodes = instanceCache.get(model);\n var
instanceBindings;\n if (instanceNodes) {\n instanceCache.de
lete(model);\n instanceBindings = instanceNodes.instanceBindings;\n
} else {\n instanceBindings = [];\n if (this.insta
nceModelFn_)\n model = this.instanceModelFn_(model);\n\n
if (model !== undefined) {\n fragment = template.createInstance(mo
del, undefined, delegate,\n inst
anceBindings);\n }\n }\n\n this.insertInstanceAt(ad
dIndex, fragment, instanceNodes,\n instanceBindin
gs);\n }\n }, this);\n\n instanceCache.forEach(function(instanc
eNodes) {\n this.closeInstanceBindings(instanceNodes.instanceBindings);\n
}, this);\n\n if (this.instancePositionChangedFn_)\n this.repo
rtInstancesMoved(splices);\n },\n\n reportInstanceMoved: function(index) {
\n var previousTerminator = this.getTerminatorAt(index - 1);\n var ter
minator = this.getTerminatorAt(index);\n if (previousTerminator === termina
tor)\n return; // instance has zero nodes.\n\n // We must use the fi
rst node of the instance, because any subsequent\n // nodes may have been g
enerated by sub-templates.\n // TODO(rafaelw): This is brittle WRT instance
mutation -- e.g. if the\n // first node was removed by script.\n var
templateInstance = previousTerminator.nextSibling.templateInstance;\n this.
instancePositionChangedFn_(templateInstance, index);\n },\n\n reportInstan
cesMoved: function(splices) {\n var index = 0;\n var offset = 0;\n
for (var i = 0; i < splices.length; i++) {\n var splice = splices[i];\n
if (offset != 0) {\n while (index < splice.index) {\n
this.reportInstanceMoved(index);\n index++;\n }\n }
else {\n index = splice.index;\n }\n\n while (index < sp
lice.index + splice.addedCount) {\n this.reportInstanceMoved(index);\n
index++;\n }\n\n offset += splice.addedCount - splice.rem
oved.length;\n }\n\n if (offset == 0)\n return;\n\n var le
ngth = this.terminators.length / 2;\n while (index < length) {\n thi
s.reportInstanceMoved(index);\n index++;\n }\n },\n\n closeIns
tanceBindings: function(instanceBindings) {\n for (var i = 0; i < instanceB
indings.length; i++) {\n instanceBindings[i].close();\n }\n },\n\
n unobserve: function() {\n if (!this.arrayObserver)\n return;\n\
n this.arrayObserver.close();\n this.arrayObserver = undefined;\n }
,\n\n close: function() {\n if (this.closed)\n return;\n thi
s.unobserve();\n for (var i = 1; i < this.terminators.length; i += 2) {\n
this.closeInstanceBindings(this.terminators[i]);\n }\n\n this.te
rminators.length = 0;\n this.closeDeps();\n this.templateElement_.iter
ator_ = undefined;\n this.closed = true;\n }\n };\n\n // Polyfill-spec
ific API.\n HTMLTemplateElement.forAllTemplatesFrom_ = forAllTemplatesFrom;\n})
(this);\n", |
| 188 "/*\n Copyright (C) 2013 Ariya Hidayat <ariya.hidayat@gmail.com>\n Copyrig
ht (C) 2013 Thaddee Tyl <thaddee.tyl@gmail.com>\n Copyright (C) 2012 Ariya Hida
yat <ariya.hidayat@gmail.com>\n Copyright (C) 2012 Mathias Bynens <mathias@qiwi
.be>\n Copyright (C) 2012 Joost-Wim Boekesteijn <joost-wim@boekesteijn.nl>\n C
opyright (C) 2012 Kris Kowal <kris.kowal@cixar.com>\n Copyright (C) 2012 Yusuke
Suzuki <utatane.tea@gmail.com>\n Copyright (C) 2012 Arpad Borsos <arpad.borsos
@googlemail.com>\n Copyright (C) 2011 Ariya Hidayat <ariya.hidayat@gmail.com>\n
\n Redistribution and use in source and binary forms, with or without\n modifi
cation, are permitted provided that the following conditions are met:\n\n * R
edistributions of source code must retain the above copyright\n notice, thi
s list of conditions and the following disclaimer.\n * Redistributions in bin
ary form must reproduce the above copyright\n notice, this list of conditio
ns and the following disclaimer in the\n documentation and/or other materia
ls provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIG
HT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT
HOLDER> BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBST
ITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPT
ION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRI
CT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH D
AMAGE.\n*/\n\n(function (global) {\n 'use strict';\n\n var Token,\n
TokenName,\n Syntax,\n Messages,\n source,\n index,
\n length,\n delegate,\n lookahead,\n state;\n\n
Token = {\n BooleanLiteral: 1,\n EOF: 2,\n Identifier: 3,\n
Keyword: 4,\n NullLiteral: 5,\n NumericLiteral: 6,\n
Punctuator: 7,\n StringLiteral: 8\n };\n\n TokenName = {};\n T
okenName[Token.BooleanLiteral] = 'Boolean';\n TokenName[Token.EOF] = '<end>';
\n TokenName[Token.Identifier] = 'Identifier';\n TokenName[Token.Keyword]
= 'Keyword';\n TokenName[Token.NullLiteral] = 'Null';\n TokenName[Token.Nu
mericLiteral] = 'Numeric';\n TokenName[Token.Punctuator] = 'Punctuator';\n
TokenName[Token.StringLiteral] = 'String';\n\n Syntax = {\n ArrayExpr
ession: 'ArrayExpression',\n BinaryExpression: 'BinaryExpression',\n
CallExpression: 'CallExpression',\n ConditionalExpression: 'Conditiona
lExpression',\n EmptyStatement: 'EmptyStatement',\n ExpressionStat
ement: 'ExpressionStatement',\n Identifier: 'Identifier',\n Litera
l: 'Literal',\n LabeledStatement: 'LabeledStatement',\n LogicalExp
ression: 'LogicalExpression',\n MemberExpression: 'MemberExpression',\n
ObjectExpression: 'ObjectExpression',\n Program: 'Program',\n
Property: 'Property',\n ThisExpression: 'ThisExpression',\n Unar
yExpression: 'UnaryExpression'\n };\n\n // Error messages should be identi
cal to V8.\n Messages = {\n UnexpectedToken: 'Unexpected token %0',\n
UnknownLabel: 'Undefined label \\'%0\\'',\n Redeclaration: '%0 \\
'%1\\' has already been declared'\n };\n\n // Ensure the condition is true
, otherwise throw an error.\n // This is only to have a better contract seman
tic, i.e. another safety net\n // to catch a logic error. The condition shall
be fulfilled in normal case.\n // Do NOT use this to enforce a certain condi
tion on any user input.\n\n function assert(condition, message) {\n if
(!condition) {\n throw new Error('ASSERT: ' + message);\n }\n
}\n\n function isDecimalDigit(ch) {\n return (ch >= 48 && ch <= 57
); // 0..9\n }\n\n\n // 7.2 White Space\n\n function isWhiteSpace(ch)
{\n return (ch === 32) || // space\n (ch === 9) || // t
ab\n (ch === 0xB) ||\n (ch === 0xC) ||\n (ch ==
= 0xA0) ||\n (ch >= 0x1680 && '\\u1680\\u180E\\u2000\\u2001\\u2002\\u
2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\uFEF
F'.indexOf(String.fromCharCode(ch)) > 0);\n }\n\n // 7.3 Line Terminators\
n\n function isLineTerminator(ch) {\n return (ch === 10) || (ch === 13
) || (ch === 0x2028) || (ch === 0x2029);\n }\n\n // 7.6 Identifier Names a
nd Identifiers\n\n function isIdentifierStart(ch) {\n return (ch === 3
6) || (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 &&
ch <= 90) || // A..Z\n (ch >= 97 && ch <= 122); //
a..z\n }\n\n function isIdentifierPart(ch) {\n return (ch === 36) |
| (ch === 95) || // $ (dollar) and _ (underscore)\n (ch >= 65 && ch
<= 90) || // A..Z\n (ch >= 97 && ch <= 122) || // a..z
\n (ch >= 48 && ch <= 57); // 0..9\n }\n\n // 7.6.1.1
Keywords\n\n function isKeyword(id) {\n return (id === 'this')\n }
\n\n // 7.4 Comments\n\n function skipWhitespace() {\n while (index
< length && isWhiteSpace(source.charCodeAt(index))) {\n ++index;\n
}\n }\n\n function getIdentifier() {\n var start, ch;\n\n
start = index++;\n while (index < length) {\n ch = source.c
harCodeAt(index);\n if (isIdentifierPart(ch)) {\n ++in
dex;\n } else {\n break;\n }\n }\n\n
return source.slice(start, index);\n }\n\n function scanIdentifier
() {\n var start, id, type;\n\n start = index;\n\n id = get
Identifier();\n\n // There is no keyword or literal with only one charact
er.\n // Thus, it must be an identifier.\n if (id.length === 1) {\
n type = Token.Identifier;\n } else if (isKeyword(id)) {\n
type = Token.Keyword;\n } else if (id === 'null') {\n
type = Token.NullLiteral;\n } else if (id === 'true' || id === 'false') {
\n type = Token.BooleanLiteral;\n } else {\n type =
Token.Identifier;\n }\n\n return {\n type: type,\n
value: id,\n range: [start, index]\n };\n }\n\n\n
// 7.7 Punctuators\n\n function scanPunctuator() {\n var start = ind
ex,\n code = source.charCodeAt(index),\n code2,\n
ch1 = source[index],\n ch2;\n\n switch (code) {\n\n
// Check for most common single-character punctuators.\n case 46: // .
dot\n case 40: // ( open bracket\n case 41: // ) close bracket
\n case 59: // ; semicolon\n case 44: // , comma\n case
123: // { open curly brace\n case 125: // } close curly brace\n
case 91: // [\n case 93: // ]\n case 58: // :\n case
63: // ?\n ++index;\n return {\n type: T
oken.Punctuator,\n value: String.fromCharCode(code),\n
range: [start, index]\n };\n\n default:\n code
2 = source.charCodeAt(index + 1);\n\n // '=' (char #61) marks an assi
gnment or comparison operator.\n if (code2 === 61) {\n
switch (code) {\n case 37: // %\n case 38: // &
\n case 42: // *:\n case 43: // +\n
case 45: // -\n case 47: // /\n case 60: //
<\n case 62: // >\n case 124: // |\n
index += 2;\n return {\n type:
Token.Punctuator,\n value: String.fromCharCode(code) + St
ring.fromCharCode(code2),\n range: [start, index]\n
};\n\n case 33: // !\n case 61: // =
\n index += 2;\n\n // !== and ===\n
if (source.charCodeAt(index) === 61) {\n ++i
ndex;\n }\n return {\n
type: Token.Punctuator,\n value: source.slice(start,
index),\n range: [start, index]\n };\n
default:\n break;\n }\n
}\n break;\n }\n\n // Peek more characters.\n\n
ch2 = source[index + 1];\n\n // Other 2-character punctuators: && ||
\n\n if (ch1 === ch2 && ('&|'.indexOf(ch1) >= 0)) {\n index +=
2;\n return {\n type: Token.Punctuator,\n
value: ch1 + ch2,\n range: [start, index]\n };\n
}\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;
\n return {\n type: Token.Punctuator,\n
value: ch1,\n range: [start, index]\n };\n }\n
\n throwError({}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n\n //
7.8.3 Numeric Literals\n function scanNumericLiteral() {\n var number,
start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.cha
rCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a dec
imal digit or a decimal point');\n\n start = index;\n number = '';
\n if (ch !== '.') {\n number = source[index++];\n
ch = source[index];\n\n // Hex number starts with '0x'.\n
// Octal number starts with '0'.\n if (number === '0') {\n
// decimal number starts with '0' such as '09' is illegal.\n
if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({
}, Messages.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n
while (isDecimalDigit(source.charCodeAt(index))) {\n nu
mber += source[index++];\n }\n ch = source[index];\n
}\n\n if (ch === '.') {\n number += source[index++];\n
while (isDecimalDigit(source.charCodeAt(index))) {\n number
+= source[index++];\n }\n ch = source[index];\n }\
n\n if (ch === 'e' || ch === 'E') {\n number += source[index++
];\n\n ch = source[index];\n if (ch === '+' || ch === '-')
{\n number += source[index++];\n }\n if (i
sDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigi
t(source.charCodeAt(index))) {\n number += source[index++];\n
}\n } else {\n throwError({}, Messages
.UnexpectedToken, 'ILLEGAL');\n }\n }\n\n if (isIdentif
ierStart(source.charCodeAt(index))) {\n throwError({}, Messages.Unexp
ectedToken, 'ILLEGAL');\n }\n\n return {\n type: Token.
NumericLiteral,\n value: parseFloat(number),\n range: [sta
rt, index]\n };\n }\n\n // 7.8.4 String Literals\n\n function sc
anStringLiteral() {\n var str = '', quote, start, ch, octal = false;\n\n
quote = source[index];\n assert((quote === '\\'' || quote === '\"'
),\n 'String literal must starts with a quote');\n\n start = i
ndex;\n ++index;\n\n while (index < length) {\n ch = so
urce[index++];\n\n if (ch === quote) {\n quote = '';\n
break;\n } else if (ch === '\\\\') {\n
ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCode
At(0))) {\n switch (ch) {\n case 'n':\n
str += '\\n';\n break;\n
case 'r':\n str += '\\r';\n
break;\n case 't':\n str += '\\t';\n
break;\n case 'b':\n
str += '\\b';\n break;\n case '
f':\n str += '\\f';\n break;\n
case 'v':\n str += '\\x0B';\n
break;\n\n default:\n str
+= ch;\n break;\n }\n }
else {\n if (ch === '\\r' && source[index] === '\\n') {\n
++index;\n }\n }\n
} else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n
} else {\n str += ch;\n }\n }\n\n
if (quote !== '') {\n throwError({}, Messages.UnexpectedToken,
'ILLEGAL');\n }\n\n return {\n type: Token.StringLitera
l,\n value: str,\n octal: octal,\n range: [star
t, index]\n };\n }\n\n function isIdentifierName(token) {\n
return token.type === Token.Identifier ||\n token.type === Token.Keyw
ord ||\n token.type === Token.BooleanLiteral ||\n token.ty
pe === Token.NullLiteral;\n }\n\n function advance() {\n var ch;\n\
n skipWhitespace();\n\n if (index >= length) {\n return
{\n type: Token.EOF,\n range: [index, index]\n
};\n }\n\n ch = source.charCodeAt(index);\n\n // V
ery common: ( and ) and ;\n if (ch === 40 || ch === 41 || ch === 58) {\n
return scanPunctuator();\n }\n\n // String literal star
ts with single quote (#39) or double quote (#34).\n if (ch === 39 || ch =
== 34) {\n return scanStringLiteral();\n }\n\n if (isId
entifierStart(ch)) {\n return scanIdentifier();\n }\n\n
// Dot (.) char #46 can also start a floating-point number, hence the need\n
// to check the next character.\n if (ch === 46) {\n if (
isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNume
ricLiteral();\n }\n return scanPunctuator();\n }\n\
n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n
}\n\n return scanPunctuator();\n }\n\n function lex() {\n
var token;\n\n token = lookahead;\n index = token.range[1];\n\
n lookahead = advance();\n\n index = token.range[1];\n\n re
turn token;\n }\n\n function peek() {\n var pos;\n\n pos = i
ndex;\n lookahead = advance();\n index = pos;\n }\n\n // Thr
ow an exception\n\n function throwError(token, messageFormat) {\n var
error,\n args = Array.prototype.slice.call(arguments, 2),\n
msg = messageFormat.replace(\n /%(\\d)/g,\n func
tion (whole, index) {\n assert(index < args.length, 'Message
reference must be in range');\n return args[index];\n
}\n );\n\n error = new Error(msg);\n error.inde
x = index;\n error.description = msg;\n throw error;\n }\n\n
// Throw an exception because of the token.\n\n function throwUnexpected(tok
en) {\n throwError(token, Messages.UnexpectedToken, token.value);\n }\
n\n // Expect the next token to match the specified punctuator.\n // If no
t, an exception will be thrown.\n\n function expect(value) {\n var tok
en = lex();\n if (token.type !== Token.Punctuator || token.value !== valu
e) {\n throwUnexpected(token);\n }\n }\n\n // Return tru
e if the next token matches the specified punctuator.\n\n function match(valu
e) {\n return lookahead.type === Token.Punctuator && lookahead.value ===
value;\n }\n\n // Return true if the next token matches the specified keyw
ord\n\n function matchKeyword(keyword) {\n return lookahead.type === T
oken.Keyword && lookahead.value === keyword;\n }\n\n function consumeSemic
olon() {\n // Catch the very common case first: immediately a semicolon (
char #59).\n if (source.charCodeAt(index) === 59) {\n lex();\n
return;\n }\n\n skipWhitespace();\n\n if (match
(';')) {\n lex();\n return;\n }\n\n if (look
ahead.type !== Token.EOF && !match('}')) {\n throwUnexpected(lookahea
d);\n }\n }\n\n // 11.1.4 Array Initialiser\n\n function parseAr
rayInitialiser() {\n var elements = [];\n\n expect('[');\n\n
while (!match(']')) {\n if (match(',')) {\n lex();\n
elements.push(null);\n } else {\n elem
ents.push(parseExpression());\n\n if (!match(']')) {\n
expect(',');\n }\n }\n }\n\n ex
pect(']');\n\n return delegate.createArrayExpression(elements);\n }\n\
n // 11.1.5 Object Initialiser\n\n function parseObjectPropertyKey() {\n
var token;\n\n skipWhitespace();\n token = lex();\n\n
// Note: This function is called only from parseObjectProperty(), where\n
// EOF and Punctuator tokens are already filtered out.\n if (token.type
=== Token.StringLiteral || token.type === Token.NumericLiteral) {\n
return delegate.createLiteral(token);\n }\n\n return delegate.crea
teIdentifier(token.value);\n }\n\n function parseObjectProperty() {\n
var token, key;\n\n token = lookahead;\n skipWhitespace();\n\n
if (token.type === Token.EOF || token.type === Token.Punctuator) {\n
throwUnexpected(token);\n }\n\n key = parseObjectPropertyKe
y();\n expect(':');\n return delegate.createProperty('init', key,
parseExpression());\n }\n\n function parseObjectInitialiser() {\n v
ar properties = [];\n\n expect('{');\n\n while (!match('}')) {\n
properties.push(parseObjectProperty());\n\n if (!match('}')
) {\n expect(',');\n }\n }\n\n expect('}
');\n\n return delegate.createObjectExpression(properties);\n }\n\n
// 11.1.6 The Grouping Operator\n\n function parseGroupExpression() {\n
var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n
expect(')');\n\n return expr;\n }\n\n\n // 11.1 Primary Expres
sions\n\n function parsePrimaryExpression() {\n var type, token, expr;
\n\n if (match('(')) {\n return parseGroupExpression();\n
}\n\n type = lookahead.type;\n\n if (type === Token.Identifier)
{\n expr = delegate.createIdentifier(lex().value);\n } else i
f (type === Token.StringLiteral || type === Token.NumericLiteral) {\n
expr = delegate.createLiteral(lex());\n } else if (type === Token.Keywor
d) {\n if (matchKeyword('this')) {\n lex();\n
expr = delegate.createThisExpression();\n }\n } else if
(type === Token.BooleanLiteral) {\n token = lex();\n toke
n.value = (token.value === 'true');\n expr = delegate.createLiteral(t
oken);\n } else if (type === Token.NullLiteral) {\n token = le
x();\n token.value = null;\n expr = delegate.createLiteral
(token);\n } else if (match('[')) {\n expr = parseArrayInitial
iser();\n } else if (match('{')) {\n expr = parseObjectInitial
iser();\n }\n\n if (expr) {\n return expr;\n }\n
\n throwUnexpected(lex());\n }\n\n // 11.2 Left-Hand-Side Expressio
ns\n\n function parseArguments() {\n var args = [];\n\n expect(
'(');\n\n if (!match(')')) {\n while (index < length) {\n
args.push(parseExpression());\n if (match(')')) {\n
break;\n }\n expect(',');\n
}\n }\n\n expect(')');\n\n return args;\n }\n\n
function parseNonComputedProperty() {\n var token;\n\n token = le
x();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(tok
en);\n }\n\n return delegate.createIdentifier(token.value);\n }
\n\n function parseNonComputedMember() {\n expect('.');\n\n ret
urn parseNonComputedProperty();\n }\n\n function parseComputedMember() {\n
var expr;\n\n expect('[');\n\n expr = parseExpression();\n
\n expect(']');\n\n return expr;\n }\n\n function parseLeftH
andSideExpression() {\n var expr, property;\n\n expr = parsePrimar
yExpression();\n\n while (match('.') || match('[')) {\n if (ma
tch('[')) {\n property = parseComputedMember();\n
expr = delegate.createMemberExpression('[', expr, property);\n } else
{\n property = parseNonComputedMember();\n expr =
delegate.createMemberExpression('.', expr, property);\n }\n }
\n\n return expr;\n }\n\n // 11.3 Postfix Expressions\n\n var pa
rsePostfixExpression = parseLeftHandSideExpression;\n\n // 11.4 Unary Operato
rs\n\n function parseUnaryExpression() {\n var token, expr;\n\n
if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) {\
n expr = parsePostfixExpression();\n } else if (match('+') ||
match('-') || match('!')) {\n token = lex();\n expr = pars
eUnaryExpression();\n expr = delegate.createUnaryExpression(token.val
ue, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') ||
matchKeyword('typeof')) {\n throwError({}, Messages.UnexpectedToken)
;\n } else {\n expr = parsePostfixExpression();\n }\n\n
return expr;\n }\n\n function binaryPrecedence(token) {\n v
ar prec = 0;\n\n if (token.type !== Token.Punctuator && token.type !== To
ken.Keyword) {\n return 0;\n }\n\n switch (token.value)
{\n case '||':\n prec = 1;\n break;\n\n cas
e '&&':\n prec = 2;\n break;\n\n case '==':\n
case '!=':\n case '===':\n case '!==':\n prec = 6;\n
break;\n\n case '<':\n case '>':\n case '<=':\n
case '>=':\n case 'instanceof':\n prec = 7;\n
break;\n\n case 'in':\n prec = 7;\n break;\n\n
case '+':\n case '-':\n prec = 9;\n break;\n\n
case '*':\n case '/':\n case '%':\n prec = 11;\
n break;\n\n default:\n break;\n }\n\n
return prec;\n }\n\n // 11.5 Multiplicative Operators\n // 11.6 Addit
ive Operators\n // 11.7 Bitwise Shift Operators\n // 11.8 Relational Opera
tors\n // 11.9 Equality Operators\n // 11.10 Binary Bitwise Operators\n
// 11.11 Binary Logical Operators\n\n function parseBinaryExpression() {\n
var expr, token, prec, stack, right, operator, left, i;\n\n left =
parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrec
edence(token);\n if (prec === 0) {\n return left;\n }\n
token.prec = prec;\n lex();\n\n right = parseUnaryExpressi
on();\n\n stack = [left, token, right];\n\n while ((prec = binaryP
recedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression
from the three topmost entries.\n while ((stack.length > 2) && (prec
<= stack[stack.length - 2].prec)) {\n right = stack.pop();\n
operator = stack.pop().value;\n left = stack.pop();\n
expr = delegate.createBinaryExpression(operator, left, right);\n
stack.push(expr);\n }\n\n // Shift.\n
token = lex();\n token.prec = prec;\n stack.push(tok
en);\n expr = parseUnaryExpression();\n stack.push(expr);\
n }\n\n // Final reduce to clean-up the stack.\n i = stack.
length - 1;\n expr = stack[i];\n while (i > 1) {\n expr
= delegate.createBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n
i -= 2;\n }\n\n return expr;\n }\n\n\n // 11.12 Con
ditional Operator\n\n function parseConditionalExpression() {\n var ex
pr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n
if (match('?')) {\n lex();\n consequent = parseConditiona
lExpression();\n expect(':');\n alternate = parseCondition
alExpression();\n\n expr = delegate.createConditionalExpression(expr,
consequent, alternate);\n }\n\n return expr;\n }\n\n // Sim
plification since we do not support AssignmentExpression.\n var parseExpressi
on = parseConditionalExpression;\n\n // Polymer Syntax extensions\n\n // F
ilter ::\n // Identifier\n // Identifier \"(\" \")\"\n // Identif
ier \"(\" FilterArguments \")\"\n\n function parseFilter() {\n var ide
ntifier, args;\n\n identifier = lex();\n\n if (identifier.type !==
Token.Identifier) {\n throwUnexpected(identifier);\n }\n\n
args = match('(') ? parseArguments() : [];\n\n return delegate.creat
eFilter(identifier.value, args);\n }\n\n // Filters ::\n // \"|\" Fil
ter\n // Filters \"|\" Filter\n\n function parseFilters() {\n whi
le (match('|')) {\n lex();\n parseFilter();\n }\n
}\n\n // TopLevel ::\n // LabelledExpressions\n // AsExpression\n
// InExpression\n // FilterExpression\n\n // AsExpression ::\n
// FilterExpression as Identifier\n\n // InExpression ::\n // Identifi
er, Identifier in FilterExpression\n // Identifier in FilterExpression\n\n
// FilterExpression ::\n // Expression\n // Expression Filters\n\n
function parseTopLevel() {\n skipWhitespace();\n peek();\n\n
var expr = parseExpression();\n if (expr) {\n if (lookahe
ad.value === ',' || lookahead.value == 'in' &&\n expr.type
=== Syntax.Identifier) {\n parseInExpression(expr);\n
} else {\n parseFilters();\n if (lookahead.value
=== 'as') {\n parseAsExpression(expr);\n } els
e {\n delegate.createTopLevel(expr);\n }\n
}\n }\n\n if (lookahead.type !== Token.EOF) {\n
throwUnexpected(lookahead);\n }\n }\n\n function parseAsExpression
(expr) {\n lex(); // as\n var identifier = lex().value;\n
delegate.createAsExpression(expr, identifier);\n }\n\n function parseInExp
ression(identifier) {\n var indexName;\n if (lookahead.value === '
,') {\n lex();\n if (lookahead.type !== Token.Identifier)\
n throwUnexpected(lookahead);\n indexName = lex().valu
e;\n }\n\n lex(); // in\n var expr = parseExpression();\n
parseFilters();\n delegate.createInExpression(identifier.name, ind
exName, expr);\n }\n\n function parse(code, inDelegate) {\n delegat
e = inDelegate;\n source = code;\n index = 0;\n length = so
urce.length;\n lookahead = null;\n state = {\n labelSet
: {}\n };\n\n return parseTopLevel();\n }\n\n global.esprima
= {\n parse: parse\n };\n})(this);\n", |
| 189 "// Copyright 2013 Google Inc.\n//\n// Licensed under the Apache License, Ve
rsion 2.0 (the \"License\");\n// you may not use this file except in compliance
with the License.\n// You may obtain a copy of the License at\n//\n// http:/
/www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law o
r agreed to in writing, software\n// distributed under the License is distribute
d on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe
r express or implied.\n// See the License for the specific language governing pe
rmissions and\n// limitations under the License.\n\n(function (global) {\n 'use
strict';\n\n // JScript does not have __proto__. We wrap all object literals w
ith\n // createObject which uses Object.create, Object.defineProperty and\n //
Object.getOwnPropertyDescriptor to create a new object that does the exact\n /
/ same thing. The main downside to this solution is that we have to extract\n /
/ all those property descriptors for IE.\n var createObject = ('__proto__' in {
}) ?\n function(obj) { return obj; } :\n function(obj) {\n var
proto = obj.__proto__;\n if (!proto)\n return obj;\n var
newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).forEa
ch(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n });\
n return newObject;\n };\n\n function prepareBinding(expressionText
, name, node, filterRegistry) {\n var expression;\n try {\n expressio
n = getExpression(expressionText);\n if (expression.scopeIdent &&\n
(node.nodeType !== Node.ELEMENT_NODE ||\n node.tagName !== 'TEMPLATE
' ||\n (name !== 'bind' && name !== 'repeat'))) {\n throw Error
('as and in can only be used within <template bind/repeat>');\n }\n } ca
tch (ex) {\n console.error('Invalid expression syntax: ' + expressionText,
ex);\n return;\n }\n\n return function(model, node, oneTime) {\n
var binding = expression.getBinding(model, filterRegistry, oneTime);\n if
(expression.scopeIdent && binding) {\n node.polymerExpressionScopeIdent_
= expression.scopeIdent;\n if (expression.indexIdent)\n node.pol
ymerExpressionIndexIdent_ = expression.indexIdent;\n }\n\n return bind
ing;\n }\n }\n\n // TODO(rafaelw): Implement simple LRU.\n var expressionP
arseCache = Object.create(null);\n\n function getExpression(expressionText) {\n
var expression = expressionParseCache[expressionText];\n if (!expression)
{\n var delegate = new ASTDelegate();\n esprima.parse(expressionText,
delegate);\n expression = new Expression(delegate);\n expressionParse
Cache[expressionText] = expression;\n }\n return expression;\n }\n\n fun
ction Literal(value) {\n this.value = value;\n this.valueFn_ = undefined;\
n }\n\n Literal.prototype = {\n valueFn: function() {\n if (!this.valu
eFn_) {\n var value = this.value;\n this.valueFn_ = function() {\n
return value;\n }\n }\n\n return this.valueFn_;\n
}\n }\n\n function IdentPath(name) {\n this.name = name;\n this.path = P
ath.get(name);\n }\n\n IdentPath.prototype = {\n valueFn: function() {\n
if (!this.valueFn_) {\n var name = this.name;\n var path = this
.path;\n this.valueFn_ = function(model, observer) {\n if (obser
ver)\n observer.addPath(model, path);\n\n return path.getVal
ueFrom(model);\n }\n }\n\n return this.valueFn_;\n },\n\n
setValue: function(model, newValue) {\n return this.path.setValueFrom(mode
l, newValue);\n }\n };\n\n function MemberExpression(object, property, acce
ssor) {\n // convert literal computed property access where literal value is
a value\n // path to ident dot-access.\n if (accessor == '[' &&\n p
roperty instanceof Literal &&\n Path.get(property.value).valid) {\n
accessor = '.';\n property = new IdentPath(property.value);\n }\n\n t
his.dynamicDeps = typeof object == 'function' || object.dynamic;\n\n this.dyn
amic = typeof property == 'function' ||\n property.dynamic ||\
n accessor == '[';\n\n this.simplePath =\n !this.dyn
amic &&\n !this.dynamicDeps &&\n property instanceof IdentPath &&\
n (object instanceof MemberExpression || object instanceof IdentPath);\n\
n this.object = this.simplePath ? object : getFn(object);\n this.property
= accessor == '.' ? property : getFn(property);\n }\n\n MemberExpression.proto
type = {\n get fullPath() {\n if (!this.fullPath_) {\n var last =
this.object instanceof IdentPath ?\n this.object.name : this.object.
fullPath;\n this.fullPath_ = Path.get(last + '.' + this.property.name);\n
}\n\n return this.fullPath_;\n },\n\n valueFn: function() {\n
if (!this.valueFn_) {\n var object = this.object;\n\n if (this
.simplePath) {\n var path = this.fullPath;\n\n this.valueFn_ =
function(model, observer) {\n if (observer)\n observer.
addPath(model, path);\n\n return path.getValueFrom(model);\n
};\n } else if (this.property instanceof IdentPath) {\n var pat
h = Path.get(this.property.name);\n\n this.valueFn_ = function(model, o
bserver) {\n var context = object(model, observer);\n\n if
(observer)\n observer.addPath(context, path);\n\n retur
n path.getValueFrom(context);\n }\n } else {\n // Compu
ted property.\n var property = this.property;\n\n this.valueFn
_ = function(model, observer) {\n var context = object(model, observe
r);\n var propName = property(model, observer);\n if (obse
rver)\n observer.addPath(context, propName);\n\n return
context ? context[propName] : undefined;\n };\n }\n }\n
return this.valueFn_;\n },\n\n setValue: function(model, newValue) {\n
if (this.simplePath) {\n this.fullPath.setValueFrom(model, newValue);
\n return newValue;\n }\n\n var object = this.object(model);\n
var propName = this.property instanceof IdentPath ? this.property.name :\n
this.property(model);\n return object[propName] = newValue;\n }
\n };\n\n function Filter(name, args) {\n this.name = name;\n this.args
= [];\n for (var i = 0; i < args.length; i++) {\n this.args[i] = getFn(a
rgs[i]);\n }\n }\n\n Filter.prototype = {\n transform: function(value, t
oModelDirection, filterRegistry, model,\n observer) {\n
var fn = filterRegistry[this.name];\n var context = model;\n if (f
n) {\n context = undefined;\n } else {\n fn = context[this.na
me];\n if (!fn) {\n console.error('Cannot find filter: ' + this.
name);\n return;\n }\n }\n\n // If toModelDirection is
falsey, then the \"normal\" (dom-bound) direction\n // is used. Otherwise,
it looks for a 'toModel' property function on the\n // object.\n if (
toModelDirection) {\n fn = fn.toModel;\n } else if (typeof fn.toDOM
== 'function') {\n fn = fn.toDOM;\n }\n\n if (typeof fn != 'fun
ction') {\n console.error('No ' + (toModelDirection ? 'toModel' : 'toDOM'
) +\n ' found on' + this.name);\n return;\n }\n
\n var args = [value];\n for (var i = 0; i < this.args.length; i++) {\
n args[i + 1] = getFn(this.args[i])(model, observer);\n }\n\n r
eturn fn.apply(context, args);\n }\n };\n\n function notImplemented() { thr
ow Error('Not Implemented'); }\n\n var unaryOperators = {\n '+': function(v)
{ return +v; },\n '-': function(v) { return -v; },\n '!': function(v) { r
eturn !v; }\n };\n\n var binaryOperators = {\n '+': function(l, r) { return
l+r; },\n '-': function(l, r) { return l-r; },\n '*': function(l, r) { re
turn l*r; },\n '/': function(l, r) { return l/r; },\n '%': function(l, r)
{ return l%r; },\n '<': function(l, r) { return l<r; },\n '>': function(l,
r) { return l>r; },\n '<=': function(l, r) { return l<=r; },\n '>=': func
tion(l, r) { return l>=r; },\n '==': function(l, r) { return l==r; },\n '!
=': function(l, r) { return l!=r; },\n '===': function(l, r) { return l===r;
},\n '!==': function(l, r) { return l!==r; },\n '&&': function(l, r) { ret
urn l&&r; },\n '||': function(l, r) { return l||r; },\n };\n\n function get
Fn(arg) {\n return typeof arg == 'function' ? arg : arg.valueFn();\n }\n\n
function ASTDelegate() {\n this.expression = null;\n this.filters = [];\n
this.deps = {};\n this.currentPath = undefined;\n this.scopeIdent = und
efined;\n this.indexIdent = undefined;\n this.dynamicDeps = false;\n }\n\
n ASTDelegate.prototype = {\n createUnaryExpression: function(op, argument)
{\n if (!unaryOperators[op])\n throw Error('Disallowed operator: ' +
op);\n\n argument = getFn(argument);\n\n return function(model, obser
ver) {\n return unaryOperators[op](argument(model, observer));\n };\
n },\n\n createBinaryExpression: function(op, left, right) {\n if (!b
inaryOperators[op])\n throw Error('Disallowed operator: ' + op);\n\n
left = getFn(left);\n right = getFn(right);\n\n return function(model
, observer) {\n return binaryOperators[op](left(model, observer),\n
right(model, observer));\n };\n },\n\n c
reateConditionalExpression: function(test, consequent, alternate) {\n test
= getFn(test);\n consequent = getFn(consequent);\n alternate = getFn(a
lternate);\n\n return function(model, observer) {\n return test(mode
l, observer) ?\n consequent(model, observer) : alternate(model, obser
ver);\n }\n },\n\n createIdentifier: function(name) {\n var iden
t = new IdentPath(name);\n ident.type = 'Identifier';\n return ident;\
n },\n\n createMemberExpression: function(accessor, object, property) {\n
var ex = new MemberExpression(object, property, accessor);\n if (ex.dy
namicDeps)\n this.dynamicDeps = true;\n return ex;\n },\n\n cr
eateLiteral: function(token) {\n return new Literal(token.value);\n },\n
\n createArrayExpression: function(elements) {\n for (var i = 0; i < ele
ments.length; i++)\n elements[i] = getFn(elements[i]);\n\n return fu
nction(model, observer) {\n var arr = []\n for (var i = 0; i < ele
ments.length; i++)\n arr.push(elements[i](model, observer));\n r
eturn arr;\n }\n },\n\n createProperty: function(kind, key, value) {\
n return {\n key: key instanceof IdentPath ? key.name : key.value,\n
value: value\n };\n },\n\n createObjectExpression: function(p
roperties) {\n for (var i = 0; i < properties.length; i++)\n propert
ies[i].value = getFn(properties[i].value);\n\n return function(model, obser
ver) {\n var obj = {};\n for (var i = 0; i < properties.length; i+
+)\n obj[properties[i].key] = properties[i].value(model, observer);\n
return obj;\n }\n },\n\n createFilter: function(name, args) {\n
this.filters.push(new Filter(name, args));\n },\n\n createAsExpressi
on: function(expression, scopeIdent) {\n this.expression = expression;\n
this.scopeIdent = scopeIdent;\n },\n\n createInExpression: function(sco
peIdent, indexIdent, expression) {\n this.expression = expression;\n t
his.scopeIdent = scopeIdent;\n this.indexIdent = indexIdent;\n },\n\n
createTopLevel: function(expression) {\n this.expression = expression;\n
},\n\n createThisExpression: notImplemented\n }\n\n function ConstantObse
rvable(value) {\n this.value_ = value;\n }\n\n ConstantObservable.prototype
= {\n open: function() { return this.value_; },\n discardChanges: functio
n() { return this.value_; },\n deliver: function() {},\n close: function()
{},\n }\n\n function Expression(delegate) {\n this.scopeIdent = delegate.s
copeIdent;\n this.indexIdent = delegate.indexIdent;\n\n if (!delegate.expr
ession)\n throw Error('No expression found.');\n\n this.expression = del
egate.expression;\n getFn(this.expression); // forces enumeration of path dep
endencies\n\n this.filters = delegate.filters;\n this.dynamicDeps = delega
te.dynamicDeps;\n }\n\n Expression.prototype = {\n getBinding: function(mod
el, filterRegistry, oneTime) {\n if (oneTime)\n return this.getValue
(model, undefined, filterRegistry);\n\n var observer = new CompoundObserver
();\n this.getValue(model, observer, filterRegistry); // captures deps.\n
var self = this;\n\n function valueFn() {\n if (self.dynamicDep
s)\n observer.startReset();\n\n var value = self.getValue(model,
\n self.dynamicDeps ? observer : undefined,\n
filterRegistry);\n if (self.dynamicDeps)\
n observer.finishReset();\n\n return value;\n }\n\n fu
nction setValueFn(newValue) {\n self.setValue(model, newValue, filterRegi
stry);\n return newValue;\n }\n\n return new ObserverTransform(
observer, valueFn, setValueFn, true);\n },\n\n getValue: function(model, o
bserver, filterRegistry) {\n var value = getFn(this.expression)(model, obse
rver);\n for (var i = 0; i < this.filters.length; i++) {\n value = t
his.filters[i].transform(value, false, filterRegistry, model,\n
observer);\n }\n\n return value;\n },\n\n
setValue: function(model, newValue, filterRegistry) {\n var count = this
.filters ? this.filters.length : 0;\n while (count-- > 0) {\n newVal
ue = this.filters[count].transform(newValue, true, filterRegistry,\n
model);\n }\n\n if (this.expressi
on.setValue)\n return this.expression.setValue(model, newValue);\n }\n
}\n\n /**\n * Converts a style property name to a css property name. For ex
ample:\n * \"WebkitUserSelect\" to \"-webkit-user-select\"\n */\n function
convertStylePropertyName(name) {\n return String(name).replace(/[A-Z]/g, func
tion(c) {\n return '-' + c.toLowerCase();\n });\n }\n\n function isEve
ntHandler(name) {\n return name[0] === 'o' &&\n name[1] === 'n' &&\
n name[2] === '-';\n }\n\n var mixedCaseEventTypes = {};\n [\n '
webkitAnimationStart',\n 'webkitAnimationEnd',\n 'webkitTransitionEnd',\n
'DOMFocusOut',\n 'DOMFocusIn',\n 'DOMMouseScroll'\n ].forEach(function
(e) {\n mixedCaseEventTypes[e.toLowerCase()] = e;\n });\n\n function prepar
eEventBinding(path, name) {\n var eventType = name.substring(3);\n eventTy
pe = mixedCaseEventTypes[eventType] || eventType;\n\n return function(model,
node, oneTime) {\n var fn = path.getValueFrom(model);\n\n function han
dler(e) {\n if (!oneTime)\n fn = path.getValueFrom(model);\n\n
fn.apply(model, [e, e.detail, e.currentTarget]);\n\n if (Platform &
& typeof Platform.flush == 'function')\n Platform.flush();\n }\n\n
node.addEventListener(eventType, handler);\n\n if (oneTime)\n
return;\n\n function bindingValue() {\n return '{{ ' + path + ' }}';
\n }\n\n return {\n open: bindingValue,\n discardChanges
: bindingValue,\n close: function() {\n node.removeEventListener
(eventType, handler);\n }\n };\n }\n }\n\n function PolymerExpr
essions() {}\n\n PolymerExpressions.prototype = {\n // \"built-in\" filters\
n styleObject: function(value) {\n var parts = [];\n for (var key i
n value) {\n parts.push(convertStylePropertyName(key) + ': ' + value[key]
);\n }\n return parts.join('; ');\n },\n\n tokenList: function(v
alue) {\n var tokens = [];\n for (var key in value) {\n if (val
ue[key])\n tokens.push(key);\n }\n return tokens.join(' ');\n
},\n\n // binding delegate API\n prepareInstancePositionChanged: funct
ion(template) {\n var indexIdent = template.polymerExpressionIndexIdent_;\n
if (!indexIdent)\n return;\n\n return function(templateInstanc
e, index) {\n templateInstance.model[indexIdent] = index;\n };\n
},\n\n prepareBinding: function(pathString, name, node) {\n if (isEventH
andler(name)) {\n var path = Path.get(pathString);\n if (!path.val
id) {\n console.error('on-* bindings must be simple path expressions');
\n return;\n }\n\n return prepareEventBinding(path, name)
;\n }\n\n if (Path.get(pathString).valid)\n return; // bail out
early if pathString is simple path.\n\n return prepareBinding(pathString,
name, node, this);\n },\n\n prepareInstanceModel: function(template) {\n
var scopeName = template.polymerExpressionScopeIdent_;\n if (!scopeName
)\n return;\n\n var parentScope = template.templateInstance ?\n
template.templateInstance.model :\n template.model;\n\n retur
n function(model) {\n var scope = Object.create(parentScope);\n sc
ope[scopeName] = model;\n return scope;\n };\n }\n };\n\n globa
l.PolymerExpressions = PolymerExpressions;\n if (global.exposeGetExpression)\n
global.getExpression_ = getExpression;\n\n global.PolymerExpressions.prepare
EventBinding = prepareEventBinding;\n})(this);\n", |
| 190 "/*\n * Copyright 2013 The Polymer Authors. All rights reserved.\n * Use of
this source code is governed by a BSD-style\n * license that can be found in the
LICENSE file.\n */\n(function(scope) {\n\n// inject style sheet\nvar style = do
cument.createElement('style');\nstyle.textContent = 'template {display: none !im
portant;} /* injected by platform.js */';\nvar head = document.querySelector('he
ad');\nhead.insertBefore(style, head.firstChild);\n\n// flush (with logging)\nva
r flushing;\nfunction flush() {\n if (!flushing) {\n flushing = true;\n s
cope.endOfMicrotask(function() {\n flushing = false;\n logFlags.data &
& console.group('Platform.flush()');\n scope.performMicrotaskCheckpoint();\
n logFlags.data && console.groupEnd();\n });\n }\n};\n\n// polling dirt
y checker\nvar FLUSH_POLL_INTERVAL = 125;\nwindow.addEventListener('WebComponent
sReady', function() {\n flush();\n // flush periodically if platform does not
have object observe.\n if (!Observer.hasObjectObserve) {\n scope.flushPoll =
setInterval(flush, FLUSH_POLL_INTERVAL);\n }\n});\n\nif (window.CustomElements
&& !CustomElements.useNative) {\n var originalImportNode = Document.prototype.
importNode;\n Document.prototype.importNode = function(node, deep) {\n var i
mported = originalImportNode.call(this, node, deep);\n CustomElements.upgrade
All(imported);\n return imported;\n }\n}\n\n// exports\nscope.flush = flush;
\n\n})(window.Platform);\n\n" |
| 191 ] |
| 192 } |
OLD | NEW |