OLD | NEW |
1 { | 1 { |
2 "version": 3, | 2 "version": 3, |
3 "file": "platform.concat.js", | 3 "file": "platform.concat.js", |
4 "sources": [ | 4 "sources": [ |
5 "build/boot.js", | 5 "build/boot.js", |
6 "../WeakMap/weakmap.js", | 6 "../WeakMap/weakmap.js", |
7 "../observe-js/src/observe.js", | 7 "../observe-js/src/observe.js", |
8 "build/if-poly.js", | 8 "build/if-poly.js", |
9 "../ShadowDOM/src/wrappers.js", | 9 "../ShadowDOM/src/wrappers.js", |
10 "../ShadowDOM/src/microtask.js", | 10 "../ShadowDOM/src/microtask.js", |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 "../ShadowDOM/src/wrappers/WebGLRenderingContext.js", | 43 "../ShadowDOM/src/wrappers/WebGLRenderingContext.js", |
44 "../ShadowDOM/src/wrappers/Range.js", | 44 "../ShadowDOM/src/wrappers/Range.js", |
45 "../ShadowDOM/src/wrappers/generic.js", | 45 "../ShadowDOM/src/wrappers/generic.js", |
46 "../ShadowDOM/src/wrappers/ShadowRoot.js", | 46 "../ShadowDOM/src/wrappers/ShadowRoot.js", |
47 "../ShadowDOM/src/ShadowRenderer.js", | 47 "../ShadowDOM/src/ShadowRenderer.js", |
48 "../ShadowDOM/src/wrappers/elements-with-form-property.js", | 48 "../ShadowDOM/src/wrappers/elements-with-form-property.js", |
49 "../ShadowDOM/src/wrappers/Selection.js", | 49 "../ShadowDOM/src/wrappers/Selection.js", |
50 "../ShadowDOM/src/wrappers/Document.js", | 50 "../ShadowDOM/src/wrappers/Document.js", |
51 "../ShadowDOM/src/wrappers/Window.js", | 51 "../ShadowDOM/src/wrappers/Window.js", |
52 "../ShadowDOM/src/wrappers/DataTransfer.js", | 52 "../ShadowDOM/src/wrappers/DataTransfer.js", |
| 53 "../ShadowDOM/src/wrappers/FormData.js", |
53 "../ShadowDOM/src/wrappers/override-constructors.js", | 54 "../ShadowDOM/src/wrappers/override-constructors.js", |
54 "src/patches-shadowdom-polyfill.js", | 55 "src/patches-shadowdom-polyfill.js", |
55 "src/ShadowCSS.js", | 56 "src/ShadowCSS.js", |
56 "build/else.js", | 57 "build/else.js", |
57 "src/patches-shadowdom-native.js", | 58 "src/patches-shadowdom-native.js", |
58 "build/end-if.js", | 59 "build/end-if.js", |
59 "../URL/url.js", | 60 "../URL/url.js", |
60 "src/lang.js", | 61 "src/lang.js", |
61 "src/dom.js", | 62 "src/dom.js", |
62 "src/template.js", | 63 "src/template.js", |
(...skipping 15 matching lines...) Expand all Loading... |
78 "../CustomElements/src/Parser.js", | 79 "../CustomElements/src/Parser.js", |
79 "../CustomElements/src/boot.js", | 80 "../CustomElements/src/boot.js", |
80 "src/patches-custom-elements.js", | 81 "src/patches-custom-elements.js", |
81 "src/loader.js", | 82 "src/loader.js", |
82 "src/styleloader.js", | 83 "src/styleloader.js", |
83 "../NodeBind/src/NodeBind.js", | 84 "../NodeBind/src/NodeBind.js", |
84 "../TemplateBinding/src/TemplateBinding.js", | 85 "../TemplateBinding/src/TemplateBinding.js", |
85 "src/patches-mdv.js" | 86 "src/patches-mdv.js" |
86 ], | 87 ], |
87 "names": [], | 88 "names": [], |
88 "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;CClEA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;CCnCA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A,CACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;CCp
rDA;AACA;CCDA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,C
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,C
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;CC/ZA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA,CACA;CChDA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;CCnXA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;CChFA;AACA;AACA;AACA,CACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AA
CA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA,CACA;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,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;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,CACA;AA
CA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;CCn4BA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,C;AC5HA;AACA;AACA;AACA,CACA;AA
CA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;CC/CA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;CCdA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;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,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;CC9tBA;AACA;AACA;AACA,CACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;CCjHA;AACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA,CACA;CC1EA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AA
CA;AACA,CACA;AACA;CC5CA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;CCzCA;AACA;
AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;CC7CA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA;AACA;CCrJA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;CC1TA;AACA;AA
CA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AA
CA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;CC9BA;AACA;AACA;A
ACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;A
ACA;AACA,CACA;AACA;CCtCA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;CCnCA;AACA;AACA;AACA,CACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
,CACA;AACA;AACA;CC1CA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CAC
A;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;CCzBA;AACA;AA
CA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CA
CA;AACA;AACA,CACA;AACA;CCtEA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;CCrBA;AACA;AACA;AACA,CACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA,CACA;AACA;AACA;CCzCA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA,CACA;AACA;AACA;CC9DA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA,CACA;AACA;AACA,CACA;AACA;CCjDA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA,CACA;AACA;AACA,CACA;AACA;CC/DA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;CCnCA;AACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;
CCpCA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CC9B
A;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;CC3BA;AACA;AACA;AACA,CA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;CC7CA;AACA;AACA;AACA,CACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;CClEA;AACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA,CACA;AACA;CCvCA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA,CACA;AACA;CCjDA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA,CACA;AACA,CACA;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,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA,CACA;AACA,CACA;CC9FA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;CCvBA;A
ACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,C
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;CCzEA;AACA;AACA;AACA,CACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;
AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;
AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;CC9oBA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;CCrDA;AA
CA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;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,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AA
CA,CACA;CClEA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;CC1UA;AACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;
AACA,CACA;CCpEA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;CCvBA;AACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA,CACA;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,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA,CACA;AACA;AACA;AACA,CACA;CC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA,CACA;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,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CCjGA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;A
ACA,CACA;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,CACA;AACA;AACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;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,CACA;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,CACA;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,CACA;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,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;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,CACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;CCpwBA,Q;AC
AA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;CC5CA,C;ACAA;AACA
;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA,CACA;CCpjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AA
CA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AA
CA,CACA;CC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;A
ACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;CC5IA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;CCdA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,
CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;CCpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;CC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;CC1DA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AA
CA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CA
CA;AACA,C;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA,CACA;CChIA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AAC
A,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AAC
A;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CAC
A;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AAC
A,CACA;AACA;AACA,CACA;AACA;CCjiBA;AACA;AACA;AACA;AACA;AACA,sD;ACLA;AACA;AACA;AAC
A;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AAC
A;AACA;AACA;AACA;AACA;AACA,CACA;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,CACA;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,CACA;AAC
A;AACA;AACA,CACA;CCtLA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;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,CACA;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,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA
CA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;CCvTA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;A
ACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;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,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,C
ACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,C
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA,CACA;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,CACA;AACA;AACA;AACA;A
ACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA,CACA;CCtSA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;CCpEA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;CCvDA;AACA;AACA;AACA;AACA;AACA,4D;ACLA;AACA;AACA;AACA;AACA;AACA,EACA;AACA,EACA;
AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;
AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;
AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;
AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA,EACA;AACA;
AACA;AACA;AACA;AACA,EACA;AACA,EACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA,EACA;AACA;
AACA;AACA;AACA;AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA,EACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EACA;AACA;AACA,EACA;AACA,EACA;CCvVA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA
;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA
;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
,CACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;CC3dA;AACA;AACA;AACA;AAC
A;AACA,CACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA,CACA;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,CACA;AAC
A;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA,0B;AC/DA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;CCnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA,CACA;AACA;AAC
A;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AAC
A,CACA;CChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AA
CA;AACA,CACA;AACA;CCjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;A
ACA;AACA,CACA;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,CACA;AACA,CACA;AACA;AACA,CACA;CCtEA;AACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;
AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,
CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;
AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;
AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;
AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;
AACA;AACA;CCtVA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA
;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA
;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA
,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA,CACA;AACA
;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA,CACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA
;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;CCtuCA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA,CACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA,CACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA;AA
CA;AACA,CACA;AACA,C", | 89 "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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;A;ACnCA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrrDA;AACA;A;ACDA;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;A;AC/ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AChDA;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;A;ACnXA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;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;AChFA;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;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;A;ACn4BA;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;A;AC5HA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC
/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACdA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9tBA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACjHA;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;A;AC1EA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;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;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;ACzCA;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;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;A;ACrJA;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;A;AC1TA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9BA;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;ACtCA;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;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;A;AC1CA;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;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;A
ACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A
ACA;AACA;AACA;AACA;AACA;A;ACrBA;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;A;A
CzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9
DA;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;A;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC/DA;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;ACnCA;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;ACpCA;AACA;AACA;
AACA;AACA;AACA;AACA;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;AC9BA;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;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC7CA;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;AClEA;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;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;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;A;AC9FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A;ACvBA;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;A;ACzEA;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;A;ACjpBA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACrDA;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;A;AClEA;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;A;AC1UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AACA;AA
CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA
CA;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;A;ACtBA;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;A;AC3GA;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;A;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACtwBA,Q;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC
5CA,C;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;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;AACA;AACA;AACA;A;AC7DA;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;A;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;A;ACdA;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;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC9BA;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;AC1DA;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;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;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;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;A;ACjiBA;AACA;AACA;AAC
A;AACA;AACA,sD;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;A;ACtLA;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;A;ACxTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;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;ACzSA;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;A;ACpEA;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;ACvDA;AACA;AACA;
AACA;AACA;AACA,4D;ACLA;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;A;ACvVA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
;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;AC3dA;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,0B;AC/DA;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;A;ACnEA;AACA
;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;AC
hCA;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;A;ACjHA;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;ACtEA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;
AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;ACtVA;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;A;ACtuCA;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;A", |
89 "sourcesContent": [ | 90 "sourcesContent": [ |
90 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window
.Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags =
window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var
flags = scope.flags || {};\n // populate flags from location\n location.searc
h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] &&
(flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript
||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo
int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length;
i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] =
n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split(
',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n //
If any of these flags match 'native', then force native ShadowDOM; any\n // ot
her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi
ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f
lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh
adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl
ags.shadow && document.querySelectorAll('script').length > 1) {\n console.war
n('platform.js is not the first script on the page. ' +\n 'See http://www
.polymer-project.org/docs/start/platform.html#setup ' +\n 'for details.')
;\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window
.CustomElements = window.CustomElements || {flags: {}};\n window.CustomElemen
ts.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.H
TMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.flags.im
ports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(Platform)
;\n", | 91 "/**\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved
.\n * This code may only be used under the BSD style license found at http://pol
ymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:
//polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be foun
d at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights gran
t found at http://polymer.github.io/PATENTS.txt\n */\n\nwindow.Platform = window
.Platform || {};\n// prepopulate window.logFlags if necessary\nwindow.logFlags =
window.logFlags || {};\n// process flags\n(function(scope){\n // import\n var
flags = scope.flags || {};\n // populate flags from location\n location.searc
h.slice(1).split('&').forEach(function(o) {\n o = o.split('=');\n o[0] &&
(flags[o[0]] = o[1] || true);\n });\n var entryPoint = document.currentScript
||\n document.querySelector('script[src*=\"platform.js\"]');\n if (entryPo
int) {\n var a = entryPoint.attributes;\n for (var i = 0, n; i < a.length;
i++) {\n n = a[i];\n if (n.name !== 'src') {\n flags[n.name] =
n.value || true;\n }\n }\n }\n if (flags.log) {\n flags.log.split(
',').forEach(function(f) {\n window.logFlags[f] = true;\n });\n }\n //
If any of these flags match 'native', then force native ShadowDOM; any\n // ot
her truthy value, or failure to detect native\n // ShadowDOM, results in polyfi
ll\n flags.shadow = flags.shadow || flags.shadowdom || flags.polyfill;\n if (f
lags.shadow === 'native') {\n flags.shadow = false;\n } else {\n flags.sh
adow = flags.shadow || !HTMLElement.prototype.createShadowRoot;\n }\n\n if (fl
ags.shadow && document.querySelectorAll('script').length > 1) {\n console.war
n('platform.js is not the first script on the page. ' +\n 'See http://www
.polymer-project.org/docs/start/platform.html#setup ' +\n 'for details.')
;\n }\n\n // CustomElements polyfill flag\n if (flags.register) {\n window
.CustomElements = window.CustomElements || {flags: {}};\n window.CustomElemen
ts.flags.register = flags.register;\n }\n\n if (flags.imports) {\n window.H
TMLImports = window.HTMLImports || {flags: {}};\n window.HTMLImports.flags.im
ports = flags.imports;\n }\n\n // export\n scope.flags = flags;\n})(Platform)
;\n", |
91 "/*\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", | 92 "/*\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", |
92 "// 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 // Detect and do basic sanity checking on Object/Array.observe.\n
function detectObjectObserve() {\n if (typeof Object.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 var arr = [];\n Object.observe(test, callba
ck);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n
delete test.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliver
ChangeRecords(callback);\n if (records.length !== 5)\n return false;\n\n
if (records[0].type != 'add' ||\n records[1].type != 'update' ||\n
records[2].type != 'delete' ||\n records[3].type != 'splice' ||\n
records[4].type != 'splice') {\n return false;\n }\n\n Object.un
observe(test, callback);\n Array.unobserve(arr, callback);\n\n return true
;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {
\n // Don't test for eval if we're running in a Chrome App environment.\n
// We check for APIs set that only exist in a Chrome App context.\n if (typeo
f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa
lse;\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 hasEv
al = 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(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) && numb
erIsNaN(right))\n return true;\n\n return left !== left && right !== rig
ht;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { retu
rn obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!p
roto)\n return obj;\n var newObject = Object.create(proto);\n O
bject.getOwnPropertyNames(obj).forEach(function(name) {\n Object.definePr
operty(newObject, name,\n Object.getOwnPropertyDescr
iptor(obj, name));\n });\n return newObject;\n };\n\n var identSta
rt = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp =
new RegExp('^' + identStart + '+' + identPart + '*' + '$');\n\n function getPat
hCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var c
ode = char.charCodeAt(0);\n\n switch(code) {\n case 0x5B: // [\n ca
se 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27: /
/ '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n
case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n ca
se 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n
case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n cas
e 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n
return 'ws';\n }\n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A)
|| (0x41 <= code && code <= 0x5A))\n return 'ident';\n\n // 1-9\n if
(0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n
}\n\n var pathStateMachine = {\n 'beforePath': {\n 'ws': ['beforePath'
],\n 'ident': ['inIdent', 'append'],\n '[': ['beforeElement'],\n
'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n
'.': ['beforeIdent'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']
\n },\n\n 'beforeIdent': {\n 'ws': ['beforeIdent'],\n 'ident': [
'inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'ap
pend'],\n '0': ['inIdent', 'append'],\n 'number': ['inIdent', 'append'
],\n 'ws': ['inPath', 'push'],\n '.': ['beforeIdent', 'push'],\n
'[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n
'beforeElement': {\n 'ws': ['beforeElement'],\n '0': ['afterZero',
'append'],\n 'number': ['inIndex', 'append'],\n \"'\": ['inSingleQuote
', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'a
fterZero': {\n 'ws': ['afterElement', 'push'],\n ']': ['inPath', 'push
']\n },\n\n 'inIndex': {\n '0': ['inIndex', 'append'],\n 'number
': ['inIndex', 'append'],\n 'ws': ['afterElement'],\n ']': ['inPath',
'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n
'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'in
DoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n '
else': ['inDoubleQuote', 'append']\n },\n\n 'afterElement': {\n 'ws':
['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop
() {}\n\n function parsePath(path) {\n var keys = [];\n var index = -1;\n
var c, newChar, key, type, transition, action, typeMap, mode = 'beforePath';
\n\n var actions = {\n push: function() {\n if (key === undefined
)\n return;\n\n keys.push(key);\n key = undefined;\n
},\n\n append: function() {\n if (key === undefined)\n key
= newChar\n else\n key += newChar;\n }\n };\n\n func
tion maybeUnescapeQuote() {\n if (index >= path.length)\n return;\n\
n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && ne
xtChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\
n index++;\n newChar = nextChar;\n actions.append();\n
return true;\n }\n }\n\n while (mode) {\n index++;\n c =
path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n con
tinue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mod
e];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if
(transition == 'error')\n return; // parse error;\n\n mode = transi
tion[0];\n action = actions[transition[1]] || noop;\n newChar = transi
tion[2] === undefined ? c : transition[2];\n action();\n\n if (mode ==
= 'afterPath') {\n return keys;\n }\n }\n\n return; // parse e
rror\n }\n\n function isIdent(s) {\n return identRegExp.test(s);\n }\n\n
var constructorIsPrivate = {};\n\n function Path(parts, privateToken) {\n if
(privateToken !== constructorIsPrivate)\n throw Error('Use Path.get to ret
rieve path objects');\n\n if (parts.length)\n Array.prototype.push.apply
(this, parts.slice());\n\n if (hasEval && this.length) {\n this.getValue
From = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw): Make si
mple LRU cache\n var pathCache = {};\n\n function getPath(pathString) {\n i
f (pathString instanceof Path)\n return pathString;\n\n if (pathString =
= null || pathString.length == 0)\n pathString = '';\n\n if (typeof path
String != 'string') {\n if (isIndex(pathString.length)) {\n // Const
ructed with array-like (pre-parsed) keys\n return new Path(pathString, co
nstructorIsPrivate);\n }\n\n pathString = String(pathString);\n }\n
\n var path = pathCache[pathString];\n if (path)\n return path;\n\n
var parts = parsePath(pathString);\n if (!parts)\n return invalidPath;
\n\n var path = new Path(parts, constructorIsPrivate);\n pathCache[pathStr
ing] = path;\n return path;\n }\n\n Path.get = getPath;\n\n function forma
tAccessor(key) {\n if (isIndex(key)) {\n return '[' + key + ']';\n }
else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n }\n }\n
\n Path.prototype = createObject({\n __proto__: [],\n valid: true,\n\n
toString: function() {\n var pathString = '';\n for (var i = 0; i < t
his.length; i++) {\n var key = this[i];\n if (isIdent(key)) {\n
pathString += i ? '.' + key : key;\n } else {\n pathStrin
g += formatAccessor(key);\n }\n }\n\n return pathString;\n }
,\n\n getValueFrom: function(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: funct
ion(obj, observe) {\n for (var i = 0; i < this.length; i++) {\n if (
i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n re
turn;\n observe(obj, this[0]);\n }\n },\n\n compiledGetValueFr
omFn: function() {\n var str = '';\n var pathString = 'obj';\n st
r += 'if (obj != null';\n var i = 0;\n var key;\n for (; i < (thi
s.length - 1); i++) {\n key = this[i];\n pathString += isIdent(key
) ? '.' + key : formatAccessor(key);\n str += ' &&\\n ' + pathString
+ ' != null';\n }\n str += ')\\n';\n\n var key = this[i];\n
pathString += isIdent(key) ? '.' + key : formatAccessor(key);\n\n str += '
return ' + pathString + ';\\nelse\\n return undefined;';\n return new Fun
ction('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 invalidPat
h = new Path('', constructorIsPrivate);\n invalidPath.valid = false;\n invalid
Path.getValueFrom = invalidPath.setValueFrom = function() {};\n\n var MAX_DIRTY
_CHECK_CYCLES = 1000;\n\n function dirtyCheck(observer) {\n var cycles = 0;\
n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n cycle
s++;\n }\n if (global.testingExposeCycleCount)\n global.dirtyCheckCyc
leCount = cycles;\n\n return cycles > 0;\n }\n\n function objectIsEmpty(obj
ect) {\n for (var prop in object)\n return false;\n return true;\n }
\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.added) &&\n
objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.changed);\
n }\n\n function diffObjectFromOldObject(object, oldObject) {\n var added =
{};\n var removed = {};\n var changed = {};\n\n for (var prop in oldOb
ject) {\n var newValue = object[prop];\n\n if (newValue !== undefined
&& newValue === oldObject[prop])\n continue;\n\n if (!(prop in objec
t)) {\n removed[prop] = undefined;\n continue;\n }\n\n i
f (newValue !== oldObject[prop])\n changed[prop] = newValue;\n }\n\n
for (var prop in object) {\n if (prop in oldObject)\n continue;\n\
n added[prop] = object[prop];\n }\n\n if (Array.isArray(object) && ob
ject.length !== oldObject.length)\n changed.length = object.length;\n\n
return {\n added: added,\n removed: removed,\n changed: changed\n
};\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n if (!eomTas
ks.length)\n return false;\n\n for (var i = 0; i < eomTasks.length; i++)
{\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return true;\n }
\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingPong: true
};\n var eomRunScheduled = false;\n\n Object.observe(eomObj, function() {\
n runEOMTasks();\n eomRunScheduled = false;\n });\n\n return fun
ction(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n eo
mRunScheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n }\n
};\n })() :\n (function() {\n return function(fn) {\n eomTasks.push(f
n);\n };\n })();\n\n var observedObjectCache = [];\n\n function newObserve
dObject() {\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_(recor
ds);\n }\n\n return {\n open: function(obs) {\n if (observer)\
n throw Error('ObservedObject in use');\n\n if (!first)\n
Object.deliverChangeRecords(callback);\n\n observer = obs;\n fi
rst = false;\n },\n observe: function(obj, arrayObserve) {\n ob
ject = obj;\n if (arrayObserve)\n Array.observe(object, callback
);\n else\n Object.observe(object, callback);\n },\n d
eliver: function(discard) {\n discardRecords = discard;\n Object.d
eliverChangeRecords(callback);\n discardRecords = false;\n },\n
close: function() {\n observer = undefined;\n Object.unobserve(ob
ject, callback);\n observedObjectCache.push(this);\n }\n };\n }\
n\n /*\n * The observedSet abstraction is a perf optimization which reduces t
he total\n * number of Object.observe observations of a set of objects. The id
ea is that\n * groups of Observers will have some object dependencies in commo
n and this\n * observed set ensures that each object in the transitive closure
of\n * dependencies is only observed once. The observedSet acts as a write ba
rrier\n * such that whenever any change comes through, all Observers are check
ed for\n * changed values.\n *\n * Note that this optimization is explicit
ly moving work from setup-time to\n * change-time.\n *\n * TODO(rafaelw):
Implement \"garbage collection\". In order to move work off\n * the critical p
ath, when Observers are closed, their observed objects are\n * not Object.unob
serve(d). As a result, it's possible that if the observedSet\n * is kept open,
but some Observers have been closed, it could cause \"leaks\"\n * (prevent ot
herwise collectable objects from being collected). At some\n * point, we shoul
d implement incremental \"gc\" which keeps a list of\n * observedSets which ma
y need clean-up and does small amounts of cleanup on a\n * timeout until all i
s clean.\n */\n\n function getObservedObject(observer, object, arrayObserve)
{\n var dir = observedObjectCache.pop() || newObservedObject();\n dir.open
(observer);\n dir.observe(object, arrayObserve);\n return dir;\n }\n\n v
ar observedSetCache = [];\n\n function newObservedSet() {\n var observerCoun
t = 0;\n var observers = [];\n var objects = [];\n var rootObj;\n va
r rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\n r
eturn;\n\n if (obj === rootObj)\n rootObjProps[prop] = true;\n\n
if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n Object.ob
serve(obj, callback);\n }\n\n observe(Object.getPrototypeOf(obj), prop
);\n }\n\n function allRootObjNonObservedProps(recs) {\n for (var i =
0; i < recs.length; i++) {\n var rec = recs[i];\n if (rec.object
!== rootObj ||\n rootObjProps[rec.name] ||\n rec.type ===
'setPrototype') {\n return false;\n }\n }\n return tru
e;\n }\n\n function callback(recs) {\n if (allRootObjNonObservedProps
(recs))\n return;\n\n var observer;\n for (var i = 0; i < obser
vers.length; i++) {\n observer = observers[i];\n if (observer.stat
e_ == OPENED) {\n observer.iterateObjects_(observe);\n }\n
}\n\n for (var i = 0; i < observers.length; i++) {\n observer = obse
rvers[i];\n if (observer.state_ == OPENED) {\n observer.check_()
;\n }\n }\n }\n\n var record = {\n object: undefined,\n
objects: objects,\n open: function(obs, object) {\n if (!rootObj
) {\n rootObj = object;\n rootObjProps = {};\n }\n\n
observers.push(obs);\n observerCount++;\n obs.iterateObjects_
(observe);\n },\n close: function(obs) {\n observerCount--;\n
if (observerCount > 0) {\n return;\n }\n\n for (var
i = 0; i < objects.length; i++) {\n Object.unobserve(objects[i], callb
ack);\n Observer.unobservedCount++;\n }\n\n observers.len
gth = 0;\n objects.length = 0;\n rootObj = undefined;\n roo
tObjProps = undefined;\n observedSetCache.push(this);\n }\n };\n\
n return record;\n }\n\n var lastObservedSet;\n\n function getObservedSet(
observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !== obj) {\
n lastObservedSet = observedSetCache.pop() || newObservedSet();\n last
ObservedSet.object = obj;\n }\n lastObservedSet.open(observer, obj);\n
return lastObservedSet;\n }\n\n var UNOPENED = 0;\n var OPENED = 1;\n var CL
OSED = 2;\n var RESETTING = 3;\n\n var nextObserverId = 1;\n\n function Obser
ver() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\n this.
target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.directObserve
r_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObserverId++;\
n }\n\n Observer.prototype = {\n open: function(callback, target) {\n
if (this.state_ != UNOPENED)\n throw Error('Observer has already been ope
ned.');\n\n addToAll(this);\n this.callback_ = callback;\n this.t
arget_ = target;\n this.connect_();\n this.state_ = OPENED;\n ret
urn this.value_;\n },\n\n close: function() {\n if (this.state_ != OP
ENED)\n return;\n\n removeFromAll(this);\n this.disconnect_();\
n this.value_ = undefined;\n this.callback_ = undefined;\n this.t
arget_ = undefined;\n this.state_ = CLOSED;\n },\n\n deliver: functio
n() {\n if (this.state_ != OPENED)\n return;\n\n dirtyCheck(thi
s);\n },\n\n report_: function(changes) {\n try {\n this.callb
ack_.apply(this.target_, changes);\n } catch (ex) {\n Observer._erro
rThrownDuringCallback = true;\n console.error('Exception caught during ob
server 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 collectObservers = !hasObserve;\n var
allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObservers) {\
n allObservers = [];\n }\n\n function addToAll(observer) {\n Observer._a
llObserversCount++;\n if (!collectObservers)\n return;\n\n allObserve
rs.push(observer);\n }\n\n function removeFromAll(observer) {\n Observer._a
llObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\n\n var h
asDebugForceFullDelivery = hasObserve && (function() {\n try {\n eval('%
RunMicrotasks()');\n return true;\n } catch (ex) {\n return false;\
n }\n })();\n\n global.Platform = global.Platform || {};\n\n global.Platfo
rm.performMicrotaskCheckpoint = function() {\n if (runningMicrotaskCheckpoint
)\n return;\n\n if (hasDebugForceFullDelivery) {\n eval('%RunMicrot
asks()');\n return;\n }\n\n if (!collectObservers)\n return;\n\n
runningMicrotaskCheckpoint = true;\n\n var cycles = 0;\n var anyChange
d, toCheck;\n\n do {\n cycles++;\n toCheck = allObservers;\n a
llObservers = [];\n anyChanged = false;\n\n for (var i = 0; i < toChec
k.length; i++) {\n var observer = toCheck[i];\n if (observer.state
_ != OPENED)\n continue;\n\n if (observer.check_())\n a
nyChanged = true;\n\n allObservers.push(observer);\n }\n if (ru
nEOMTasks())\n anyChanged = true;\n } while (cycles < MAX_DIRTY_CHECK_
CYCLES && anyChanged);\n\n if (global.testingExposeCycleCount)\n global.
dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheckpoint = false;\n };\
n\n if (collectObservers) {\n global.Platform.clearObservers = function() {\
n allObservers = [];\n };\n }\n\n function ObjectObserver(object) {\n
Observer.call(this);\n this.value_ = object;\n this.oldObject_ = undefi
ned;\n }\n\n ObjectObserver.prototype = createObject({\n __proto__: Observe
r.prototype,\n\n arrayObserve: false,\n\n connect_: function(callback, tar
get) {\n if (hasObserve) {\n this.directObserver_ = getObservedObjec
t(this, this.value_,\n this.arra
yObserve);\n } else {\n this.oldObject_ = this.copyObject(this.value
_);\n }\n\n },\n\n copyObject: function(object) {\n var copy = A
rray.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 check_: function(chan
geRecords, skipChanges) {\n var diff;\n var oldValues;\n if (hasO
bserve) {\n if (!changeRecords)\n return false;\n\n oldVa
lues = {};\n diff = diffObjectFromChangeRecords(this.value_, changeRecord
s,\n oldValues);\n } else {\n
oldValues = this.oldObject_;\n diff = diffObjectFromOldObject(this.va
lue_, this.oldObject_);\n }\n\n if (diffIsEmpty(diff))\n return
false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObject(thi
s.value_);\n\n this.report_([\n diff.added || {},\n diff.remo
ved || {},\n diff.changed || {},\n function(property) {\n
return oldValues[property];\n }\n ]);\n\n return true;\n },
\n\n disconnect_: function() {\n if (hasObserve) {\n this.directO
bserver_.close();\n this.directObserver_ = undefined;\n } else {\n
this.oldObject_ = undefined;\n }\n },\n\n deliver: 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.directObserver_)\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 Er
ror('Provided object is not an Array');\n ObjectObserver.call(this, array);\n
}\n\n ArrayObserver.prototype = createObject({\n\n __proto__: ObjectObserv
er.prototype,\n\n arrayObserve: true,\n\n copyObject: function(arr) {\n
return arr.slice();\n },\n\n check_: function(changeRecords) {\n v
ar splices;\n if (hasObserve) {\n if (!changeRecords)\n ret
urn false;\n splices = projectArraySplices(this.value_, changeRecords);\n
} else {\n splices = calcSplices(this.value_, 0, this.value_.length
,\n this.oldObject_, 0, this.oldObject_.length);\n
}\n\n if (!splices || !splices.length)\n return false;\n\n
if (!hasObserve)\n this.oldObject_ = this.copyObject(this.value_);\n\n
this.report_([splices]);\n return true;\n }\n });\n\n ArrayObserve
r.applySplices = function(previous, current, splices) {\n splices.forEach(fun
ction(splice) {\n var spliceArgs = [splice.index, splice.removed.length];\n
var addIndex = splice.index;\n while (addIndex < splice.index + splic
e.addedCount) {\n spliceArgs.push(current[addIndex]);\n addIndex++
;\n }\n\n Array.prototype.splice.apply(previous, spliceArgs);\n });
\n };\n\n function PathObserver(object, path) {\n Observer.call(this);\n\n
this.object_ = object;\n this.path_ = getPath(path);\n this.directObser
ver_ = undefined;\n }\n\n PathObserver.prototype = createObject({\n __proto
__: Observer.prototype,\n\n get path() {\n return this.path_;\n },\n\
n connect_: function() {\n if (hasObserve)\n this.directObserver_
= getObservedSet(this, this.object_);\n\n this.check_(undefined, true);\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\n iterateObjects_: funct
ion(observe) {\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 (
skipChanges || areSameValue(this.value_, oldValue))\n return false;\n\n
this.report_([this.value_, oldValue, this]);\n return true;\n },\n\n
setValue: function(newValue) {\n if (this.path_)\n this.path_.se
tValueFrom(this.object_, newValue);\n }\n });\n\n function CompoundObserver
(reportChangesOnOpen) {\n Observer.call(this);\n\n this.reportChangesOnOpe
n_ = reportChangesOnOpen;\n this.value_ = [];\n this.directObserver_ = und
efined;\n this.observed_ = [];\n }\n\n var observerSentinel = {};\n\n Comp
oundObserver.prototype = createObject({\n __proto__: Observer.prototype,\n\n
connect_: function() {\n if (hasObserve) {\n var object;\n
var needsDirectObserver = false;\n for (var i = 0; i < this.observed_.le
ngth; i += 2) {\n object = this.observed_[i]\n if (object !==
observerSentinel) {\n needsDirectObserver = true;\n break;
\n }\n }\n\n if (needsDirectObserver)\n this.dir
ectObserver_ = getObservedSet(this, object);\n }\n\n this.check_(undef
ined, !this.reportChangesOnOpen_);\n },\n\n disconnect_: function() {\n
for (var i = 0; i < this.observed_.length; i += 2) {\n if (this.observ
ed_[i] === observerSentinel)\n this.observed_[i + 1].close();\n }\
n this.observed_.length = 0;\n this.value_.length = 0;\n\n if (th
is.directObserver_) {\n this.directObserver_.close(this);\n this.d
irectObserver_ = undefined;\n }\n },\n\n addPath: function(object, pa
th) {\n if (this.state_ != UNOPENED && this.state_ != RESETTING)\n t
hrow Error('Cannot add paths once started.');\n\n var path = getPath(path);
\n this.observed_.push(object, path);\n if (!this.reportChangesOnOpen_
)\n return;\n var index = this.observed_.length / 2 - 1;\n this
.value_[index] = path.getValueFrom(object);\n },\n\n addObserver: function
(observer) {\n if (this.state_ != UNOPENED && this.state_ != RESETTING)\n
throw Error('Cannot add observers once started.');\n\n this.observed_
.push(observerSentinel, observer);\n if (!this.reportChangesOnOpen_)\n
return;\n var index = this.observed_.length / 2 - 1;\n this.value_[
index] = observer.open(this.deliver, this);\n },\n\n startReset: function(
) {\n if (this.state_ != OPENED)\n throw Error('Can only reset while
open');\n\n this.state_ = RESETTING;\n this.disconnect_();\n },\n\
n finishReset: function() {\n if (this.state_ != RESETTING)\n thr
ow Error('Can only finishReset after startReset');\n this.state_ = OPENED;\
n this.connect_();\n\n return this.value_;\n },\n\n iterateObjec
ts_: function(observe) {\n var object;\n for (var i = 0; i < this.obse
rved_.length; i += 2) {\n object = this.observed_[i]\n if (object
!== observerSentinel)\n this.observed_[i + 1].iterateObjects(object, ob
serve)\n }\n },\n\n check_: function(changeRecords, skipChanges) {\n
var oldValues;\n for (var i = 0; i < this.observed_.length; i += 2) {\
n var object = this.observed_[i];\n var path = this.observed_[i+1]
;\n var value;\n if (object === observerSentinel) {\n var
observable = path;\n value = this.state_ === UNOPENED ?\n
observable.open(this.deliver, this) :\n observable.discardChanges(
);\n } else {\n value = path.getValueFrom(object);\n }\n\
n if (skipChanges) {\n this.value_[i / 2] = value;\n co
ntinue;\n }\n\n if (areSameValue(value, this.value_[i / 2]))\n
continue;\n\n oldValues = oldValues || [];\n oldValues[i / 2
] = this.value_[i / 2];\n this.value_[i / 2] = value;\n }\n\n i
f (!oldValues)\n return false;\n\n // TODO(rafaelw): Having observed
_ as the third callback arg here is\n // pretty lame API. Fix.\n this.
report_([this.value_, oldValues, this.observed_]);\n return true;\n }\n
});\n\n function identFn(value) { return value; }\n\n function ObserverTransf
orm(observable, getValueFn, setValueFn,\n dontPassTh
roughSet) {\n this.callback_ = undefined;\n this.target_ = undefined;\n
this.value_ = undefined;\n this.observable_ = observable;\n this.getValue
Fn_ = getValueFn || identFn;\n this.setValueFn_ = setValueFn || identFn;\n
// TODO(rafaelw): This is a temporary hack. PolymerExpressions needs this\n
// at the moment because of a bug in it's dependency tracking.\n this.dontPas
sThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransform.prototype = {\n
open: function(callback, target) {\n this.callback_ = callback;\n th
is.target_ = target;\n this.value_ =\n this.getValueFn_(this.obser
vable_.open(this.observedCallback_, this));\n return this.value_;\n },\n
\n observedCallback_: function(value) {\n value = this.getValueFn_(value
);\n if (areSameValue(value, this.value_))\n return;\n var oldV
alue = this.value_;\n this.value_ = value;\n this.callback_.call(this.
target_, this.value_, oldValue);\n },\n\n discardChanges: function() {\n
this.value_ = this.getValueFn_(this.observable_.discardChanges());\n re
turn this.value_;\n },\n\n deliver: function() {\n return this.observ
able_.deliver();\n },\n\n setValue: function(value) {\n value = this.
setValueFn_(value);\n if (!this.dontPassThroughSet_ && this.observable_.set
Value)\n return this.observable_.setValue(value);\n },\n\n close: f
unction() {\n if (this.observable_)\n this.observable_.close();\n
this.callback_ = undefined;\n this.target_ = undefined;\n this.obse
rvable_ = undefined;\n this.value_ = undefined;\n this.getValueFn_ = u
ndefined;\n this.setValueFn_ = undefined;\n }\n }\n\n var expectedReco
rdTypes = {\n add: true,\n update: true,\n delete: true\n };\n\n func
tion diffObjectFromChangeRecords(object, changeRecords, oldValues) {\n var ad
ded = {};\n var removed = {};\n\n for (var i = 0; i < changeRecords.length
; i++) {\n var record = changeRecords[i];\n if (!expectedRecordTypes[r
ecord.type]) {\n console.error('Unknown changeRecord type: ' + record.typ
e);\n console.error(record);\n continue;\n }\n\n if (!(r
ecord.name in oldValues))\n oldValues[record.name] = record.oldValue;\n\n
if (record.type == 'update')\n continue;\n\n if (record.type =
= 'add') {\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[record.name];\n delete oldValues[record.name];\n } el
se {\n removed[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[prop] = undefined;\n\n var changed = {};\n for (var prop in o
ldValues) {\n if (prop in added || prop in removed)\n continue;\n\n
var newValue = object[prop];\n if (oldValues[prop] !== newValue)\n
changed[prop] = newValue;\n }\n\n return {\n added: added,\n
removed: removed,\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 i
s *based* on the computation of the Levenshtein\n // \"edit\" distance. The o
ne change is that \"updates\" are treated as two\n // edits - not one. With A
rray splices, an update is really a delete\n // followed by an add. By retain
ing this, we optimize for \"keeping\" the\n // maximum array items in the ori
ginal array. For example:\n //\n // 'xxxx123' -> '123yyyy'\n //\n
// With 1-edit updates, 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 substring '123' intact.\n calcEditDistances: function(current,
currentStart, currentEnd,\n old, oldStart, oldEnd
) {\n // \"Deletion\" columns\n var rowCount = oldEnd - oldStart + 1;\
n var columnCount = currentEnd - currentStart + 1;\n var distances = n
ew Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n
for (var i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnC
ount);\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 els
e {\n var north = distances[i - 1][j] + 1;\n var west = di
stances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : wes
t;\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 // matri
x.\n spliceOperationsFromEditDistances: 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 co
ntinue;\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 = di
stances[i][j - 1];\n\n var min;\n if (west < north)\n min
= west < northWest ? west : northWest;\n else\n min = north < n
orthWest ? north : northWest;\n\n if (min == northWest) {\n if (
northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {
\n edits.push(EDIT_UPDATE);\n current = northWest;\n
}\n i--;\n j--;\n } else if (min == west) {\n
edits.push(EDIT_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 i
s a representation 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| seq
uence of items were removed, and counting forward\n * from |index|, |addedCo
unt| items were added.\n */\n\n /**\n * Lacking individual splice mut
ation information, the minimal set of\n * splices can be synthesized given t
he previous state and final state of an\n * array. The basic approach is to
calculate the edit 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: functi
on(current, currentStart, currentEnd,\n old, oldStart,
oldEnd) {\n var prefixCount = 0;\n var suffixCount = 0;\n\n var m
inLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (cu
rrentStart == 0 && oldStart == 0)\n prefixCount = this.sharedPrefix(curre
nt, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.
length)\n suffixCount = this.sharedSuffix(current, old, minLength - prefi
xCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n
currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (curr
entEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n
if (currentStart == currentEnd) {\n var splice = newSplice(currentStar
t, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old
[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEn
d)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n
\n var ops = this.spliceOperationsFromEditDistances(\n this.calcEd
itDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;\n var splices =
[];\n var index = currentStart;\n var oldIndex = oldStart;\n for
(var i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDI
T_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 (!s
plice)\n splice = newSplice(index, [], 0);\n\n splice.ad
dedCount++;\n index++;\n\n splice.removed.push(old[oldInde
x]);\n oldIndex++;\n break;\n case EDIT_ADD:\n
if (!splice)\n splice = newSplice(index, [], 0);\n\n
splice.addedCount++;\n index++;\n break;\n
case EDIT_DELETE:\n if (!splice)\n splice = newSplice(in
dex, [], 0);\n\n splice.removed.push(old[oldIndex]);\n old
Index++;\n break;\n }\n }\n\n if (splice) {\n
splices.push(splice);\n }\n return splices;\n },\n\n sharedPref
ix: function(current, old, searchLength) {\n for (var i = 0; i < searchLeng
th; i++)\n if (!this.equals(current[i], old[i]))\n return i;\n
return searchLength;\n },\n\n sharedSuffix: function(current, old, sea
rchLength) {\n var index1 = current.length;\n var index2 = old.length;
\n var count = 0;\n while (count < searchLength && this.equals(current
[--index1], old[--index2]))\n count++;\n\n return count;\n },\n\n
calculateSplices: function(current, previous) {\n return this.calcSplic
es(current, 0, current.length, previous, 0,\n previ
ous.length);\n },\n\n equals: function(currentValue, previousValue) {\n
return currentValue === previousValue;\n }\n };\n\n var arraySplice = ne
w ArraySplice();\n\n function calcSplices(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n return arraySplice.calcSplic
es(current, currentStart, currentEnd,\n old, o
ldStart, 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 intersect, span1 first\n if (start1 < start2) {\n if (end1 <
end2)\n return end1 - start2; // Overlap\n else\n return end2
- start2; // Contained\n } else {\n // Non-zero intersect, span2 first\
n if (end2 < end1)\n return end2 - start1; // Overlap\n else\n
return end1 - start1; // Contained\n }\n }\n\n function mergeSplice(
splices, index, removed, addedCount) {\n\n var splice = newSplice(index, remo
ved, 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.index += insertionOffset;\n\n if (inserted)\n continu
e;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n current.index +
current.addedCount);\n\n if (intersectCount >= 0) {\n // Merge the t
wo splices\n\n splices.splice(i, 1);\n i--;\n\n insertionOf
fset -= current.addedCount - current.removed.length;\n\n splice.addedCoun
t += current.addedCount - intersectCount;\n var deleteCount = splice.remo
ved.length +\n current.removed.length - intersectCount;
\n\n if (!splice.addedCount && !deleteCount) {\n // merged splic
e is a noop. discard.\n inserted = true;\n } else {\n v
ar removed = current.removed;\n\n if (splice.index < current.index) {\n
// some prefix of splice.removed is prepended to current.removed.\n
var prepend = splice.removed.slice(0, current.index - splice.index);\
n Array.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.remo
ved is appended to current.removed.\n var append = splice.removed.sli
ce(current.index + current.addedCount - splice.index);\n Array.protot
ype.push.apply(removed, append);\n }\n\n splice.removed = remo
ved;\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.added
Count - splice.removed.length\n current.index += offset;\n inserti
onOffset += offset;\n }\n }\n\n if (!inserted)\n splices.push(sp
lice);\n }\n\n function createInitialSplices(array, changeRecords) {\n var
splices = [];\n\n for (var i = 0; i < changeRecords.length; i++) {\n var
record = changeRecords[i];\n switch(record.type) {\n case 'splice':
\n mergeSplice(splices, record.index, record.removed.slice(), record.ad
dedCount);\n break;\n case 'add':\n case 'update':\n
case 'delete':\n if (!isIndex(record.name))\n continue;\n
var index = toNumber(record.name);\n if (index < 0)\n
continue;\n mergeSplice(splices, index, [record.oldValue], 1);\n
break;\n default:\n console.error('Unexpected record type
: ' + JSON.stringify(record));\n break;\n }\n }\n\n return s
plices;\n }\n\n function projectArraySplices(array, changeRecords) {\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(sp
lice);\n\n return\n };\n\n splices = splices.concat(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.observerSentinel_ = observerSentinel; // for testi
ng.\n global.Observer.hasObjectObserve = hasObserve;\n global.ArrayObserver =
ArrayObserver;\n global.ArrayObserver.calculateSplices = function(current, prev
ious) {\n return arraySplice.calculateSplices(current, previous);\n };\n\n
global.ArraySplice = ArraySplice;\n global.ObjectObserver = ObjectObserver;\n
global.PathObserver = PathObserver;\n global.CompoundObserver = CompoundObserve
r;\n global.Path = Path;\n global.ObserverTransform = ObserverTransform;\n})(t
ypeof global !== 'undefined' && global && typeof module !== 'undefined' && modul
e ? global : this || window);\n", | 93 "// 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 // Detect and do basic sanity checking on Object/Array.observe.\n
function detectObjectObserve() {\n if (typeof Object.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 var arr = [];\n Object.observe(test, callba
ck);\n Array.observe(arr, callback);\n test.id = 1;\n test.id = 2;\n
delete test.id;\n arr.push(1, 2);\n arr.length = 0;\n\n Object.deliver
ChangeRecords(callback);\n if (records.length !== 5)\n return false;\n\n
if (records[0].type != 'add' ||\n records[1].type != 'update' ||\n
records[2].type != 'delete' ||\n records[3].type != 'splice' ||\n
records[4].type != 'splice') {\n return false;\n }\n\n Object.un
observe(test, callback);\n Array.unobserve(arr, callback);\n\n return true
;\n }\n\n var hasObserve = detectObjectObserve();\n\n function detectEval() {
\n // Don't test for eval if we're running in a Chrome App environment.\n
// We check for APIs set that only exist in a Chrome App context.\n if (typeo
f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa
lse;\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 hasEv
al = 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(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) && numb
erIsNaN(right))\n return true;\n\n return left !== left && right !== rig
ht;\n }\n\n var createObject = ('__proto__' in {}) ?\n function(obj) { retu
rn obj; } :\n function(obj) {\n var proto = obj.__proto__;\n if (!p
roto)\n return obj;\n var newObject = Object.create(proto);\n O
bject.getOwnPropertyNames(obj).forEach(function(name) {\n Object.definePr
operty(newObject, name,\n Object.getOwnPropertyDescr
iptor(obj, name));\n });\n return newObject;\n };\n\n var identSta
rt = '[\\$_a-zA-Z]';\n var identPart = '[\\$_a-zA-Z0-9]';\n var identRegExp =
new RegExp('^' + identStart + '+' + identPart + '*' + '$');\n\n function getPat
hCharType(char) {\n if (char === undefined)\n return 'eof';\n\n var c
ode = char.charCodeAt(0);\n\n switch(code) {\n case 0x5B: // [\n ca
se 0x5D: // ]\n case 0x2E: // .\n case 0x22: // \"\n case 0x27: /
/ '\n case 0x30: // 0\n return char;\n\n case 0x5F: // _\n
case 0x24: // $\n return 'ident';\n\n case 0x20: // Space\n ca
se 0x09: // Tab\n case 0x0A: // Newline\n case 0x0D: // Return\n
case 0xA0: // No-break space\n case 0xFEFF: // Byte Order Mark\n cas
e 0x2028: // Line Separator\n case 0x2029: // Paragraph Separator\n
return 'ws';\n }\n\n // a-z, A-Z\n if ((0x61 <= code && code <= 0x7A)
|| (0x41 <= code && code <= 0x5A))\n return 'ident';\n\n // 1-9\n if
(0x31 <= code && code <= 0x39)\n return 'number';\n\n return 'else';\n
}\n\n var pathStateMachine = {\n 'beforePath': {\n 'ws': ['beforePath'
],\n 'ident': ['inIdent', 'append'],\n '[': ['beforeElement'],\n
'eof': ['afterPath']\n },\n\n 'inPath': {\n 'ws': ['inPath'],\n
'.': ['beforeIdent'],\n '[': ['beforeElement'],\n 'eof': ['afterPath']
\n },\n\n 'beforeIdent': {\n 'ws': ['beforeIdent'],\n 'ident': [
'inIdent', 'append']\n },\n\n 'inIdent': {\n 'ident': ['inIdent', 'ap
pend'],\n '0': ['inIdent', 'append'],\n 'number': ['inIdent', 'append'
],\n 'ws': ['inPath', 'push'],\n '.': ['beforeIdent', 'push'],\n
'[': ['beforeElement', 'push'],\n 'eof': ['afterPath', 'push']\n },\n\n
'beforeElement': {\n 'ws': ['beforeElement'],\n '0': ['afterZero',
'append'],\n 'number': ['inIndex', 'append'],\n \"'\": ['inSingleQuote
', 'append', ''],\n '\"': ['inDoubleQuote', 'append', '']\n },\n\n 'a
fterZero': {\n 'ws': ['afterElement', 'push'],\n ']': ['inPath', 'push
']\n },\n\n 'inIndex': {\n '0': ['inIndex', 'append'],\n 'number
': ['inIndex', 'append'],\n 'ws': ['afterElement'],\n ']': ['inPath',
'push']\n },\n\n 'inSingleQuote': {\n \"'\": ['afterElement'],\n
'eof': ['error'],\n 'else': ['inSingleQuote', 'append']\n },\n\n 'in
DoubleQuote': {\n '\"': ['afterElement'],\n 'eof': ['error'],\n '
else': ['inDoubleQuote', 'append']\n },\n\n 'afterElement': {\n 'ws':
['afterElement'],\n ']': ['inPath', 'push']\n }\n }\n\n function noop
() {}\n\n function parsePath(path) {\n var keys = [];\n var index = -1;\n
var c, newChar, key, type, transition, action, typeMap, mode = 'beforePath';
\n\n var actions = {\n push: function() {\n if (key === undefined
)\n return;\n\n keys.push(key);\n key = undefined;\n
},\n\n append: function() {\n if (key === undefined)\n key
= newChar\n else\n key += newChar;\n }\n };\n\n func
tion maybeUnescapeQuote() {\n if (index >= path.length)\n return;\n\
n var nextChar = path[index + 1];\n if ((mode == 'inSingleQuote' && ne
xtChar == \"'\") ||\n (mode == 'inDoubleQuote' && nextChar == '\"')) {\
n index++;\n newChar = nextChar;\n actions.append();\n
return true;\n }\n }\n\n while (mode) {\n index++;\n c =
path[index];\n\n if (c == '\\\\' && maybeUnescapeQuote(mode))\n con
tinue;\n\n type = getPathCharType(c);\n typeMap = pathStateMachine[mod
e];\n transition = typeMap[type] || typeMap['else'] || 'error';\n\n if
(transition == 'error')\n return; // parse error;\n\n mode = transi
tion[0];\n action = actions[transition[1]] || noop;\n newChar = transi
tion[2] === undefined ? c : transition[2];\n action();\n\n if (mode ==
= 'afterPath') {\n return keys;\n }\n }\n\n return; // parse e
rror\n }\n\n function isIdent(s) {\n return identRegExp.test(s);\n }\n\n
var constructorIsPrivate = {};\n\n function Path(parts, privateToken) {\n if
(privateToken !== constructorIsPrivate)\n throw Error('Use Path.get to ret
rieve path objects');\n\n for (var i = 0; i < parts.length; i++) {\n thi
s.push(String(parts[i]));\n }\n\n if (hasEval && this.length) {\n thi
s.getValueFrom = this.compiledGetValueFromFn();\n }\n }\n\n // TODO(rafaelw
): Make simple LRU cache\n var pathCache = {};\n\n function getPath(pathString
) {\n if (pathString instanceof Path)\n return pathString;\n\n if (pa
thString == null || pathString.length == 0)\n pathString = '';\n\n if (t
ypeof pathString != 'string') {\n if (isIndex(pathString.length)) {\n
// Constructed with array-like (pre-parsed) keys\n return new Path(path
String, constructorIsPrivate);\n }\n\n pathString = String(pathString)
;\n }\n\n var path = pathCache[pathString];\n if (path)\n return p
ath;\n\n var parts = parsePath(pathString);\n if (!parts)\n return in
validPath;\n\n var path = new Path(parts, constructorIsPrivate);\n pathCac
he[pathString] = path;\n return path;\n }\n\n Path.get = getPath;\n\n func
tion formatAccessor(key) {\n if (isIndex(key)) {\n return '[' + key + ']
';\n } else {\n return '[\"' + key.replace(/\"/g, '\\\\\"') + '\"]';\n
}\n }\n\n Path.prototype = createObject({\n __proto__: [],\n valid: tr
ue,\n\n toString: function() {\n var pathString = '';\n for (var i
= 0; i < this.length; i++) {\n var key = this[i];\n if (isIdent(ke
y)) {\n pathString += i ? '.' + key : key;\n } else {\n
pathString += formatAccessor(key);\n }\n }\n\n return pathStri
ng;\n },\n\n getValueFrom: function(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 iterateObje
cts: function(obj, observe) {\n for (var i = 0; i < this.length; i++) {\n
if (i)\n obj = obj[this[i - 1]];\n if (!isObject(obj))\n
return;\n observe(obj, this[0]);\n }\n },\n\n compiled
GetValueFromFn: function() {\n var str = '';\n var pathString = 'obj';
\n str += 'if (obj != null';\n var i = 0;\n var key;\n for (
; i < (this.length - 1); i++) {\n key = this[i];\n pathString += i
sIdent(key) ? '.' + key : formatAccessor(key);\n str += ' &&\\n ' + p
athString + ' != null';\n }\n str += ')\\n';\n\n var key = this[i
];\n pathString += isIdent(key) ? '.' + key : formatAccessor(key);\n\n
str += ' return ' + pathString + ';\\nelse\\n return undefined;';\n retu
rn 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 < th
is.length - 1; i++) {\n if (!isObject(obj))\n return false;\n
obj = obj[this[i]];\n }\n\n if (!isObject(obj))\n return f
alse;\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 = 1000;\n\n function dirtyCheck(observer) {\n var cy
cles = 0;\n while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check_()) {\n
cycles++;\n }\n if (global.testingExposeCycleCount)\n global.dir
tyCheckCycleCount = cycles;\n\n return cycles > 0;\n }\n\n function objectI
sEmpty(object) {\n for (var prop in object)\n return false;\n return
true;\n }\n\n function diffIsEmpty(diff) {\n return objectIsEmpty(diff.adde
d) &&\n objectIsEmpty(diff.removed) &&\n objectIsEmpty(diff.
changed);\n }\n\n function diffObjectFromOldObject(object, oldObject) {\n v
ar added = {};\n var removed = {};\n var changed = {};\n\n for (var pro
p in oldObject) {\n var newValue = object[prop];\n\n if (newValue !==
undefined && newValue === oldObject[prop])\n continue;\n\n if (!(pro
p in object)) {\n removed[prop] = undefined;\n continue;\n }\
n\n if (newValue !== oldObject[prop])\n changed[prop] = newValue;\n
}\n\n for (var prop in object) {\n if (prop in oldObject)\n co
ntinue;\n\n added[prop] = object[prop];\n }\n\n if (Array.isArray(obj
ect) && object.length !== oldObject.length)\n changed.length = object.lengt
h;\n\n return {\n added: added,\n removed: removed,\n changed:
changed\n };\n }\n\n var eomTasks = [];\n function runEOMTasks() {\n i
f (!eomTasks.length)\n return false;\n\n for (var i = 0; i < eomTasks.le
ngth; i++) {\n eomTasks[i]();\n }\n eomTasks.length = 0;\n return
true;\n }\n\n var runEOM = hasObserve ? (function(){\n var eomObj = { pingP
ong: true };\n var eomRunScheduled = false;\n\n Object.observe(eomObj, fun
ction() {\n runEOMTasks();\n eomRunScheduled = false;\n });\n\n
return function(fn) {\n eomTasks.push(fn);\n if (!eomRunScheduled) {\n
eomRunScheduled = true;\n eomObj.pingPong = !eomObj.pingPong;\n
}\n };\n })() :\n (function() {\n return function(fn) {\n eomTa
sks.push(fn);\n };\n })();\n\n var observedObjectCache = [];\n\n function
newObservedObject() {\n var observer;\n var object;\n var discardRecord
s = false;\n var first = true;\n\n function callback(records) {\n if
(observer && observer.state_ === OPENED && !discardRecords)\n observer.ch
eck_(records);\n }\n\n return {\n open: function(obs) {\n if (
observer)\n throw Error('ObservedObject in use');\n\n if (!first
)\n Object.deliverChangeRecords(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.deliverChangeRecords(callback);\n discardRecords = false;\n
},\n close: function() {\n observer = undefined;\n Object.un
observe(object, callback);\n observedObjectCache.push(this);\n }\n
};\n }\n\n /*\n * The observedSet abstraction is a perf optimization which
reduces the total\n * number of Object.observe observations of a set of objec
ts. The idea is that\n * groups of Observers will have some object dependencie
s in common and this\n * observed set ensures that each object in the transiti
ve closure of\n * dependencies is only observed once. The observedSet acts as
a write barrier\n * such that whenever any change comes through, all Observers
are checked for\n * changed values.\n *\n * Note that this optimization i
s explicitly moving work from setup-time to\n * change-time.\n *\n * TODO(
rafaelw): Implement \"garbage collection\". In order to move work off\n * the
critical path, when Observers are closed, their observed objects are\n * not O
bject.unobserve(d). As a result, it's possible that if the observedSet\n * is
kept open, but some Observers have been closed, it could cause \"leaks\"\n * (
prevent otherwise collectable objects from being collected). At some\n * point
, we should implement incremental \"gc\" which keeps a list of\n * observedSet
s which may need clean-up and does small amounts of cleanup on a\n * timeout u
ntil all is clean.\n */\n\n function getObservedObject(observer, object, arra
yObserve) {\n var dir = observedObjectCache.pop() || newObservedObject();\n
dir.open(observer);\n dir.observe(object, arrayObserve);\n return dir;\n
}\n\n var observedSetCache = [];\n\n function newObservedSet() {\n var ob
serverCount = 0;\n var observers = [];\n var objects = [];\n var rootOb
j;\n var rootObjProps;\n\n function observe(obj, prop) {\n if (!obj)\
n return;\n\n if (obj === rootObj)\n rootObjProps[prop] = tru
e;\n\n if (objects.indexOf(obj) < 0) {\n objects.push(obj);\n
Object.observe(obj, callback);\n }\n\n observe(Object.getPrototypeOf(
obj), prop);\n }\n\n function allRootObjNonObservedProps(recs) {\n fo
r (var i = 0; i < recs.length; i++) {\n var rec = recs[i];\n if (r
ec.object !== rootObj ||\n rootObjProps[rec.name] ||\n rec
.type === 'setPrototype') {\n return false;\n }\n }\n
return true;\n }\n\n function callback(recs) {\n if (allRootObjNonObs
ervedProps(recs))\n return;\n\n var observer;\n for (var i = 0;
i < observers.length; i++) {\n observer = observers[i];\n if (obs
erver.state_ == OPENED) {\n observer.iterateObjects_(observe);\n
}\n }\n\n for (var i = 0; i < observers.length; i++) {\n obser
ver = observers[i];\n if (observer.state_ == OPENED) {\n observe
r.check_();\n }\n }\n }\n\n var record = {\n object: unde
fined,\n objects: objects,\n open: function(obs, object) {\n if
(!rootObj) {\n rootObj = object;\n rootObjProps = {};\n
}\n\n observers.push(obs);\n observerCount++;\n obs.itera
teObjects_(observe);\n },\n close: function(obs) {\n observerCo
unt--;\n if (observerCount > 0) {\n return;\n }\n\n
for (var i = 0; i < objects.length; i++) {\n Object.unobserve(objects
[i], callback);\n Observer.unobservedCount++;\n }\n\n obs
ervers.length = 0;\n objects.length = 0;\n rootObj = undefined;\n
rootObjProps = undefined;\n observedSetCache.push(this);\n }\
n };\n\n return record;\n }\n\n var lastObservedSet;\n\n function getOb
servedSet(observer, obj) {\n if (!lastObservedSet || lastObservedSet.object !
== obj) {\n lastObservedSet = observedSetCache.pop() || newObservedSet();\n
lastObservedSet.object = obj;\n }\n lastObservedSet.open(observer, o
bj);\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 func
tion Observer() {\n this.state_ = UNOPENED;\n this.callback_ = undefined;\
n this.target_ = undefined; // TODO(rafaelw): Should be WeakRef\n this.dir
ectObserver_ = undefined;\n this.value_ = undefined;\n this.id_ = nextObse
rverId++;\n }\n\n Observer.prototype = {\n open: function(callback, target)
{\n if (this.state_ != UNOPENED)\n throw Error('Observer has alread
y been opened.');\n\n addToAll(this);\n this.callback_ = callback;\n
this.target_ = target;\n this.connect_();\n this.state_ = OPENED;\
n return this.value_;\n },\n\n close: function() {\n if (this.st
ate_ != OPENED)\n return;\n\n removeFromAll(this);\n this.disco
nnect_();\n this.value_ = undefined;\n this.callback_ = undefined;\n
this.target_ = undefined;\n this.state_ = CLOSED;\n },\n\n delive
r: function() {\n if (this.state_ != OPENED)\n return;\n\n dirt
yCheck(this);\n },\n\n report_: function(changes) {\n try {\n
this.callback_.apply(this.target_, changes);\n } catch (ex) {\n Obse
rver._errorThrownDuringCallback = true;\n console.error('Exception caught
during observer callback: ' +\n (ex.stack || ex));\n
}\n },\n\n discardChanges: function() {\n this.check_(undefined, tru
e);\n return this.value_;\n }\n }\n\n var collectObservers = !hasObser
ve;\n var allObservers;\n Observer._allObserversCount = 0;\n\n if (collectObs
ervers) {\n allObservers = [];\n }\n\n function addToAll(observer) {\n O
bserver._allObserversCount++;\n if (!collectObservers)\n return;\n\n
allObservers.push(observer);\n }\n\n function removeFromAll(observer) {\n O
bserver._allObserversCount--;\n }\n\n var runningMicrotaskCheckpoint = false;\
n\n var hasDebugForceFullDelivery = hasObserve && hasEval && (function() {\n
try {\n eval('%RunMicrotasks()');\n return true;\n } catch (ex) {\
n return false;\n }\n })();\n\n global.Platform = global.Platform || {
};\n\n global.Platform.performMicrotaskCheckpoint = function() {\n if (runni
ngMicrotaskCheckpoint)\n return;\n\n if (hasDebugForceFullDelivery) {\n
eval('%RunMicrotasks()');\n return;\n }\n\n if (!collectObserver
s)\n return;\n\n runningMicrotaskCheckpoint = true;\n\n var cycles =
0;\n var anyChanged, toCheck;\n\n do {\n cycles++;\n toCheck = a
llObservers;\n allObservers = [];\n anyChanged = false;\n\n for (
var i = 0; i < toCheck.length; i++) {\n var observer = toCheck[i];\n
if (observer.state_ != OPENED)\n continue;\n\n if (observer.c
heck_())\n anyChanged = true;\n\n allObservers.push(observer);\n
}\n if (runEOMTasks())\n anyChanged = true;\n } while (cycl
es < MAX_DIRTY_CHECK_CYCLES && anyChanged);\n\n if (global.testingExposeCycle
Count)\n global.dirtyCheckCycleCount = cycles;\n\n runningMicrotaskCheck
point = false;\n };\n\n if (collectObservers) {\n global.Platform.clearObse
rvers = function() {\n allObservers = [];\n };\n }\n\n function Object
Observer(object) {\n Observer.call(this);\n this.value_ = object;\n thi
s.oldObject_ = undefined;\n }\n\n ObjectObserver.prototype = createObject({\n
__proto__: Observer.prototype,\n\n arrayObserve: false,\n\n connect_: f
unction(callback, target) {\n if (hasObserve) {\n this.directObserve
r_ = getObservedObject(this, this.value_,\n
this.arrayObserve);\n } else {\n this.oldObject_ = this.
copyObject(this.value_);\n }\n\n },\n\n copyObject: function(object)
{\n var copy = Array.isArray(object) ? [] : {};\n for (var prop in obj
ect) {\n copy[prop] = object[prop];\n };\n if (Array.isArray(ob
ject))\n copy.length = object.length;\n return copy;\n },\n\n
check_: function(changeRecords, skipChanges) {\n var diff;\n var oldVa
lues;\n if (hasObserve) {\n if (!changeRecords)\n return fa
lse;\n\n oldValues = {};\n diff = diffObjectFromChangeRecords(this
.value_, changeRecords,\n oldValues);\
n } else {\n oldValues = this.oldObject_;\n diff = diffObject
FromOldObject(this.value_, this.oldObject_);\n }\n\n if (diffIsEmpty(d
iff))\n return false;\n\n if (!hasObserve)\n this.oldObject_
= this.copyObject(this.value_);\n\n this.report_([\n diff.added || {
},\n diff.removed || {},\n diff.changed || {},\n function(p
roperty) {\n return oldValues[property];\n }\n ]);\n\n
return 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
deliver: 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 (th
is.directObserver_)\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(ar
ray))\n throw Error('Provided object is not an Array');\n ObjectObserver
.call(this, array);\n }\n\n ArrayObserver.prototype = createObject({\n\n __
proto__: ObjectObserver.prototype,\n\n arrayObserve: true,\n\n copyObject:
function(arr) {\n return arr.slice();\n },\n\n check_: function(chan
geRecords) {\n var splices;\n if (hasObserve) {\n if (!changeRe
cords)\n return false;\n splices = projectArraySplices(this.valu
e_, changeRecords);\n } else {\n splices = calcSplices(this.value_,
0, this.value_.length,\n this.oldObject_, 0, this.o
ldObject_.length);\n }\n\n if (!splices || !splices.length)\n r
eturn false;\n\n if (!hasObserve)\n this.oldObject_ = this.copyObjec
t(this.value_);\n\n this.report_([splices]);\n return true;\n }\n
});\n\n ArrayObserver.applySplices = function(previous, current, splices) {\n
splices.forEach(function(splice) {\n var spliceArgs = [splice.index, spli
ce.removed.length];\n var addIndex = splice.index;\n while (addIndex <
splice.index + splice.addedCount) {\n spliceArgs.push(current[addIndex])
;\n addIndex++;\n }\n\n Array.prototype.splice.apply(previous,
spliceArgs);\n });\n };\n\n function PathObserver(object, path) {\n Obse
rver.call(this);\n\n this.object_ = object;\n this.path_ = getPath(path);\
n this.directObserver_ = undefined;\n }\n\n PathObserver.prototype = create
Object({\n __proto__: Observer.prototype,\n\n get path() {\n return t
his.path_;\n },\n\n connect_: function() {\n if (hasObserve)\n
this.directObserver_ = getObservedSet(this, this.object_);\n\n this.check_
(undefined, true);\n },\n\n disconnect_: function() {\n this.value_ =
undefined;\n\n if (this.directObserver_) {\n this.directObserver_.c
lose(this);\n this.directObserver_ = undefined;\n }\n },\n\n i
terateObjects_: function(observe) {\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 (skipChanges || areSameValue(this.value_, oldValue))\n
return false;\n\n this.report_([this.value_, oldValue, this]);\n ret
urn true;\n },\n\n setValue: function(newValue) {\n if (this.path_)\n
this.path_.setValueFrom(this.object_, newValue);\n }\n });\n\n func
tion CompoundObserver(reportChangesOnOpen) {\n Observer.call(this);\n\n th
is.reportChangesOnOpen_ = reportChangesOnOpen;\n this.value_ = [];\n this.
directObserver_ = undefined;\n this.observed_ = [];\n }\n\n var observerSen
tinel = {};\n\n CompoundObserver.prototype = createObject({\n __proto__: Obs
erver.prototype,\n\n connect_: function() {\n if (hasObserve) {\n
var object;\n var needsDirectObserver = false;\n for (var i = 0;
i < this.observed_.length; i += 2) {\n object = this.observed_[i]\n
if (object !== observerSentinel) {\n needsDirectObserver = true
;\n break;\n }\n }\n\n if (needsDirectObserver
)\n this.directObserver_ = getObservedSet(this, object);\n }\n\n
this.check_(undefined, !this.reportChangesOnOpen_);\n },\n\n disconnec
t_: function() {\n for (var i = 0; i < this.observed_.length; i += 2) {\n
if (this.observed_[i] === observerSentinel)\n this.observed_[i +
1].close();\n }\n this.observed_.length = 0;\n this.value_.length
= 0;\n\n if (this.directObserver_) {\n this.directObserver_.close(t
his);\n this.directObserver_ = undefined;\n }\n },\n\n addPath
: function(object, path) {\n if (this.state_ != UNOPENED && this.state_ !=
RESETTING)\n throw Error('Cannot add paths once started.');\n\n var
path = getPath(path);\n this.observed_.push(object, path);\n if (!this
.reportChangesOnOpen_)\n return;\n var index = this.observed_.length
/ 2 - 1;\n this.value_[index] = path.getValueFrom(object);\n },\n\n
addObserver: function(observer) {\n if (this.state_ != UNOPENED && this.sta
te_ != RESETTING)\n throw Error('Cannot add observers once started.');\n\
n this.observed_.push(observerSentinel, observer);\n if (!this.reportC
hangesOnOpen_)\n return;\n var index = this.observed_.length / 2 - 1
;\n this.value_[index] = observer.open(this.deliver, this);\n },\n\n
startReset: function() {\n if (this.state_ != OPENED)\n throw Error(
'Can only reset while open');\n\n this.state_ = RESETTING;\n this.disc
onnect_();\n },\n\n finishReset: function() {\n if (this.state_ != RE
SETTING)\n throw Error('Can only finishReset after startReset');\n t
his.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].iter
ateObjects(object, observe)\n }\n },\n\n check_: function(changeRecor
ds, skipChanges) {\n var oldValues;\n for (var i = 0; i < this.observe
d_.length; i += 2) {\n var object = this.observed_[i];\n var path
= this.observed_[i+1];\n var value;\n if (object === observerSenti
nel) {\n var observable = path;\n value = this.state_ === UNOP
ENED ?\n observable.open(this.deliver, this) :\n obser
vable.discardChanges();\n } else {\n value = path.getValueFrom(o
bject);\n }\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
oldValues[i / 2] = this.value_[i / 2];\n this.value_[i / 2] = value
;\n }\n\n if (!oldValues)\n return false;\n\n // TODO(rafa
elw): Having observed_ as the third callback arg here is\n // pretty lame A
PI. Fix.\n this.report_([this.value_, oldValues, this.observed_]);\n r
eturn true;\n }\n });\n\n function identFn(value) { return value; }\n\n fu
nction ObserverTransform(observable, getValueFn, setValueFn,\n
dontPassThroughSet) {\n this.callback_ = undefined;\n this.targ
et_ = undefined;\n this.value_ = undefined;\n this.observable_ = observabl
e;\n this.getValueFn_ = getValueFn || identFn;\n this.setValueFn_ = setVal
ueFn || identFn;\n // TODO(rafaelw): This is a temporary hack. PolymerExpress
ions needs this\n // at the moment because of a bug in it's dependency tracki
ng.\n this.dontPassThroughSet_ = dontPassThroughSet;\n }\n\n ObserverTransf
orm.prototype = {\n open: function(callback, target) {\n this.callback_
= callback;\n this.target_ = target;\n this.value_ =\n this.g
etValueFn_(this.observable_.open(this.observedCallback_, this));\n return t
his.value_;\n },\n\n observedCallback_: function(value) {\n value = t
his.getValueFn_(value);\n if (areSameValue(value, this.value_))\n re
turn;\n var oldValue = this.value_;\n this.value_ = value;\n this
.callback_.call(this.target_, this.value_, oldValue);\n },\n\n discardChan
ges: function() {\n this.value_ = this.getValueFn_(this.observable_.discard
Changes());\n return this.value_;\n },\n\n deliver: function() {\n
return this.observable_.deliver();\n },\n\n setValue: function(value) {
\n value = this.setValueFn_(value);\n if (!this.dontPassThroughSet_ &&
this.observable_.setValue)\n return this.observable_.setValue(value);\n
},\n\n close: function() {\n if (this.observable_)\n this.obse
rvable_.close();\n this.callback_ = undefined;\n this.target_ = undefi
ned;\n this.observable_ = undefined;\n this.value_ = undefined;\n
this.getValueFn_ = undefined;\n this.setValueFn_ = undefined;\n }\n }\
n\n var expectedRecordTypes = {\n add: true,\n update: true,\n delete:
true\n };\n\n function diffObjectFromChangeRecords(object, changeRecords, old
Values) {\n var added = {};\n var removed = {};\n\n for (var i = 0; i <
changeRecords.length; i++) {\n var record = changeRecords[i];\n if (!
expectedRecordTypes[record.type]) {\n console.error('Unknown changeRecord
type: ' + record.type);\n console.error(record);\n continue;\n
}\n\n if (!(record.name in oldValues))\n oldValues[record.name] =
record.oldValue;\n\n if (record.type == 'update')\n continue;\n\n
if (record.type == 'add') {\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.nam
e in added) {\n delete added[record.name];\n delete oldValues[reco
rd.name];\n } else {\n removed[record.name] = true;\n }\n }\
n\n for (var prop in added)\n added[prop] = object[prop];\n\n for (va
r prop in removed)\n removed[prop] = undefined;\n\n var changed = {};\n
for (var prop in oldValues) {\n if (prop in added || prop in removed)\n
continue;\n\n var newValue = object[prop];\n if (oldValues[prop
] !== newValue)\n changed[prop] = newValue;\n }\n\n return {\n
added: added,\n removed: removed,\n changed: changed\n };\n }\n\n
function newSplice(index, removed, addedCount) {\n return {\n index: i
ndex,\n removed: removed,\n addedCount: addedCount\n };\n }\n\n v
ar EDIT_LEAVE = 0;\n var EDIT_UPDATE = 1;\n var EDIT_ADD = 2;\n var EDIT_DELE
TE = 3;\n\n function ArraySplice() {}\n\n ArraySplice.prototype = {\n\n //
Note: This function is *based* on the computation of the Levenshtein\n // \"e
dit\" distance. The one change is that \"updates\" are treated as two\n // ed
its - not one. With Array splices, an update is really a delete\n // followed
by an add. By retaining this, we optimize for \"keeping\" the\n // maximum a
rray items in the original array. For example:\n //\n // 'xxxx123' -> '1
23yyyy'\n //\n // With 1-edit updates, 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 substring '123' intact.\n calcEditDistance
s: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n // \"Deletion\" columns\n var rowCount = ol
dEnd - oldStart + 1;\n var columnCount = currentEnd - currentStart + 1;\n
var distances = new Array(rowCount);\n\n // \"Addition\" rows. Initiali
ze null column.\n for (var i = 0; i < rowCount; i++) {\n distances[i
] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // I
nitialize null row\n for (var j = 0; j < columnCount; j++)\n distanc
es[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 distanc
es;\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 spliceOperationsFromEditDistances: function(distanc
es) {\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 < northWest ? west : northWest;\n else\n
min = north < northWest ? north : northWest;\n\n if (min == northWe
st) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE)
;\n } else {\n edits.push(EDIT_UPDATE);\n current
= northWest;\n }\n i--;\n j--;\n } else if (m
in == west) {\n edits.push(EDIT_DELETE);\n i--;\n cur
rent = 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 representation 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 were removed, and counting forward\n * f
rom |index|, |addedCount| items were added.\n */\n\n /**\n * Lacking
individual splice mutation information, the minimal set of\n * splices can b
e synthesized given the previous state and final state of an\n * array. The
basic approach is to calculate the edit distance matrix and\n * choose the s
hortest path through it.\n *\n * Complexity: O(l * p)\n * l: The l
ength of the current array\n * p: The length of the old array\n */\n
calcSplices: function(current, currentStart, currentEnd,\n
old, oldStart, oldEnd) {\n var prefixCount = 0;\n var suffixCoun
t = 0;\n\n var minLength = Math.min(currentEnd - currentStart, oldEnd - old
Start);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = th
is.sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.len
gth && oldEnd == old.length)\n suffixCount = this.sharedSuffix(current, o
ld, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldSt
art += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCou
nt;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n
return [];\n\n if (currentStart == currentEnd) {\n var splice =
newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n sp
lice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else
if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd
- currentStart) ];\n\n var ops = this.spliceOperationsFromEditDistances(\n
this.calcEditDistances(current, currentStart, currentEnd,\n
old, oldStart, oldEnd));\n\n var splice = undefined;\
n var splices = [];\n var index = 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 i
ndex++;\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.rem
oved.push(old[oldIndex]);\n oldIndex++;\n break;\n
case EDIT_ADD:\n if (!splice)\n splice = newSplice(ind
ex, [], 0);\n\n splice.addedCount++;\n index++;\n
break;\n case EDIT_DELETE:\n if (!splice)\n
splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldInde
x]);\n oldIndex++;\n break;\n }\n }\n\n i
f (splice) {\n splices.push(splice);\n }\n return splices;\n
},\n\n sharedPrefix: function(current, old, searchLength) {\n for (var
i = 0; i < searchLength; i++)\n if (!this.equals(current[i], old[i]))\n
return i;\n return searchLength;\n },\n\n sharedSuffix: funct
ion(current, old, searchLength) {\n var index1 = current.length;\n var
index2 = old.length;\n var count = 0;\n while (count < searchLength &
& this.equals(current[--index1], old[--index2]))\n count++;\n\n retu
rn count;\n },\n\n calculateSplices: function(current, previous) {\n
return this.calcSplices(current, 0, current.length, previous, 0,\n
previous.length);\n },\n\n equals: function(currentValue,
previousValue) {\n return currentValue === previousValue;\n }\n };\n\n
var arraySplice = new ArraySplice();\n\n function calcSplices(current, current
Start, currentEnd,\n old, oldStart, oldEnd) {\n return
arraySplice.calcSplices(current, currentStart, 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 intersect, span1 first\n if (start1 < start2)
{\n if (end1 < end2)\n return end1 - start2; // Overlap\n else
\n return end2 - start2; // Contained\n } else {\n // Non-zero in
tersect, span2 first\n if (end2 < end1)\n return end2 - start1; // O
verlap\n else\n return end1 - 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 ins
ertionOffset = 0;\n\n for (var i = 0; i < splices.length; i++) {\n var c
urrent = splices[i];\n current.index += insertionOffset;\n\n if (inser
ted)\n continue;\n\n var intersectCount = intersect(splice.index,\n
splice.index + splice.removed.length,\n
current.index,\n
current.index + current.addedCount);\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.addedCount - intersectCount;\n var dele
teCount = splice.removed.length +\n current.removed.len
gth - intersectCount;\n\n if (!splice.addedCount && !deleteCount) {\n
// merged splice is a noop. discard.\n inserted = true;\n
} else {\n var removed = current.removed;\n\n if (splice.index
< current.index) {\n // some prefix of splice.removed is prepended t
o current.removed.\n var prepend = splice.removed.slice(0, current.in
dex - splice.index);\n Array.prototype.push.apply(prepend, removed);\
n removed = prepend;\n }\n\n if (splice.index + spl
ice.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(removed, append);\n }\n\n
splice.removed = removed;\n if (current.index < splice.index) {\n
splice.index = current.index;\n }\n }\n } else if (sp
lice.index < current.index) {\n // Insert splice here.\n\n inserte
d = true;\n\n splices.splice(i, 0, splice);\n i++;\n\n var
offset = splice.addedCount - splice.removed.length\n current.index += off
set;\n insertionOffset += offset;\n }\n }\n\n if (!inserted)\n
splices.push(splice);\n }\n\n function createInitialSplices(array, chang
eRecords) {\n var splices = [];\n\n for (var i = 0; i < changeRecords.leng
th; i++) {\n var record = changeRecords[i];\n switch(record.type) {\n
case 'splice':\n mergeSplice(splices, record.index, record.remov
ed.slice(), record.addedCount);\n break;\n case 'add':\n
case 'update':\n case 'delete':\n if (!isIndex(record.name))\n
continue;\n var index = toNumber(record.name);\n if
(index < 0)\n continue;\n mergeSplice(splices, index, [recor
d.oldValue], 1);\n break;\n default:\n console.error('U
nexpected record type: ' + JSON.stringify(record));\n break;\n }\n
}\n\n return splices;\n }\n\n function projectArraySplices(array, chang
eRecords) {\n var splices = [];\n\n createInitialSplices(array, changeReco
rds).forEach(function(splice) {\n if (splice.addedCount == 1 && splice.remo
ved.length == 1) {\n if (splice.removed[0] !== array[splice.index])\n
splices.push(splice);\n\n return\n };\n\n splices = splic
es.concat(calcSplices(array, splice.index, splice.index + splice.addedCount,\n
splice.removed, 0, splice.removed.lengt
h));\n });\n\n return splices;\n }\n\n global.Observer = Observer;\n gl
obal.Observer.runEOM_ = runEOM;\n global.Observer.observerSentinel_ = observerS
entinel; // for testing.\n global.Observer.hasObjectObserve = hasObserve;\n gl
obal.ArrayObserver = ArrayObserver;\n global.ArrayObserver.calculateSplices = f
unction(current, previous) {\n return arraySplice.calculateSplices(current, p
revious);\n };\n\n global.ArraySplice = ArraySplice;\n global.ObjectObserver
= ObjectObserver;\n global.PathObserver = PathObserver;\n global.CompoundObser
ver = CompoundObserver;\n global.Path = Path;\n global.ObserverTransform = Obs
erverTransform;\n})(typeof global !== 'undefined' && global && typeof module !==
'undefined' && module ? global : this || window);\n", |
93 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", | 94 "// select ShadowDOM impl\r\nif (Platform.flags.shadow) {\r\n", |
94 "// 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 function detectEval() {
\n // Don't test for eval if we're running in a Chrome App environment.\n
// We check for APIs set that only exist in a Chrome App context.\n if (typeo
f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa
lse;\n }\n\n try {\n var f = new Function('return true;');\n ret
urn f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval =
detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('As
sertion failed');\n };\n\n var defineProperty = Object.defineProperty;\n var
getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertyDescripto
r = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from) {\n var na
mes = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n
var name = names[i];\n defineProperty(to, name, getOwnPropertyDescrip
tor(from, name));\n }\n return to;\n };\n\n function mixinStatics(to, fr
om) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names
.length; i++) {\n var name = names[i];\n switch (name) {\n case
'arguments':\n case 'caller':\n case 'length':\n case 'nam
e':\n case 'prototype':\n case 'toString':\n continue;\n
}\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n
}\n return to;\n };\n\n function oneOf(object, propertyNames) {\n for
(var i = 0; i < propertyNames.length; i++) {\n if (propertyNames[i] in obj
ect)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDes
criptor = {\n value: undefined,\n configurable: true,\n enumerable: fal
se,\n writable: true\n };\n\n function defineNonEnumerableDataProperty(obje
ct, name, value) {\n nonEnumerableDataDescriptor.value = value;\n definePr
operty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DO
M bindings are bretty busted:\n // https://bugzilla.mozilla.org/show_bug.cgi?id
=855844\n // Make sure they are create before we start modifying things.\n get
OwnPropertyNames(window);\n\n function getWrapperConstructor(node) {\n var n
ativePrototype = node.__proto__ || Object.getPrototypeOf(node);\n var wrapper
Constructor = constructorTable.get(nativePrototype);\n if (wrapperConstructor
)\n return wrapperConstructor;\n\n var parentWrapperConstructor = getWra
pperConstructor(nativePrototype);\n\n var GeneratedWrapper = createWrapperCon
structor(parentWrapperConstructor);\n registerInternal(nativePrototype, Gener
atedWrapper, node);\n\n return GeneratedWrapper;\n }\n\n function addForwar
dingProperties(nativePrototype, wrapperPrototype) {\n installProperty(nativeP
rototype, wrapperPrototype, true);\n }\n\n function registerInstanceProperties
(wrapperPrototype, instanceObject) {\n installProperty(instanceObject, wrappe
rPrototype, false);\n }\n\n var isFirefox = /Firefox/.test(navigator.userAgent
);\n\n // This is used as a fallback when 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 functi
on isEventHandlerName(name) {\n return /^on[a-z]+$/.test(name);\n }\n\n fun
ction isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9]*$/.test(name);\n }
\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?
\n new Function('return this.impl.' + name) :\n function() { retur
n 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[name] = v; };\n }\n\n function getMetho
d(name) {\n return hasEval && isIdentifierName(name) ?\n new Function(
'return this.impl.' + name +\n '.apply(this.impl, arguments)
') :\n function() { return this.impl[name].apply(this.impl, arguments); }
;\n }\n\n function getDescriptor(source, name) {\n try {\n return Obje
ct.getOwnPropertyDescriptor(source, name);\n } catch (ex) {\n // JSC and
V8 both use data properties instead of accessors which can\n // cause gett
ing the property desciptor to throw an exception.\n // https://bugs.webkit.
org/show_bug.cgi?id=49739\n return dummyDescriptor;\n }\n }\n\n functi
on installProperty(source, target, allowMethod, 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 conti
nue;\n\n if (name in target)\n continue;\n\n if (source.polymer
BlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (is
Firefox) {\n // Tickle Firefox's old bindings.\n source.__lookupGe
tter__(name);\n }\n var descriptor = getDescriptor(source, name);\n
var getter, setter;\n if (allowMethod && typeof descriptor.value === 'fu
nction') {\n target[name] = getMethod(name);\n continue;\n }\
n\n var isEvent = isEventHandlerName(name);\n if (isEvent)\n ge
tter = scope.getEventHandlerGetter(name);\n else\n getter = getGette
r(name);\n\n if (descriptor.writable || descriptor.set) {\n if (isEv
ent)\n setter = scope.getEventHandlerSetter(name);\n else\n
setter = getSetter(name);\n }\n\n defineProperty(target, name, {\
n get: getter,\n set: setter,\n configurable: descriptor.co
nfigurable,\n enumerable: descriptor.enumerable\n });\n }\n }\n\
n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapper
Constructor\n * @param {Object=} opt_instance If present, this is used to extr
act\n * properties from an instance object.\n */\n function register(na
tiveConstructor, wrapperConstructor, opt_instance) {\n var nativePrototype =
nativeConstructor.prototype;\n registerInternal(nativePrototype, wrapperConst
ructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConstructor);
\n }\n\n function registerInternal(nativePrototype, wrapperConstructor, opt_in
stance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(
constructorTable.get(nativePrototype) === undefined);\n\n constructorTable.se
t(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wrapperPro
totype, nativePrototype);\n\n addForwardingProperties(nativePrototype, wrappe
rPrototype);\n if (opt_instance)\n registerInstanceProperties(wrapperPro
totype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperP
rototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs opt
imizes objects that are used as prototypes.\n wrapperConstructor.prototype =
wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, nativeCons
tructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n
wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper construc
tor based on |object| and its\n * constructor.\n * @param {Node} object\n
* @return {Function} The generated constructor.\n */\n function registerObjec
t(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\n var
superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var Gene
ratedWrapper = createWrapperConstructor(superWrapperConstructor);\n registerI
nternal(nativePrototype, GeneratedWrapper, object);\n\n return GeneratedWrapp
er;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n
function GeneratedWrapper(node) {\n superWrapperConstructor.call(this, node
);\n }\n var p = Object.create(superWrapperConstructor.prototype);\n p.
constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n retu
rn GeneratedWrapper;\n }\n\n var OriginalDOMImplementation = window.DOMImpleme
ntation;\n var OriginalEventTarget = window.EventTarget;\n var OriginalEvent =
window.Event;\n var OriginalNode = window.Node;\n var OriginalWindow = window
.Window;\n var OriginalRange = window.Range;\n var OriginalCanvasRenderingCont
ext2D = window.CanvasRenderingContext2D;\n var OriginalWebGLRenderingContext =
window.WebGLRenderingContext;\n var OriginalSVGElementInstance = window.SVGElem
entInstance;\n\n function isWrapper(object) {\n return object instanceof wra
ppers.EventTarget ||\n object instanceof wrappers.Event ||\n
object instanceof wrappers.Range ||\n object instanceof wrappers.DOMI
mplementation ||\n object instanceof wrappers.CanvasRenderingContext2D
||\n wrappers.WebGLRenderingContext &&\n object instanc
eof wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n r
eturn OriginalEventTarget && object instanceof OriginalEventTarget ||\n
object instanceof OriginalNode ||\n object instanceof OriginalEvent
||\n object instanceof OriginalWindow ||\n object instanceof
OriginalRange ||\n object instanceof OriginalDOMImplementation ||\n
object instanceof OriginalCanvasRenderingContext2D ||\n Origi
nalWebGLRenderingContext &&\n object instanceof OriginalWebGLRende
ringContext ||\n OriginalSVGElementInstance &&\n object
instanceof OriginalSVGElementInstance;\n }\n\n /**\n * Wraps a node in a Wra
pperNode. If there already exists a wrapper for the\n * |node| that wrapper is
returned instead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n
function wrap(impl) {\n if (impl === null)\n return null;\n\n asser
t(isNative(impl));\n return impl.polymerWrapper_ ||\n (impl.polymerWra
pper_ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a
wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\
n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n
ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.im
pl;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object}
object\n * @return {Object} The native implementation object.\n */\n funct
ion unwrapIfNeeded(object) {\n return object && isWrapper(object) ? unwrap(ob
ject) : object;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @
param {Object} object\n * @return {Object} The wrapper for object.\n */\n f
unction wrapIfNeeded(object) {\n return object && !isWrapper(object) ? wrap(o
bject) : object;\n }\n\n /**\n * Overrides the current wrapper (if any) for
node.\n * @param {Node} node\n * @param {WrapperNode=} wrapper If left out t
he wrapper will be created as\n * needed next time someone wraps the node.
\n */\n function rewrap(node, wrapper) {\n if (wrapper === null)\n re
turn;\n assert(isNative(node));\n assert(wrapper === undefined || isWrappe
r(wrapper));\n node.polymerWrapper_ = wrapper;\n }\n\n var getterDescriptor
= {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n
\n function defineGetter(constructor, name, getter) {\n getterDescriptor.get
= getter;\n defineProperty(constructor.prototype, name, getterDescriptor);\n
}\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constr
uctor, name, function() {\n return wrap(this.impl[name]);\n });\n }\n\n
/**\n * Forwards existing methods on the native object to the wrapper method
s.\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.<Fun
ction>} constructors\n * @parem {Array.<string>} names\n */\n function forw
ardMethodsToWrapper(constructors, names) {\n constructors.forEach(function(co
nstructor) {\n names.forEach(function(name) {\n constructor.prototyp
e[name] = function() {\n var w = wrapIfNeeded(this);\n return
w[name].apply(w, arguments);\n };\n });\n });\n }\n\n scope.ass
ert = assert;\n scope.constructorTable = constructorTable;\n scope.defineGette
r = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope.forward
MethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n s
cope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototy
peTable = 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.wr
ap = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n
\n})(window.ShadowDOMPolyfill);\n", | 95 "// 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 function detectEval() {
\n // Don't test for eval if we're running in a Chrome App environment.\n
// We check for APIs set that only exist in a Chrome App context.\n if (typeo
f chrome !== 'undefined' && chrome.app && chrome.app.runtime) {\n return fa
lse;\n }\n\n try {\n var f = new Function('return true;');\n ret
urn f();\n } catch (ex) {\n return false;\n }\n }\n\n var hasEval =
detectEval();\n\n function assert(b) {\n if (!b)\n throw new Error('As
sertion failed');\n };\n\n var defineProperty = Object.defineProperty;\n var
getOwnPropertyNames = Object.getOwnPropertyNames;\n var getOwnPropertyDescripto
r = Object.getOwnPropertyDescriptor;\n\n function mixin(to, from) {\n var na
mes = getOwnPropertyNames(from);\n for (var i = 0; i < names.length; i++) {\n
var name = names[i];\n defineProperty(to, name, getOwnPropertyDescrip
tor(from, name));\n }\n return to;\n };\n\n function mixinStatics(to, fr
om) {\n var names = getOwnPropertyNames(from);\n for (var i = 0; i < names
.length; i++) {\n var name = names[i];\n switch (name) {\n case
'arguments':\n case 'caller':\n case 'length':\n case 'nam
e':\n case 'prototype':\n case 'toString':\n continue;\n
}\n defineProperty(to, name, getOwnPropertyDescriptor(from, name));\n
}\n return to;\n };\n\n function oneOf(object, propertyNames) {\n for
(var i = 0; i < propertyNames.length; i++) {\n if (propertyNames[i] in obj
ect)\n return propertyNames[i];\n }\n }\n\n var nonEnumerableDataDes
criptor = {\n value: undefined,\n configurable: true,\n enumerable: fal
se,\n writable: true\n };\n\n function defineNonEnumerableDataProperty(obje
ct, name, value) {\n nonEnumerableDataDescriptor.value = value;\n definePr
operty(object, name, nonEnumerableDataDescriptor);\n }\n\n // Mozilla's old DO
M bindings are bretty busted:\n // https://bugzilla.mozilla.org/show_bug.cgi?id
=855844\n // Make sure they are create before we start modifying things.\n get
OwnPropertyNames(window);\n\n function getWrapperConstructor(node) {\n var n
ativePrototype = node.__proto__ || Object.getPrototypeOf(node);\n var wrapper
Constructor = constructorTable.get(nativePrototype);\n if (wrapperConstructor
)\n return wrapperConstructor;\n\n var parentWrapperConstructor = getWra
pperConstructor(nativePrototype);\n\n var GeneratedWrapper = createWrapperCon
structor(parentWrapperConstructor);\n registerInternal(nativePrototype, Gener
atedWrapper, node);\n\n return GeneratedWrapper;\n }\n\n function addForwar
dingProperties(nativePrototype, wrapperPrototype) {\n installProperty(nativeP
rototype, wrapperPrototype, true);\n }\n\n function registerInstanceProperties
(wrapperPrototype, instanceObject) {\n installProperty(instanceObject, wrappe
rPrototype, false);\n }\n\n var isFirefox = /Firefox/.test(navigator.userAgent
);\n\n // This is used as a fallback when 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 functi
on isEventHandlerName(name) {\n return /^on[a-z]+$/.test(name);\n }\n\n fun
ction isIdentifierName(name) {\n return /^\\w[a-zA-Z_0-9]*$/.test(name);\n }
\n\n function getGetter(name) {\n return hasEval && isIdentifierName(name) ?
\n new Function('return this.impl.' + name) :\n function() { retur
n 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[name] = v; };\n }\n\n function getMetho
d(name) {\n return hasEval && isIdentifierName(name) ?\n new Function(
'return this.impl.' + name +\n '.apply(this.impl, arguments)
') :\n function() { return this.impl[name].apply(this.impl, arguments); }
;\n }\n\n function getDescriptor(source, name) {\n try {\n return Obje
ct.getOwnPropertyDescriptor(source, name);\n } catch (ex) {\n // JSC and
V8 both use data properties instead of accessors which can\n // cause gett
ing the property desciptor to throw an exception.\n // https://bugs.webkit.
org/show_bug.cgi?id=49739\n return dummyDescriptor;\n }\n }\n\n functi
on installProperty(source, target, allowMethod, 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 conti
nue;\n\n if (name in target)\n continue;\n\n if (source.polymer
BlackList_ && source.polymerBlackList_[name])\n continue;\n\n if (is
Firefox) {\n // Tickle Firefox's old bindings.\n source.__lookupGe
tter__(name);\n }\n var descriptor = getDescriptor(source, name);\n
var getter, setter;\n if (allowMethod && typeof descriptor.value === 'fu
nction') {\n target[name] = getMethod(name);\n continue;\n }\
n\n var isEvent = isEventHandlerName(name);\n if (isEvent)\n ge
tter = scope.getEventHandlerGetter(name);\n else\n getter = getGette
r(name);\n\n if (descriptor.writable || descriptor.set) {\n if (isEv
ent)\n setter = scope.getEventHandlerSetter(name);\n else\n
setter = getSetter(name);\n }\n\n defineProperty(target, name, {\
n get: getter,\n set: setter,\n configurable: descriptor.co
nfigurable,\n enumerable: descriptor.enumerable\n });\n }\n }\n\
n /**\n * @param {Function} nativeConstructor\n * @param {Function} wrapper
Constructor\n * @param {Object=} opt_instance If present, this is used to extr
act\n * properties from an instance object.\n */\n function register(na
tiveConstructor, wrapperConstructor, opt_instance) {\n var nativePrototype =
nativeConstructor.prototype;\n registerInternal(nativePrototype, wrapperConst
ructor, opt_instance);\n mixinStatics(wrapperConstructor, nativeConstructor);
\n }\n\n function registerInternal(nativePrototype, wrapperConstructor, opt_in
stance) {\n var wrapperPrototype = wrapperConstructor.prototype;\n assert(
constructorTable.get(nativePrototype) === undefined);\n\n constructorTable.se
t(nativePrototype, wrapperConstructor);\n nativePrototypeTable.set(wrapperPro
totype, nativePrototype);\n\n addForwardingProperties(nativePrototype, wrappe
rPrototype);\n if (opt_instance)\n registerInstanceProperties(wrapperPro
totype, opt_instance);\n\n defineNonEnumerableDataProperty(\n wrapperP
rototype, 'constructor', wrapperConstructor);\n // Set it again. Some VMs opt
imizes objects that are used as prototypes.\n wrapperConstructor.prototype =
wrapperPrototype;\n }\n\n function isWrapperFor(wrapperConstructor, nativeCons
tructor) {\n return constructorTable.get(nativeConstructor.prototype) ===\n
wrapperConstructor;\n }\n\n /**\n * Creates a generic wrapper construc
tor based on |object| and its\n * constructor.\n * @param {Node} object\n
* @return {Function} The generated constructor.\n */\n function registerObjec
t(object) {\n var nativePrototype = Object.getPrototypeOf(object);\n\n var
superWrapperConstructor = getWrapperConstructor(nativePrototype);\n var Gene
ratedWrapper = createWrapperConstructor(superWrapperConstructor);\n registerI
nternal(nativePrototype, GeneratedWrapper, object);\n\n return GeneratedWrapp
er;\n }\n\n function createWrapperConstructor(superWrapperConstructor) {\n
function GeneratedWrapper(node) {\n superWrapperConstructor.call(this, node
);\n }\n var p = Object.create(superWrapperConstructor.prototype);\n p.
constructor = GeneratedWrapper;\n GeneratedWrapper.prototype = p;\n\n retu
rn GeneratedWrapper;\n }\n\n var OriginalDOMImplementation = window.DOMImpleme
ntation;\n var OriginalEventTarget = window.EventTarget;\n var OriginalEvent =
window.Event;\n var OriginalNode = window.Node;\n var OriginalWindow = window
.Window;\n var OriginalRange = window.Range;\n var OriginalCanvasRenderingCont
ext2D = window.CanvasRenderingContext2D;\n var OriginalWebGLRenderingContext =
window.WebGLRenderingContext;\n var OriginalSVGElementInstance = window.SVGElem
entInstance;\n\n function isWrapper(object) {\n return object instanceof wra
ppers.EventTarget ||\n object instanceof wrappers.Event ||\n
object instanceof wrappers.Range ||\n object instanceof wrappers.DOMI
mplementation ||\n object instanceof wrappers.CanvasRenderingContext2D
||\n wrappers.WebGLRenderingContext &&\n object instanc
eof wrappers.WebGLRenderingContext;\n }\n\n function isNative(object) {\n r
eturn OriginalEventTarget && object instanceof OriginalEventTarget ||\n
object instanceof OriginalNode ||\n object instanceof OriginalEvent
||\n object instanceof OriginalWindow ||\n object instanceof
OriginalRange ||\n object instanceof OriginalDOMImplementation ||\n
object instanceof OriginalCanvasRenderingContext2D ||\n Origi
nalWebGLRenderingContext &&\n object instanceof OriginalWebGLRende
ringContext ||\n OriginalSVGElementInstance &&\n object
instanceof OriginalSVGElementInstance;\n }\n\n /**\n * Wraps a node in a Wra
pperNode. If there already exists a wrapper for the\n * |node| that wrapper is
returned instead.\n * @param {Node} node\n * @return {WrapperNode}\n */\n
function wrap(impl) {\n if (impl === null)\n return null;\n\n asser
t(isNative(impl));\n return impl.polymerWrapper_ ||\n (impl.polymerWra
pper_ = new (getWrapperConstructor(impl))(impl));\n }\n\n /**\n * Unwraps a
wrapper and returns the node it is wrapping.\n * @param {WrapperNode} wrapper\
n * @return {Node}\n */\n function unwrap(wrapper) {\n if (wrapper === n
ull)\n return null;\n assert(isWrapper(wrapper));\n return wrapper.im
pl;\n }\n\n /**\n * Unwraps object if it is a wrapper.\n * @param {Object}
object\n * @return {Object} The native implementation object.\n */\n funct
ion unwrapIfNeeded(object) {\n return object && isWrapper(object) ? unwrap(ob
ject) : object;\n }\n\n /**\n * Wraps object if it is not a wrapper.\n * @
param {Object} object\n * @return {Object} The wrapper for object.\n */\n f
unction wrapIfNeeded(object) {\n return object && !isWrapper(object) ? wrap(o
bject) : object;\n }\n\n /**\n * Overrides the current wrapper (if any) for
node.\n * @param {Node} node\n * @param {WrapperNode=} wrapper If left out t
he wrapper will be created as\n * needed next time someone wraps the node.
\n */\n function rewrap(node, wrapper) {\n if (wrapper === null)\n re
turn;\n assert(isNative(node));\n assert(wrapper === undefined || isWrappe
r(wrapper));\n node.polymerWrapper_ = wrapper;\n }\n\n var getterDescriptor
= {\n get: undefined,\n configurable: true,\n enumerable: true\n };\n
\n function defineGetter(constructor, name, getter) {\n getterDescriptor.get
= getter;\n defineProperty(constructor.prototype, name, getterDescriptor);\n
}\n\n function defineWrapGetter(constructor, name) {\n defineGetter(constr
uctor, name, function() {\n return wrap(this.impl[name]);\n });\n }\n\n
/**\n * Forwards existing methods on the native object to the wrapper method
s.\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.<Fun
ction>} constructors\n * @parem {Array.<string>} names\n */\n function forw
ardMethodsToWrapper(constructors, names) {\n constructors.forEach(function(co
nstructor) {\n names.forEach(function(name) {\n constructor.prototyp
e[name] = function() {\n var w = wrapIfNeeded(this);\n return
w[name].apply(w, arguments);\n };\n });\n });\n }\n\n scope.ass
ert = assert;\n scope.constructorTable = constructorTable;\n scope.defineGette
r = defineGetter;\n scope.defineWrapGetter = defineWrapGetter;\n scope.forward
MethodsToWrapper = forwardMethodsToWrapper;\n scope.isWrapper = isWrapper;\n s
cope.isWrapperFor = isWrapperFor;\n scope.mixin = mixin;\n scope.nativePrototy
peTable = 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.wr
ap = wrap;\n scope.wrapIfNeeded = wrapIfNeeded;\n scope.wrappers = wrappers;\n
\n})(window.ShadowDOMPolyfill);\n", |
95 "/*\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", | 96 "/*\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", |
96 "/*\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", | 97 "/*\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", |
97 "/**\n * 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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr
ee scope represents the root of a tree. All nodes in a tree point to\n * the s
ame TreeScope object. The tree scope of a node get set the first time\n * it i
s accessed or when a node is added or remove to a tree.\n *\n * The root is
a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad
owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p
aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f
unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo
t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop
e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap
pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n
}\n return null;\n },\n\n contains: function(treeScope) {\n
for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi
s)\n return true;\n }\n return false;\n }\n };\n\n funct
ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n
node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr =
sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n
setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope
(node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n
}\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent =
node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree
Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu
rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope.
getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window.
ShadowDOMPolyfill);\n", | 98 "/**\n * 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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n /**\n * A tr
ee scope represents the root of a tree. All nodes in a tree point to\n * the s
ame TreeScope object. The tree scope of a node get set the first time\n * it i
s accessed or when a node is added or remove to a tree.\n *\n * The root is
a Node that has no parent.\n *\n * The parent is another TreeScope. For Shad
owRoots, it is the TreeScope of\n * the host of the ShadowRoot.\n *\n * @p
aram {!Node} root\n * @param {TreeScope} parent\n * @constructor\n */\n f
unction TreeScope(root, parent) {\n /** @type {!Node} */\n this.root = roo
t;\n\n /** @type {TreeScope} */\n this.parent = parent;\n }\n\n TreeScop
e.prototype = {\n get renderer() {\n if (this.root instanceof scope.wrap
pers.ShadowRoot) {\n return scope.getRendererForHost(this.root.host);\n
}\n return null;\n },\n\n contains: function(treeScope) {\n
for (; treeScope; treeScope = treeScope.parent) {\n if (treeScope === thi
s)\n return true;\n }\n return false;\n }\n };\n\n funct
ion setTreeScope(node, treeScope) {\n if (node.treeScope_ !== treeScope) {\n
node.treeScope_ = treeScope;\n for (var sr = node.shadowRoot; sr; sr =
sr.olderShadowRoot) {\n sr.treeScope_.parent = treeScope;\n }\n
for (var child = node.firstChild; child; child = child.nextSibling) {\n
setTreeScope(child, treeScope);\n }\n }\n }\n\n function getTreeScope
(node) {\n if (node instanceof scope.wrappers.Window) {\n debugger;\n
}\n\n if (node.treeScope_)\n return node.treeScope_;\n var parent =
node.parentNode;\n var treeScope;\n if (parent)\n treeScope = getTree
Scope(parent);\n else\n treeScope = new TreeScope(node, null);\n retu
rn node.treeScope_ = treeScope;\n }\n\n scope.TreeScope = TreeScope;\n scope.
getTreeScope = getTreeScope;\n scope.setTreeScope = setTreeScope;\n\n})(window.
ShadowDOMPolyfill);\n", |
98 "// 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 getTreeScope = scope.getTreeScope;\n
var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va
r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp
ers;\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 WeakMap();\n var currentTargetTable =
new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable
= new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi
atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\
n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r
eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) {
\n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo
nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var
path = [];\n var current = node;\n path.push(current);\n while (current
) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti
onPoints(current);\n if (destinationInsertionPoints && destinationInsertion
Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI
nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti
onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti
onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n
// 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n
if (olderShadowRoot)\n path.push(olderShadowRoot);\n
}\n\n // 4.1.1.2\n path.push(insertionPoint);\n
}\n\n // 4.1.2\n current = destinationInsertionPoints[\n
destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n
if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even
tMustBeStopped(event)) {\n // Stop this algorithm\n break;
\n }\n current = current.host;\n path.push(current);\
n\n // 4.2.2\n } else {\n current = current.parentNode;\n
if (current)\n path.push(current);\n }\n }\n
}\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad
ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (!
event)\n return false;\n\n switch (event.type) {\n case 'abort':\n
case 'error':\n case 'select':\n case 'change':\n case 'load
':\n case 'reset':\n case 'resize':\n case 'scroll':\n case
'selectstart':\n return true;\n }\n return false;\n }\n\n // http
://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi
on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement;
\n // and make sure that there are no shadow precing this?\n // and that t
here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no
de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/
/w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet
argetting(path, currentTarget) {\n if (path.length === 0)\n return curre
ntTarget;\n\n // The currentTarget might be the window object. Use its docume
nt for the\n // purpose of finding the retargetted node.\n if (currentTarg
et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\
n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge
t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va
r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree,
originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var
node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r
eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr
eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre
eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur
n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v
ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn
cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc
estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB
.pop();\n if (a === b)\n result = a;\n else\n break;\n
}\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p
arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func
tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c
ase the current target is a window use its document for the purpose\n // of r
etargetting the related target.\n if (currentTarget instanceof wrappers.Windo
w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree =
getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT
arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\
n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr
ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree
);\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr
ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe
stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree
= commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\
n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no
de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest
orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu
nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\
n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB
LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d
uring an event\n // dispatch. The browser actually reports all errors but to do
that we would\n // need to rethrow the error asynchronously.\n var pendingErr
or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this
event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n
return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve
nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n
var err = pendingError;\n pendingError = null;\n throw err;\n
}\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (curr
entlyDispatchingEvents.get(event))\n throw new Error('InvalidStateError');\
n\n currentlyDispatchingEvents.set(event, true);\n\n // Render to ensure t
hat the event path is correct.\n scope.renderAllPending();\n var eventPath
;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappap
is.html#events-and-the-window-object\n // All events dispatched on Nodes with
a default view, except load events,\n // should propagate to the Window.\n\n
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#
the-end\n var overrideTarget;\n var win;\n var type = event.type;\n\n
// Should really be not cancelable too but since Firefox has a bug there\n
// we skip that check.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=9994
56\n if (type === 'load' && !event.bubbles) {\n var doc = originalWrappe
rTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView))
{\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n
if (!eventPath) {\n if (originalWrapperTarget instanceof wrappers.Window)
{\n win = originalWrapperTarget;\n eventPath = [];\n } else
{\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if
(event.type !== 'load') {\n var doc = eventPath[eventPath.length - 1];
\n if (doc instanceof wrappers.Document)\n win = doc.default
View;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\
n if (dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (
dispatchAtTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubb
ling(event, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTa
ble.set(event, NONE);\n currentTargetTable.delete(event, null);\n currentl
yDispatchingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n
function dispatchCapturing(event, eventPath, win, overrideTarget) {\n var p
hase = CAPTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase,
eventPath, overrideTarget))\n return false;\n }\n\n for (var i = ev
entPath.length - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase,
eventPath, overrideTarget))\n return false;\n }\n\n return true;\n
}\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n
var phase = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n retur
n invoke(currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n func
tion dispatchBubbling(event, eventPath, win, overrideTarget) {\n var phase =
BUBBLING_PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!in
voke(eventPath[i], event, phase, eventPath, overrideTarget))\n return;\n
}\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase,
eventPath, overrideTarget);\n }\n }\n\n function invoke(currentTarget, even
t, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(c
urrentTarget);\n if (!listeners)\n return true;\n\n var target = over
rideTarget || eventRetargetting(eventPath, currentTarget);\n\n if (target ===
currentTarget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\
n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else
if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n
if ('relatedTarget' in event) {\n var originalEvent = unwrap(event);\n
var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\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 (unwrappedRelatedTarget) {\n // In IE we ca
n get objects that are not EventTargets at this point.\n // Safari does n
ot have an EventTarget interface so revert to checking\n // for addEventL
istener as an approximation.\n if (unwrappedRelatedTarget instanceof Obje
ct &&\n unwrappedRelatedTarget.addEventListener) {\n var rel
atedTarget = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n
relatedTargetResolution(event, currentTarget, relatedTarget);\n i
f (adjusted === target)\n return true;\n } else {\n a
djusted = null;\n }\n relatedTargetTable.set(event, adjusted);\n
}\n }\n\n eventPhaseTable.set(event, phase);\n var type = event.typ
e;\n\n var anyRemoved = false;\n // targetTable.set(event, target);\n t
argetTable.set(event, target);\n currentTargetTable.set(event, currentTarget)
;\n\n // Keep track of the invoke depth so that we only clean up the removed\
n // listeners if we are in the outermost invoke.\n listeners.depth++;\n\n
for (var i = 0, len = listeners.length; i < len; i++) {\n var listener
= listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n
continue;\n }\n\n if (listener.type !== type ||\n !listen
er.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase
=== BUBBLING_PHASE) {\n continue;\n }\n\n try {\n if (ty
peof listener.handler === 'function')\n listener.handler.call(currentTa
rget, event);\n else\n listener.handler.handleEvent(event);\n\n
if (stopImmediatePropagationTable.get(event))\n return false;\n\
n } catch (ex) {\n if (!pendingError)\n pendingError = ex;\
n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.dep
th === 0) {\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 !stopPropagationTa
ble.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 === nul
l;\n },\n remove: function() {\n this.handler = null;\n }\n };\n\
n var OriginalEvent = window.Event;\n OriginalEvent.prototype.polymerBlackList
_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of Keyboard
Event but Firefox does not\n // support constructable KeyboardEvent so we kee
p it here for now.\n keyLocation: true\n };\n\n /**\n * Creates a new Eve
nt wrapper or wraps 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 var impl = typ
e;\n if (!OriginalBeforeUnloadEvent && impl.type === 'beforeunload')\n
return new BeforeUnloadEvent(impl);\n this.impl = impl;\n } else {\n
return wrap(constructEvent(OriginalEvent, 'Event', type, options));\n }\
n }\n Event.prototype = {\n get target() {\n return targetTable.get(th
is);\n },\n get currentTarget() {\n return currentTargetTable.get(thi
s);\n },\n get eventPhase() {\n return eventPhaseTable.get(this);\n
},\n get path() {\n var eventPath = eventPathTable.get(this);\n i
f (!eventPath)\n return [];\n // TODO(arv): Event path should contai
n window.\n return eventPath.slice();\n },\n stopPropagation: functio
n() {\n stopPropagationTable.set(this, true);\n },\n stopImmediatePro
pagation: function() {\n stopPropagationTable.set(this, true);\n stopI
mmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper(Origin
alEvent, Event, document.createEvent('Event'));\n\n function unwrapOptions(opti
ons) {\n if (!options || !options.relatedTarget)\n return options;\n
return Object.create(options, {\n relatedTarget: {value: unwrap(options.rel
atedTarget)}\n });\n }\n\n function registerGenericEvent(name, SuperEvent,
prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = func
tion(type, options) {\n if (type instanceof OriginalEvent)\n this.im
pl = type;\n else\n return wrap(constructEvent(OriginalEvent, name,
type, options));\n };\n GenericEvent.prototype = Object.create(SuperEvent.
prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prototype);
\n if (OriginalEvent) {\n // - Old versions of Safari fails on new Focus
Event (and others?).\n // - IE does not support event constructors.\n
// - createEvent('FocusEvent') throws in Firefox.\n // => Try the best prac
tice solution first and fallback to the old way\n // if needed.\n try
{\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('temp'
));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\
n document.createEvent(name));\n }\n }\n retur
n GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', Event);\
n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var relate
dTargetProto = {\n get relatedTarget() {\n var relatedTarget = relatedTa
rgetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarg
et !== undefined)\n return relatedTarget;\n return wrap(unwrap(this)
.relatedTarget);\n }\n };\n\n function getInitFunction(name, relatedTargetI
ndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(a
rguments[relatedTargetIndex]);\n var impl = unwrap(this);\n impl[name]
.apply(impl, arguments);\n };\n }\n\n var mouseEventProto = mixin({\n in
itMouseEvent: getInitFunction('initMouseEvent', 14)\n }, relatedTargetProto);\n
\n var focusEventProto = mixin({\n initFocusEvent: getInitFunction('initFocu
sEvent', 5)\n }, relatedTargetProto);\n\n var MouseEvent = registerGenericEven
t('MouseEvent', UIEvent, mouseEventProto);\n var FocusEvent = registerGenericEv
ent('FocusEvent', UIEvent, focusEventProto);\n\n // In case the browser does no
t support event constructors we polyfill that\n // by calling `createEvent('Foo
')` and `initFooEvent` where the arguments to\n // `initFooEvent` are derived f
rom the registered default event init dict.\n var defaultInitDicts = Object.cre
ate(null);\n\n var supportsEventConstructors = (function() {\n try {\n
new window.FocusEvent('focus');\n } catch (ex) {\n return false;\n }\
n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\
n function constructEvent(OriginalEvent, name, type, options) {\n if (suppor
tsEventConstructors)\n return new OriginalEvent(type, unwrapOptions(options
));\n\n // Create the arguments from the default dictionary.\n var event =
unwrap(document.createEvent(name));\n var defaultDict = defaultInitDicts[nam
e];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key)
{\n var v = options != null && key in options ?\n options[key] : d
efaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n
args.push(v);\n });\n event['init' + name].apply(event, args);\n re
turn event;\n }\n\n if (!supportsEventConstructors) {\n var configureEventC
onstructor = function(name, initDict, superName) {\n if (superName) {\n
var superDict = defaultInitDicts[superName];\n initDict = mixin(mixin
({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;
\n };\n\n // The order of the default event init dictionary keys is import
ant, the\n // arguments to initFooEvent is derived from that.\n configureE
ventConstructor('Event', {bubbles: false, cancelable: false});\n configureEve
ntConstructor('CustomEvent', {detail: null}, 'Event');\n configureEventConstr
uctor('UIEvent', {view: null, detail: 0}, 'Event');\n configureEventConstruct
or('MouseEvent', {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n
clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: fal
se,\n metaKey: false,\n button: 0,\n relatedTarget: null\n },
'UIEvent');\n configureEventConstructor('FocusEvent', {relatedTarget: null},
'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // htt
ps://bugs.webkit.org/show_bug.cgi?id=120849\n var OriginalBeforeUnloadEvent = w
indow.BeforeUnloadEvent;\n\n function BeforeUnloadEvent(impl) {\n Event.call
(this, impl);\n }\n BeforeUnloadEvent.prototype = Object.create(Event.prototyp
e);\n mixin(BeforeUnloadEvent.prototype, {\n get returnValue() {\n retu
rn this.impl.returnValue;\n },\n set returnValue(v) {\n this.impl.ret
urnValue = v;\n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWra
pper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListene
r(fun) {\n if (typeof fun === 'function')\n return true;\n return fun
&& fun.handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (typ
e) {\n case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n
case 'DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n c
ase 'DOMNodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'D
OMNodeRemoved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtre
eModified':\n return true;\n }\n return false;\n }\n\n var Origin
alEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for
an EventTarget.\n * @param {!EventTarget} impl The original event target.\n
* @constructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n
}\n\n // Node and Window have different internal type checks in WebKit so we c
annot\n // use the same method as the original function.\n var methodNames = [
\n 'addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];
\n\n [Node, Window].forEach(function(constructor) {\n var p = constructor.pr
ototype;\n methodNames.forEach(function(name) {\n Object.defineProperty(
p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListe
nAt(wrapper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper =
wrapper.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\
n addEventListener: function(type, fun, capture) {\n if (!isValidListene
r(fun) || isMutationEvent(type))\n return;\n\n var listener = new Li
stener(type, fun, capture);\n var listeners = listenersTable.get(this);\n
if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n
listenersTable.set(this, listeners);\n } else {\n // Might hav
e 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, fun, capture) {\n capture = Boolean(ca
pture);\n var listeners = listenersTable.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 count++;\n if (listeners[i].handler
=== fun) {\n found = true;\n listeners[i].remove();\n
}\n }\n }\n\n if (found && count === 1) {\n var ta
rget = getTargetToListenAt(this);\n target.removeEventListener_(type, dis
patchOriginalEvent, true);\n }\n },\n dispatchEvent: function(event)
{\n // We want to use the native dispatchEvent because it triggers the defa
ult\n // actions (like checking a checkbox). However, if there are no liste
ners\n // in the composed tree then there are no events that will trigger a
nd\n // listeners in the non composed 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 tar
get which makes us get called back even\n // in that case.\n\n var nat
iveEvent = unwrap(event);\n var eventType = nativeEvent.type;\n\n // A
llow dispatching the same event again. This is safe because if user\n // co
de calls this during an existing dispatch of the same event the\n // native
dispatchEvent throws (that is required by the spec).\n handledEventsTable.
set(nativeEvent, false);\n\n // Force rendering since we prefer native disp
atch and that works on the\n // composed tree.\n scope.renderAllPendin
g();\n\n var tempListener;\n if (!hasListenerInAncestors(this, eventTy
pe)) {\n tempListener = function() {};\n this.addEventListener(eve
ntType, tempListener, true);\n }\n\n try {\n return unwrap(this
).dispatchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n
this.removeEventListener(eventType, tempListener, true);\n }\n }
\n };\n\n function hasListener(node, type) {\n var listeners = listenersTab
le.get(node);\n if (listeners) {\n for (var i = 0; i < listeners.length;
i++) {\n if (!listeners[i].removed && listeners[i].type === type)\n
return true;\n }\n }\n return false;\n }\n\n function hasListe
nerInAncestors(target, type) {\n for (var node = unwrap(target); node; node =
node.parentNode) {\n if (hasListener(wrap(node), type))\n return tr
ue;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWr
apper(OriginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(co
nstructors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n
var originalElementFromPoint = document.elementFromPoint;\n\n function element
FromPoint(self, document, x, y) {\n scope.renderAllPending();\n\n var elem
ent = wrap(originalElementFromPoint.call(document.impl, x, y));\n if (!elemen
t)\n return null;\n var path = getEventPath(element, null);\n\n // sc
ope the path to this TreeScope\n var idx = path.lastIndexOf(self);\n if (i
dx == -1)\n return null;\n else\n path = path.slice(0, idx);\n\n
// TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\n return
eventRetargetting(path, self);\n }\n\n /**\n * Returns a function that is t
o be used as a getter for `onfoo` properties.\n * @param {string} name\n * @
return {Function}\n */\n function getEventHandlerGetter(name) {\n return f
unction() {\n var inlineEventHandlers = eventHandlersTable.get(this);\n
return inlineEventHandlers && inlineEventHandlers[name] &&\n inlineEv
entHandlers[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} na
me\n * @return {Function}\n */\n function getEventHandlerSetter(name) {\n
var eventType = name.slice(2);\n return function(value) {\n var inline
EventHandlers = eventHandlersTable.get(this);\n if (!inlineEventHandlers) {
\n inlineEventHandlers = Object.create(null);\n eventHandlersTable
.set(this, inlineEventHandlers);\n }\n\n var old = inlineEventHandlers
[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped
, false);\n\n if (typeof value === 'function') {\n var wrapped = fun
ction(e) {\n var rv = value.call(this, e);\n if (rv === false)
\n e.preventDefault();\n else if (name === 'onbeforeunload'
&& typeof rv === 'string')\n e.returnValue = rv;\n // mouseo
ver uses true for preventDefault but preventDefault for\n // mouseover
is ignored by browsers these day.\n };\n\n this.addEventListener(e
ventType, wrapped, false);\n inlineEventHandlers[name] = {\n val
ue: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n sc
ope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGetter = getEve
ntHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSetter;\n scop
e.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers.BeforeUnloa
dEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEvent;\n scop
e.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget;\n scope.
wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = MouseEvent;\n
scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n", | 99 "// 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 getTreeScope = scope.getTreeScope;\n
var mixin = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n va
r unwrap = scope.unwrap;\n var wrap = scope.wrap;\n var wrappers = scope.wrapp
ers;\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 WeakMap();\n var currentTargetTable =
new WeakMap();\n var relatedTargetTable = new WeakMap();\n var eventPhaseTable
= new WeakMap();\n var stopPropagationTable = new WeakMap();\n var stopImmedi
atePropagationTable = new WeakMap();\n var eventHandlersTable = new WeakMap();\
n var eventPathTable = new WeakMap();\n\n function isShadowRoot(node) {\n r
eturn node instanceof wrappers.ShadowRoot;\n }\n\n function rootOfNode(node) {
\n return getTreeScope(node).root;\n }\n\n // http://w3c.github.io/webcompo
nents/spec/shadow/#event-paths\n function getEventPath(node, event) {\n var
path = [];\n var current = node;\n path.push(current);\n while (current
) {\n // 4.1.\n var destinationInsertionPoints = getDestinationInserti
onPoints(current);\n if (destinationInsertionPoints && destinationInsertion
Points.length > 0) {\n // 4.1.1\n for (var i = 0; i < destinationI
nsertionPoints.length; i++) {\n var insertionPoint = destinationInserti
onPoints[i];\n // 4.1.1.1\n if (isShadowInsertionPoint(inserti
onPoint)) {\n var shadowRoot = rootOfNode(insertionPoint);\n
// 4.1.1.1.2\n var olderShadowRoot = shadowRoot.olderShadowRoot;\n
if (olderShadowRoot)\n path.push(olderShadowRoot);\n
}\n\n // 4.1.1.2\n path.push(insertionPoint);\n
}\n\n // 4.1.2\n current = destinationInsertionPoints[\n
destinationInsertionPoints.length - 1];\n\n // 4.2\n } else {\n
if (isShadowRoot(current)) {\n if (inSameTree(node, current) && even
tMustBeStopped(event)) {\n // Stop this algorithm\n break;
\n }\n current = current.host;\n path.push(current);\
n\n // 4.2.2\n } else {\n current = current.parentNode;\n
if (current)\n path.push(current);\n }\n }\n
}\n\n return path;\n }\n\n // http://w3c.github.io/webcomponents/spec/shad
ow/#dfn-events-always-stopped\n function eventMustBeStopped(event) {\n if (!
event)\n return false;\n\n switch (event.type) {\n case 'abort':\n
case 'error':\n case 'select':\n case 'change':\n case 'load
':\n case 'reset':\n case 'resize':\n case 'scroll':\n case
'selectstart':\n return true;\n }\n return false;\n }\n\n // http
://w3c.github.io/webcomponents/spec/shadow/#dfn-shadow-insertion-point\n functi
on isShadowInsertionPoint(node) {\n return node instanceof HTMLShadowElement;
\n // and make sure that there are no shadow precing this?\n // and that t
here is no content ancestor?\n }\n\n function getDestinationInsertionPoints(no
de) {\n return scope.getDestinationInsertionPoints(node);\n }\n\n // http:/
/w3c.github.io/webcomponents/spec/shadow/#event-retargeting\n function eventRet
argetting(path, currentTarget) {\n if (path.length === 0)\n return curre
ntTarget;\n\n // The currentTarget might be the window object. Use its docume
nt for the\n // purpose of finding the retargetted node.\n if (currentTarg
et instanceof wrappers.Window)\n currentTarget = currentTarget.document;\n\
n var currentTargetTree = getTreeScope(currentTarget);\n var originalTarge
t = path[0];\n var originalTargetTree = getTreeScope(originalTarget);\n va
r relativeTargetTree =\n lowestCommonInclusiveAncestor(currentTargetTree,
originalTargetTree);\n\n for (var i = 0; i < path.length; i++) {\n var
node = path[i];\n if (getTreeScope(node) === relativeTargetTree)\n r
eturn node;\n }\n\n return path[path.length - 1];\n }\n\n function getTr
eeScopeAncestors(treeScope) {\n var ancestors = [];\n for (;treeScope; tre
eScope = treeScope.parent) {\n ancestors.push(treeScope);\n }\n retur
n ancestors;\n }\n\n function lowestCommonInclusiveAncestor(tsA, tsB) {\n v
ar ancestorsA = getTreeScopeAncestors(tsA);\n var ancestorsB = getTreeScopeAn
cestors(tsB);\n\n var result = null;\n while (ancestorsA.length > 0 && anc
estorsB.length > 0) {\n var a = ancestorsA.pop();\n var b = ancestorsB
.pop();\n if (a === b)\n result = a;\n else\n break;\n
}\n return result;\n }\n\n function getTreeScopeRoot(ts) {\n if (!ts.p
arent)\n return ts;\n return getTreeScopeRoot(ts.parent);\n }\n\n func
tion relatedTargetResolution(event, currentTarget, relatedTarget) {\n // In c
ase the current target is a window use its document for the purpose\n // of r
etargetting the related target.\n if (currentTarget instanceof wrappers.Windo
w)\n currentTarget = currentTarget.document;\n\n var currentTargetTree =
getTreeScope(currentTarget);\n var relatedTargetTree = getTreeScope(relatedT
arget);\n\n var relatedTargetEventPath = getEventPath(relatedTarget, event);\
n\n var lowestCommonAncestorTree;\n\n // 4\n var lowestCommonAncestorTr
ee =\n lowestCommonInclusiveAncestor(currentTargetTree, relatedTargetTree
);\n\n // 5\n if (!lowestCommonAncestorTree)\n lowestCommonAncestorTr
ee = relatedTargetTree.root;\n\n // 6\n for (var commonAncestorTree = lowe
stCommonAncestorTree;\n commonAncestorTree;\n commonAncestorTree
= commonAncestorTree.parent) {\n // 6.1\n var adjustedRelatedTarget;\
n for (var i = 0; i < relatedTargetEventPath.length; i++) {\n var no
de = relatedTargetEventPath[i];\n if (getTreeScope(node) === commonAncest
orTree)\n return node;\n }\n }\n\n return null;\n }\n\n fu
nction inSameTree(a, b) {\n return getTreeScope(a) === getTreeScope(b);\n }\
n\n var NONE = 0;\n var CAPTURING_PHASE = 1;\n var AT_TARGET = 2;\n var BUBB
LING_PHASE = 3;\n\n // pendingError is used to rethrow the first error we got d
uring an event\n // dispatch. The browser actually reports all errors but to do
that we would\n // need to rethrow the error asynchronously.\n var pendingErr
or;\n\n function dispatchOriginalEvent(originalEvent) {\n // Make sure this
event is only dispatched once.\n if (handledEventsTable.get(originalEvent))\n
return;\n handledEventsTable.set(originalEvent, true);\n dispatchEve
nt(wrap(originalEvent), wrap(originalEvent.target));\n if (pendingError) {\n
var err = pendingError;\n pendingError = null;\n throw err;\n
}\n }\n\n function dispatchEvent(event, originalWrapperTarget) {\n if (curr
entlyDispatchingEvents.get(event))\n throw new Error('InvalidStateError');\
n\n currentlyDispatchingEvents.set(event, true);\n\n // Render to ensure t
hat the event path is correct.\n scope.renderAllPending();\n var eventPath
;\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappap
is.html#events-and-the-window-object\n // All events dispatched on Nodes with
a default view, except load events,\n // should propagate to the Window.\n\n
// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#
the-end\n var overrideTarget;\n var win;\n var type = event.type;\n\n
// Should really be not cancelable too but since Firefox has a bug there\n
// we skip that check.\n // https://bugzilla.mozilla.org/show_bug.cgi?id=9994
56\n if (type === 'load' && !event.bubbles) {\n var doc = originalWrappe
rTarget;\n if (doc instanceof wrappers.Document && (win = doc.defaultView))
{\n overrideTarget = doc;\n eventPath = [];\n }\n }\n\n
if (!eventPath) {\n if (originalWrapperTarget instanceof wrappers.Window)
{\n win = originalWrapperTarget;\n eventPath = [];\n } else
{\n eventPath = getEventPath(originalWrapperTarget, event);\n\n if
(event.type !== 'load') {\n var doc = eventPath[eventPath.length - 1];
\n if (doc instanceof wrappers.Document)\n win = doc.default
View;\n }\n }\n }\n\n eventPathTable.set(event, eventPath);\n\
n if (dispatchCapturing(event, eventPath, win, overrideTarget)) {\n if (
dispatchAtTarget(event, eventPath, win, overrideTarget)) {\n dispatchBubb
ling(event, eventPath, win, overrideTarget);\n }\n }\n\n eventPhaseTa
ble.set(event, NONE);\n currentTargetTable.delete(event, null);\n currentl
yDispatchingEvents.delete(event);\n\n return event.defaultPrevented;\n }\n\n
function dispatchCapturing(event, eventPath, win, overrideTarget) {\n var p
hase = CAPTURING_PHASE;\n\n if (win) {\n if (!invoke(win, event, phase,
eventPath, overrideTarget))\n return false;\n }\n\n for (var i = ev
entPath.length - 1; i > 0; i--) {\n if (!invoke(eventPath[i], event, phase,
eventPath, overrideTarget))\n return false;\n }\n\n return true;\n
}\n\n function dispatchAtTarget(event, eventPath, win, overrideTarget) {\n
var phase = AT_TARGET;\n var currentTarget = eventPath[0] || win;\n retur
n invoke(currentTarget, event, phase, eventPath, overrideTarget);\n }\n\n func
tion dispatchBubbling(event, eventPath, win, overrideTarget) {\n var phase =
BUBBLING_PHASE;\n for (var i = 1; i < eventPath.length; i++) {\n if (!in
voke(eventPath[i], event, phase, eventPath, overrideTarget))\n return;\n
}\n\n if (win && eventPath.length > 0) {\n invoke(win, event, phase,
eventPath, overrideTarget);\n }\n }\n\n function invoke(currentTarget, even
t, phase, eventPath, overrideTarget) {\n var listeners = listenersTable.get(c
urrentTarget);\n if (!listeners)\n return true;\n\n var target = over
rideTarget || eventRetargetting(eventPath, currentTarget);\n\n if (target ===
currentTarget) {\n if (phase === CAPTURING_PHASE)\n return true;\n\
n if (phase === BUBBLING_PHASE)\n phase = AT_TARGET;\n\n } else
if (phase === BUBBLING_PHASE && !event.bubbles) {\n return true;\n }\n\n
if ('relatedTarget' in event) {\n var originalEvent = unwrap(event);\n
var unwrappedRelatedTarget = originalEvent.relatedTarget;\n\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 (unwrappedRelatedTarget) {\n // In IE we ca
n get objects that are not EventTargets at this point.\n // Safari does n
ot have an EventTarget interface so revert to checking\n // for addEventL
istener as an approximation.\n if (unwrappedRelatedTarget instanceof Obje
ct &&\n unwrappedRelatedTarget.addEventListener) {\n var rel
atedTarget = wrap(unwrappedRelatedTarget);\n\n var adjusted =\n
relatedTargetResolution(event, currentTarget, relatedTarget);\n i
f (adjusted === target)\n return true;\n } else {\n a
djusted = null;\n }\n relatedTargetTable.set(event, adjusted);\n
}\n }\n\n eventPhaseTable.set(event, phase);\n var type = event.typ
e;\n\n var anyRemoved = false;\n // targetTable.set(event, target);\n t
argetTable.set(event, target);\n currentTargetTable.set(event, currentTarget)
;\n\n // Keep track of the invoke depth so that we only clean up the removed\
n // listeners if we are in the outermost invoke.\n listeners.depth++;\n\n
for (var i = 0, len = listeners.length; i < len; i++) {\n var listener
= listeners[i];\n if (listener.removed) {\n anyRemoved = true;\n
continue;\n }\n\n if (listener.type !== type ||\n !listen
er.capture && phase === CAPTURING_PHASE ||\n listener.capture && phase
=== BUBBLING_PHASE) {\n continue;\n }\n\n try {\n if (ty
peof listener.handler === 'function')\n listener.handler.call(currentTa
rget, event);\n else\n listener.handler.handleEvent(event);\n\n
if (stopImmediatePropagationTable.get(event))\n return false;\n\
n } catch (ex) {\n if (!pendingError)\n pendingError = ex;\
n }\n }\n\n listeners.depth--;\n\n if (anyRemoved && listeners.dep
th === 0) {\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 !stopPropagationTa
ble.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 === nul
l;\n },\n remove: function() {\n this.handler = null;\n }\n };\n\
n var OriginalEvent = window.Event;\n OriginalEvent.prototype.polymerBlackList
_ = {\n returnValue: true,\n // TODO(arv): keyLocation is part of Keyboard
Event but Firefox does not\n // support constructable KeyboardEvent so we kee
p it here for now.\n keyLocation: true\n };\n\n /**\n * Creates a new Eve
nt wrapper or wraps 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 var impl = typ
e;\n if (!OriginalBeforeUnloadEvent && impl.type === 'beforeunload')\n
return new BeforeUnloadEvent(impl);\n this.impl = impl;\n } else {\n
return wrap(constructEvent(OriginalEvent, 'Event', type, options));\n }\
n }\n Event.prototype = {\n get target() {\n return targetTable.get(th
is);\n },\n get currentTarget() {\n return currentTargetTable.get(thi
s);\n },\n get eventPhase() {\n return eventPhaseTable.get(this);\n
},\n get path() {\n var eventPath = eventPathTable.get(this);\n i
f (!eventPath)\n return [];\n // TODO(arv): Event path should contai
n window.\n return eventPath.slice();\n },\n stopPropagation: functio
n() {\n stopPropagationTable.set(this, true);\n },\n stopImmediatePro
pagation: function() {\n stopPropagationTable.set(this, true);\n stopI
mmediatePropagationTable.set(this, true);\n }\n };\n registerWrapper(Origin
alEvent, Event, document.createEvent('Event'));\n\n function unwrapOptions(opti
ons) {\n if (!options || !options.relatedTarget)\n return options;\n
return Object.create(options, {\n relatedTarget: {value: unwrap(options.rel
atedTarget)}\n });\n }\n\n function registerGenericEvent(name, SuperEvent,
prototype) {\n var OriginalEvent = window[name];\n var GenericEvent = func
tion(type, options) {\n if (type instanceof OriginalEvent)\n this.im
pl = type;\n else\n return wrap(constructEvent(OriginalEvent, name,
type, options));\n };\n GenericEvent.prototype = Object.create(SuperEvent.
prototype);\n if (prototype)\n mixin(GenericEvent.prototype, prototype);
\n if (OriginalEvent) {\n // - Old versions of Safari fails on new Focus
Event (and others?).\n // - IE does not support event constructors.\n
// - createEvent('FocusEvent') throws in Firefox.\n // => Try the best prac
tice solution first and fallback to the old way\n // if needed.\n try
{\n registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('temp'
));\n } catch (ex) {\n registerWrapper(OriginalEvent, GenericEvent,\
n document.createEvent(name));\n }\n }\n retur
n GenericEvent;\n }\n\n var UIEvent = registerGenericEvent('UIEvent', Event);\
n var CustomEvent = registerGenericEvent('CustomEvent', Event);\n\n var relate
dTargetProto = {\n get relatedTarget() {\n var relatedTarget = relatedTa
rgetTable.get(this);\n // relatedTarget can be null.\n if (relatedTarg
et !== undefined)\n return relatedTarget;\n return wrap(unwrap(this)
.relatedTarget);\n }\n };\n\n function getInitFunction(name, relatedTargetI
ndex) {\n return function() {\n arguments[relatedTargetIndex] = unwrap(a
rguments[relatedTargetIndex]);\n var impl = unwrap(this);\n impl[name]
.apply(impl, arguments);\n };\n }\n\n var mouseEventProto = mixin({\n in
itMouseEvent: getInitFunction('initMouseEvent', 14)\n }, relatedTargetProto);\n
\n var focusEventProto = mixin({\n initFocusEvent: getInitFunction('initFocu
sEvent', 5)\n }, relatedTargetProto);\n\n var MouseEvent = registerGenericEven
t('MouseEvent', UIEvent, mouseEventProto);\n var FocusEvent = registerGenericEv
ent('FocusEvent', UIEvent, focusEventProto);\n\n // In case the browser does no
t support event constructors we polyfill that\n // by calling `createEvent('Foo
')` and `initFooEvent` where the arguments to\n // `initFooEvent` are derived f
rom the registered default event init dict.\n var defaultInitDicts = Object.cre
ate(null);\n\n var supportsEventConstructors = (function() {\n try {\n
new window.FocusEvent('focus');\n } catch (ex) {\n return false;\n }\
n return true;\n })();\n\n /**\n * Constructs a new native event.\n */\
n function constructEvent(OriginalEvent, name, type, options) {\n if (suppor
tsEventConstructors)\n return new OriginalEvent(type, unwrapOptions(options
));\n\n // Create the arguments from the default dictionary.\n var event =
unwrap(document.createEvent(name));\n var defaultDict = defaultInitDicts[nam
e];\n var args = [type];\n Object.keys(defaultDict).forEach(function(key)
{\n var v = options != null && key in options ?\n options[key] : d
efaultDict[key];\n if (key === 'relatedTarget')\n v = unwrap(v);\n
args.push(v);\n });\n event['init' + name].apply(event, args);\n re
turn event;\n }\n\n if (!supportsEventConstructors) {\n var configureEventC
onstructor = function(name, initDict, superName) {\n if (superName) {\n
var superDict = defaultInitDicts[superName];\n initDict = mixin(mixin
({}, superDict), initDict);\n }\n\n defaultInitDicts[name] = initDict;
\n };\n\n // The order of the default event init dictionary keys is import
ant, the\n // arguments to initFooEvent is derived from that.\n configureE
ventConstructor('Event', {bubbles: false, cancelable: false});\n configureEve
ntConstructor('CustomEvent', {detail: null}, 'Event');\n configureEventConstr
uctor('UIEvent', {view: null, detail: 0}, 'Event');\n configureEventConstruct
or('MouseEvent', {\n screenX: 0,\n screenY: 0,\n clientX: 0,\n
clientY: 0,\n ctrlKey: false,\n altKey: false,\n shiftKey: fal
se,\n metaKey: false,\n button: 0,\n relatedTarget: null\n },
'UIEvent');\n configureEventConstructor('FocusEvent', {relatedTarget: null},
'UIEvent');\n }\n\n // Safari 7 does not yet have BeforeUnloadEvent.\n // htt
ps://bugs.webkit.org/show_bug.cgi?id=120849\n var OriginalBeforeUnloadEvent = w
indow.BeforeUnloadEvent;\n\n function BeforeUnloadEvent(impl) {\n Event.call
(this, impl);\n }\n BeforeUnloadEvent.prototype = Object.create(Event.prototyp
e);\n mixin(BeforeUnloadEvent.prototype, {\n get returnValue() {\n retu
rn this.impl.returnValue;\n },\n set returnValue(v) {\n this.impl.ret
urnValue = v;\n }\n });\n\n if (OriginalBeforeUnloadEvent)\n registerWra
pper(OriginalBeforeUnloadEvent, BeforeUnloadEvent);\n\n function isValidListene
r(fun) {\n if (typeof fun === 'function')\n return true;\n return fun
&& fun.handleEvent;\n }\n\n function isMutationEvent(type) {\n switch (typ
e) {\n case 'DOMAttrModified':\n case 'DOMAttributeNameChanged':\n
case 'DOMCharacterDataModified':\n case 'DOMElementNameChanged':\n c
ase 'DOMNodeInserted':\n case 'DOMNodeInsertedIntoDocument':\n case 'D
OMNodeRemoved':\n case 'DOMNodeRemovedFromDocument':\n case 'DOMSubtre
eModified':\n return true;\n }\n return false;\n }\n\n var Origin
alEventTarget = window.EventTarget;\n\n /**\n * This represents a wrapper for
an EventTarget.\n * @param {!EventTarget} impl The original event target.\n
* @constructor\n */\n function EventTarget(impl) {\n this.impl = impl;\n
}\n\n // Node and Window have different internal type checks in WebKit so we c
annot\n // use the same method as the original function.\n var methodNames = [
\n 'addEventListener',\n 'removeEventListener',\n 'dispatchEvent'\n ];
\n\n [Node, Window].forEach(function(constructor) {\n var p = constructor.pr
ototype;\n methodNames.forEach(function(name) {\n Object.defineProperty(
p, name + '_', {value: p[name]});\n });\n });\n\n function getTargetToListe
nAt(wrapper) {\n if (wrapper instanceof wrappers.ShadowRoot)\n wrapper =
wrapper.host;\n return unwrap(wrapper);\n }\n\n EventTarget.prototype = {\
n addEventListener: function(type, fun, capture) {\n if (!isValidListene
r(fun) || isMutationEvent(type))\n return;\n\n var listener = new Li
stener(type, fun, capture);\n var listeners = listenersTable.get(this);\n
if (!listeners) {\n listeners = [];\n listeners.depth = 0;\n
listenersTable.set(this, listeners);\n } else {\n // Might hav
e 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, fun, capture) {\n capture = Boolean(ca
pture);\n var listeners = listenersTable.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 count++;\n if (listeners[i].handler
=== fun) {\n found = true;\n listeners[i].remove();\n
}\n }\n }\n\n if (found && count === 1) {\n var ta
rget = getTargetToListenAt(this);\n target.removeEventListener_(type, dis
patchOriginalEvent, true);\n }\n },\n dispatchEvent: function(event)
{\n // We want to use the native dispatchEvent because it triggers the defa
ult\n // actions (like checking a checkbox). However, if there are no liste
ners\n // in the composed tree then there are no events that will trigger a
nd\n // listeners in the non composed 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 tar
get which makes us get called back even\n // in that case.\n\n var nat
iveEvent = unwrap(event);\n var eventType = nativeEvent.type;\n\n // A
llow dispatching the same event again. This is safe because if user\n // co
de calls this during an existing dispatch of the same event the\n // native
dispatchEvent throws (that is required by the spec).\n handledEventsTable.
set(nativeEvent, false);\n\n // Force rendering since we prefer native disp
atch and that works on the\n // composed tree.\n scope.renderAllPendin
g();\n\n var tempListener;\n if (!hasListenerInAncestors(this, eventTy
pe)) {\n tempListener = function() {};\n this.addEventListener(eve
ntType, tempListener, true);\n }\n\n try {\n return unwrap(this
).dispatchEvent_(nativeEvent);\n } finally {\n if (tempListener)\n
this.removeEventListener(eventType, tempListener, true);\n }\n }
\n };\n\n function hasListener(node, type) {\n var listeners = listenersTab
le.get(node);\n if (listeners) {\n for (var i = 0; i < listeners.length;
i++) {\n if (!listeners[i].removed && listeners[i].type === type)\n
return true;\n }\n }\n return false;\n }\n\n function hasListe
nerInAncestors(target, type) {\n for (var node = unwrap(target); node; node =
node.parentNode) {\n if (hasListener(wrap(node), type))\n return tr
ue;\n }\n return false;\n }\n\n if (OriginalEventTarget)\n registerWr
apper(OriginalEventTarget, EventTarget);\n\n function wrapEventTargetMethods(co
nstructors) {\n forwardMethodsToWrapper(constructors, methodNames);\n }\n\n
var originalElementFromPoint = document.elementFromPoint;\n\n function element
FromPoint(self, document, x, y) {\n scope.renderAllPending();\n\n var elem
ent = wrap(originalElementFromPoint.call(document.impl, x, y));\n if (!elemen
t)\n return null;\n var path = getEventPath(element, null);\n\n // sc
ope the path to this TreeScope\n var idx = path.lastIndexOf(self);\n if (i
dx == -1)\n return null;\n else\n path = path.slice(0, idx);\n\n
// TODO(dfreedm): pass idx to eventRetargetting to avoid array copy\n return
eventRetargetting(path, self);\n }\n\n /**\n * Returns a function that is t
o be used as a getter for `onfoo` properties.\n * @param {string} name\n * @
return {Function}\n */\n function getEventHandlerGetter(name) {\n return f
unction() {\n var inlineEventHandlers = eventHandlersTable.get(this);\n
return inlineEventHandlers && inlineEventHandlers[name] &&\n inlineEv
entHandlers[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} na
me\n * @return {Function}\n */\n function getEventHandlerSetter(name) {\n
var eventType = name.slice(2);\n return function(value) {\n var inline
EventHandlers = eventHandlersTable.get(this);\n if (!inlineEventHandlers) {
\n inlineEventHandlers = Object.create(null);\n eventHandlersTable
.set(this, inlineEventHandlers);\n }\n\n var old = inlineEventHandlers
[name];\n if (old)\n this.removeEventListener(eventType, old.wrapped
, false);\n\n if (typeof value === 'function') {\n var wrapped = fun
ction(e) {\n var rv = value.call(this, e);\n if (rv === false)
\n e.preventDefault();\n else if (name === 'onbeforeunload'
&& typeof rv === 'string')\n e.returnValue = rv;\n // mouseo
ver uses true for preventDefault but preventDefault for\n // mouseover
is ignored by browsers these day.\n };\n\n this.addEventListener(e
ventType, wrapped, false);\n inlineEventHandlers[name] = {\n val
ue: value,\n wrapped: wrapped\n };\n }\n };\n }\n\n sc
ope.elementFromPoint = elementFromPoint;\n scope.getEventHandlerGetter = getEve
ntHandlerGetter;\n scope.getEventHandlerSetter = getEventHandlerSetter;\n scop
e.wrapEventTargetMethods = wrapEventTargetMethods;\n scope.wrappers.BeforeUnloa
dEvent = BeforeUnloadEvent;\n scope.wrappers.CustomEvent = CustomEvent;\n scop
e.wrappers.Event = Event;\n scope.wrappers.EventTarget = EventTarget;\n scope.
wrappers.FocusEvent = FocusEvent;\n scope.wrappers.MouseEvent = MouseEvent;\n
scope.wrappers.UIEvent = UIEvent;\n\n})(window.ShadowDOMPolyfill);\n", |
99 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s
cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop
e.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n
// TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEven
t;\n if (!OriginalTouchEvent)\n return;\n\n var nativeEvent;\n try {\n
nativeEvent = document.createEvent('TouchEvent');\n } catch (ex) {\n // In C
hrome creating a TouchEvent fails if the feature is not turned on\n // which
it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enum
erable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(ob
j, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n this.impl = i
mpl;\n }\n\n Touch.prototype = {\n get target() {\n return wrap(this.i
mpl.target);\n }\n };\n\n var descr = {\n configurable: true,\n enume
rable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 's
creenX',\n 'screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'we
bkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForc
e'\n ].forEach(function(name) {\n descr.get = function() {\n return thi
s.impl[name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\
n });\n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'len
gth');\n }\n\n TouchList.prototype = {\n item: function(index) {\n ret
urn this[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n
var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i
++) {\n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length =
i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(thi
s, impl);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n
mixin(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList
(unwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT
ouchList(unwrap(this).targetTouches);\n },\n\n get changedTouches() {\n
return wrapTouchList(unwrap(this).changedTouches);\n },\n\n initTouchEv
ent: function() {\n // The only way to use this is to reuse the TouchList f
rom an existing\n // TouchEvent. Since this is WebKit/Blink proprietary API
we will not\n // implement this until someone screams.\n throw new Er
ror('Not implemented');\n }\n });\n\n registerWrapper(OriginalTouchEvent, T
ouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope.wrappers.To
uchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n})(window.Sha
dowDOMPolyfill);\n\n", | 100 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var UIEvent = s
cope.wrappers.UIEvent;\n var mixin = scope.mixin;\n var registerWrapper = scop
e.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n
// TouchEvent is WebKit/Blink only.\n var OriginalTouchEvent = window.TouchEven
t;\n if (!OriginalTouchEvent)\n return;\n\n var nativeEvent;\n try {\n
nativeEvent = document.createEvent('TouchEvent');\n } catch (ex) {\n // In C
hrome creating a TouchEvent fails if the feature is not turned on\n // which
it isn't on desktop Chrome.\n return;\n }\n\n var nonEnumDescriptor = {enum
erable: false};\n\n function nonEnum(obj, prop) {\n Object.defineProperty(ob
j, prop, nonEnumDescriptor);\n }\n\n function Touch(impl) {\n this.impl = i
mpl;\n }\n\n Touch.prototype = {\n get target() {\n return wrap(this.i
mpl.target);\n }\n };\n\n var descr = {\n configurable: true,\n enume
rable: true,\n get: null\n };\n\n [\n 'clientX',\n 'clientY',\n 's
creenX',\n 'screenY',\n 'pageX',\n 'pageY',\n 'identifier',\n 'we
bkitRadiusX',\n 'webkitRadiusY',\n 'webkitRotationAngle',\n 'webkitForc
e'\n ].forEach(function(name) {\n descr.get = function() {\n return thi
s.impl[name];\n };\n Object.defineProperty(Touch.prototype, name, descr);\
n });\n\n function TouchList() {\n this.length = 0;\n nonEnum(this, 'len
gth');\n }\n\n TouchList.prototype = {\n item: function(index) {\n ret
urn this[index];\n }\n };\n\n function wrapTouchList(nativeTouchList) {\n
var list = new TouchList();\n for (var i = 0; i < nativeTouchList.length; i
++) {\n list[i] = new Touch(nativeTouchList[i]);\n }\n list.length =
i;\n return list;\n }\n\n function TouchEvent(impl) {\n UIEvent.call(thi
s, impl);\n }\n\n TouchEvent.prototype = Object.create(UIEvent.prototype);\n\n
mixin(TouchEvent.prototype, {\n get touches() {\n return wrapTouchList
(unwrap(this).touches);\n },\n\n get targetTouches() {\n return wrapT
ouchList(unwrap(this).targetTouches);\n },\n\n get changedTouches() {\n
return wrapTouchList(unwrap(this).changedTouches);\n },\n\n initTouchEv
ent: function() {\n // The only way to use this is to reuse the TouchList f
rom an existing\n // TouchEvent. Since this is WebKit/Blink proprietary API
we will not\n // implement this until someone screams.\n throw new Er
ror('Not implemented');\n }\n });\n\n registerWrapper(OriginalTouchEvent, T
ouchEvent, nativeEvent);\n\n scope.wrappers.Touch = Touch;\n scope.wrappers.To
uchEvent = TouchEvent;\n scope.wrappers.TouchList = TouchList;\n\n})(window.Sha
dowDOMPolyfill);\n\n", |
100 "// 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 var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop
) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function
NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeLi
st.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 wrapperL
ist[i] = wrap(list[i]);\n }\n wrapperList.length = length;\n return wra
pperList;\n }\n\n function addWrapNodeListMethod(wrapperConstructor, name) {\n
wrapperConstructor.prototype[name] = function() {\n return wrapNodeList
(this.impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.
NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n
scope.wrapNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n", | 101 "// 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 var nonEnumDescriptor = {enumerable: false};\n\n function nonEnum(obj, prop
) {\n Object.defineProperty(obj, prop, nonEnumDescriptor);\n }\n\n function
NodeList() {\n this.length = 0;\n nonEnum(this, 'length');\n }\n NodeLi
st.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 wrapperL
ist[i] = wrap(list[i]);\n }\n wrapperList.length = length;\n return wra
pperList;\n }\n\n function addWrapNodeListMethod(wrapperConstructor, name) {\n
wrapperConstructor.prototype[name] = function() {\n return wrapNodeList
(this.impl[name].apply(this.impl, arguments));\n };\n }\n\n scope.wrappers.
NodeList = NodeList;\n scope.addWrapNodeListMethod = addWrapNodeListMethod;\n
scope.wrapNodeList = wrapNodeList;\n\n})(window.ShadowDOMPolyfill);\n", |
101 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I
mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers.
HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n", | 102 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n // TODO(arv): I
mplement.\n\n scope.wrapHTMLCollection = scope.wrapNodeList;\n scope.wrappers.
HTMLCollection = scope.wrappers.NodeList;\n\n})(window.ShadowDOMPolyfill);\n", |
102 "/**\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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge
t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va
r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe
tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n
var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n
var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans
ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco
pe = scope.setTreeScope;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = s
cope.unwrapIfNeeded;\n var wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapI
fNeeded;\n var wrappers = scope.wrappers;\n\n function assertIsNodeWrapper(nod
e) {\n assert(node instanceof Node);\n }\n\n function createOneElementNodeL
ist(node) {\n var nodes = new NodeList();\n nodes[0] = node;\n nodes.le
ngth = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n
* Called before 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 fro
m.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueu
eRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'ch
ildList', {\n removedNodes: nodes,\n previousSibling: node.previousSib
ling,\n nextSibling: node.nextSibling\n });\n }\n\n function enqueueRe
movalForInsertedDocumentFragment(df, nodes) {\n enqueueMutation(df, 'childLis
t', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes fro
m a DocumentFragment or a Node for removal followed\n * by an insertion.\n *
\n * This updates the internal pointers for node, previousNode and nextNode.\n
*/\n function collectNodes(node, parentNode, previousNode, nextNode) {\n
if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocume
ntFragment(node);\n\n // The extra loop is to work around bugs with Documen
tFragments in IE.\n surpressMutations = true;\n for (var i = nodes.len
gth - 1; i >= 0; i--) {\n node.removeChild(nodes[i]);\n nodes[i].p
arentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for
(var i = 0; i < nodes.length; i++) {\n nodes[i].previousSibling_ = nodes
[i - 1] || previousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextNo
de;\n }\n\n if (previousNode)\n previousNode.nextSibling_ = nod
es[0];\n if (nextNode)\n nextNode.previousSibling_ = nodes[nodes.len
gth - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeL
ist(node);\n var oldParent = node.parentNode;\n if (oldParent) {\n //
This will enqueue the mutation record for the removal as needed.\n oldPare
nt.removeChild(node);\n }\n\n node.parentNode_ = parentNode;\n node.pre
viousSibling_ = previousNode;\n node.nextSibling_ = nextNode;\n if (previo
usNode)\n previousNode.nextSibling_ = node;\n if (nextNode)\n nextN
ode.previousSibling_ = node;\n\n return nodes;\n }\n\n function collectNode
sNative(node) {\n if (node instanceof DocumentFragment)\n return collect
NodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node
);\n var oldParent = node.parentNode;\n if (oldParent)\n enqueueRemov
alForInsertedNodes(node, oldParent, nodes);\n return nodes;\n }\n\n functio
n collectNodesForDocumentFragment(node) {\n var nodes = new NodeList();\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemov
alForInsertedDocumentFragment(node, nodes);\n return nodes;\n }\n\n functio
n snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so j
ust return the same object.\n return nodeList;\n }\n\n // http://dom.spec.w
hatwg.org/#node-is-inserted\n function nodeWasAdded(node, treeScope) {\n set
TreeScope(node, treeScope);\n node.nodeIsInserted_();\n }\n\n function node
sWereAdded(nodes, parent) {\n var treeScope = getTreeScope(parent);\n for
(var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n
}\n }\n\n // http://dom.spec.whatwg.org/#node-is-removed\n function nodeW
asRemoved(node) {\n setTreeScope(node, new TreeScope(node, null));\n }\n\n
function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {
\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocum
ent(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE
?\n parent : parent.ownerDocument;\n if (ownerDoc !== child.ownerDocum
ent)\n ownerDoc.adoptNode(child);\n }\n\n function adoptNodesIfNeeded(own
er, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.
ownerDocument;\n\n // All nodes have the same ownerDocument when we get here.
\n if (ownerDoc === nodes[0].ownerDocument)\n return;\n\n for (var i
= 0; i < nodes.length; i++) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc)
;\n }\n }\n\n function unwrapNodesForInsertion(owner, nodes) {\n adoptNo
desIfNeeded(owner, nodes);\n var length = nodes.length;\n\n if (length ===
1)\n return unwrap(nodes[0]);\n\n var df = unwrap(owner.ownerDocument.c
reateDocumentFragment());\n for (var i = 0; i < length; i++) {\n df.appe
ndChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildN
odes(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_ = tm
p.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.l
astChild_ = undefined;\n }\n\n function removeAllChildNodes(wrapper) {\n if
(wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstC
hild;\n while (childWrapper) {\n assert(childWrapper.parentNode ===
wrapper);\n var nextSibling = childWrapper.nextSibling;\n var chil
dNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n
if (parentNode)\n originalRemoveChild.call(parentNode, childNode
);\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n
childWrapper.parentNode_ = null;\n childWrapper = nextSibling;\n
}\n wrapper.firstChild_ = wrapper.lastChild_ = null;\n } else {\n
var node = unwrap(wrapper);\n var child = node.firstChild;\n var next
Sibling;\n while (child) {\n nextSibling = child.nextSibling;\n
originalRemoveChild.call(node, child);\n child = nextSibling;\n }
\n }\n }\n\n function invalidateParent(node) {\n var p = node.parentNode
;\n return p && p.invalidateShadowRenderer();\n }\n\n function cleanupNodes
(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\
n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = do
cument.importNode;\n var originalCloneNode = window.Node.prototype.cloneNode;\n
\n function cloneNode(node, deep, opt_doc) {\n var clone;\n if (opt_doc)\
n clone = wrap(originalImportNode.call(opt_doc, node.impl, false));\n el
se\n clone = wrap(originalCloneNode.call(node.impl, false));\n\n if (dee
p) {\n for (var child = node.firstChild; child; child = child.nextSibling)
{\n clone.appendChild(cloneNode(child, true, opt_doc));\n }\n\n
if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent =
clone.content;\n for (var child = node.content.firstChild;\n
child;\n child = child.nextSibling) {\n cloneContent.append
Child(cloneNode(child, true, opt_doc));\n }\n }\n }\n // TODO(
arv): Some HTML elements also clone other data like value.\n return clone;\n
}\n\n function contains(self, child) {\n if (!child || getTreeScope(self) !
== getTreeScope(child))\n return false;\n\n for (var node = child; node;
node = node.parentNode) {\n if (node === self)\n return true;\n
}\n return false;\n }\n\n var OriginalNode = window.Node;\n\n /**\n * Th
is 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, original);\n\n // These propert
ies are used to override the visual references with the\n // logical ones. If
the value is undefined it means that the logical is the\n // same as the vis
ual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n th
is.parentNode_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @p
rivate\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Nod
e|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n
/**\n * @type {Node|undefined}\n * @private\n */\n this.nextSibli
ng_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n
*/\n this.previousSibling_ = undefined;\n\n this.treeScope_ = undefined;
\n }\n\n var OriginalDocumentFragment = window.DocumentFragment;\n var origin
alAppendChild = OriginalNode.prototype.appendChild;\n var originalCompareDocume
ntPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var origi
nalInsertBefore = OriginalNode.prototype.insertBefore;\n var originalRemoveChil
d = OriginalNode.prototype.removeChild;\n var originalReplaceChild = OriginalNo
de.prototype.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
throw ex;\n }\n } :\n function(parent, child) {\n ori
ginalRemoveChild.call(parent, child);\n };\n\n Node.prototype = Object.cre
ate(EventTarget.prototype);\n mixin(Node.prototype, {\n appendChild: functio
n(childWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n
\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrap
per(childWrapper);\n\n var refNode;\n if (refWrapper) {\n if (i
sWrapper(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
nodes;\n var previousNode =\n refWrapper ? refWrapper.previousSibl
ing : this.lastChild;\n\n var useNative = !this.invalidateShadowRenderer()
&&\n !invalidateParent(childWrapper);\n\n if (useNativ
e)\n nodes = collectNodesNative(childWrapper);\n else\n nodes
= collectNodes(childWrapper, this, previousNode, refWrapper);\n\n if (useN
ative) {\n ensureSameOwnerDocument(this, childWrapper);\n clearChi
ldNodes(this);\n originalInsertBefore.call(this.impl, unwrap(childWrapper
), refNode);\n } else {\n if (!previousNode)\n this.firstCh
ild_ = nodes[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[
nodes.length - 1];\n if (this.firstChild_ === undefined)\n t
his.firstChild_ = this.firstChild;\n }\n\n var parentNode = refNod
e ? refNode.parentNode : this.impl;\n\n // insertBefore refWrapper no mat
ter what the parent is?\n if (parentNode) {\n originalInsertBefo
re.call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode
);\n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n
}\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n
nextSibling: refWrapper,\n previousSibling: previousNode\n }
);\n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n
\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrap
per);\n if (childWrapper.parentNode !== this) {\n // IE has invalid
DOM trees at times.\n var found = false;\n var childNodes = this.c
hildNodes;\n for (var ieChild = this.firstChild; ieChild;\n i
eChild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n
found = true;\n break;\n }\n }\n if (!
found) {\n // TODO(arv): DOMException\n throw new Error('NotFo
undError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n
var childWrapperNextSibling = childWrapper.nextSibling;\n var childWr
apperPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidat
eShadowRenderer()) {\n // We need to remove the real node from the DOM be
fore updating the\n // pointers. This is so that that mutation event is d
ispatched before\n // the pointers have changed.\n var thisFirstCh
ild = this.firstChild;\n var thisLastChild = this.lastChild;\n\n v
ar parentNode = childNode.parentNode;\n if (parentNode)\n remove
ChildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === ch
ildWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (
thisLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviou
sSibling;\n if (childWrapperPreviousSibling)\n childWrapperPrevi
ousSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNext
Sibling) {\n childWrapperNextSibling.previousSibling_ =\n
childWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_
= childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined
;\n } else {\n clearChildNodes(this);\n removeChildOriginalHe
lper(this.impl, childNode);\n }\n\n if (!surpressMutations) {\n
enqueueMutation(this, 'childList', {\n removedNodes: createOneElementN
odeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n
previousSibling: childWrapperPreviousSibling\n });\n }\n\n r
egisterTransientObservers(this, childWrapper);\n\n return childWrapper;\n
},\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n as
sertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrap
per(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\n
} else {\n oldChildNode = oldChildWrapper;\n oldChildWrapper = wra
p(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== this) {\n
// TODO(arv): DOMException\n throw new Error('NotFoundError');\n
}\n\n var nextNode = oldChildWrapper.nextSibling;\n var previousNo
de = oldChildWrapper.previousSibling;\n var nodes;\n\n var useNative =
!this.invalidateShadowRenderer() &&\n !invalidateParent(ne
wChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNative(ne
wChildWrapper);\n } else {\n if (nextNode === newChildWrapper)\n
nextNode = newChildWrapper.nextSibling;\n nodes = collectNodes(newC
hildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNative) {\
n if (this.firstChild === oldChildWrapper)\n this.firstChild_ =
nodes[0];\n if (this.lastChild === oldChildWrapper)\n this.lastC
hild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibling_ = o
ldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefin
ed;\n\n // replaceChild no matter what the parent is?\n if (oldChi
ldNode.parentNode) {\n originalReplaceChild.call(\n oldChi
ldNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n
oldChildNode);\n }\n } else {\n ensureSameOwnerDocumen
t(this, newChildWrapper);\n clearChildNodes(this);\n originalRepla
ceChild.call(this.impl, unwrap(newChildWrapper),\n
oldChildNode);\n }\n\n enqueueMutation(this, 'childList', {\n
addedNodes: nodes,\n removedNodes: createOneElementNodeList(oldChildWr
apper),\n nextSibling: nextNode,\n previousSibling: previousNode\n
});\n\n nodeWasRemoved(oldChildWrapper);\n nodesWereAdded(nodes,
this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after
a node was inserted. Subclasses override this to invalidate\n * the rendere
r as needed.\n * @private\n */\n nodeIsInserted_: function() {\n
for (var child = this.firstChild; child; child = 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 has not been overridden, use the ori
ginal parentNode.\n return this.parentNode_ !== undefined ?\n this
.parentNode_ : wrap(this.impl.parentNode);\n },\n\n /** @type {Node} */\n
get firstChild() {\n return this.firstChild_ !== undefined ?\n
this.firstChild_ : wrap(this.impl.firstChild);\n },\n\n /** @type {Node} *
/\n get lastChild() {\n return this.lastChild_ !== 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.nextSibling);\n },\n\n /** @type
{Node} */\n get previousSibling() {\n return this.previousSibling_ !== u
ndefined ?\n this.previousSibling_ : wrap(this.impl.previousSibling);\n
},\n\n get parentElement() {\n var p = this.parentNode;\n while
(p && p.nodeType !== Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n
return p;\n },\n\n get textContent() {\n // TODO(arv): This sho
uld fallback to this.impl.textContent if there\n // are no shadow trees bel
ow or above the context node.\n var s = '';\n for (var child = this.fi
rstChild; child; child = child.nextSibling) {\n if (child.nodeType != Nod
e.COMMENT_NODE) {\n s += child.textContent;\n }\n }\n
return s;\n },\n set textContent(textContent) {\n var removedNodes =
snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRenderer())
{\n removeAllChildNodes(this);\n if (textContent !== '') {\n
var textNode = this.impl.ownerDocument.createTextNode(textContent);\n
this.appendChild(textNode);\n }\n } else {\n clearChildNo
des(this);\n this.impl.textContent = textContent;\n }\n\n var a
ddedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this, 'c
hildList', {\n addedNodes: addedNodes,\n removedNodes: removedNode
s\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded(adde
dNodes, this);\n },\n\n get childNodes() {\n var wrapperList = new No
deList();\n var i = 0;\n for (var child = this.firstChild; child; chil
d = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrap
perList.length = i;\n return wrapperList;\n },\n\n cloneNode: functio
n(deep) {\n return cloneNode(this, deep);\n },\n\n contains: function
(child) {\n return contains(this, wrapIfNeeded(child));\n },\n\n comp
areDocumentPosition: function(otherNode) {\n // This only wraps, it therefo
re only operates on the composed DOM and not\n // the logical DOM.\n r
eturn originalCompareDocumentPosition.call(this.impl,\n
unwrapIfNeeded(otherNode));\n },\n\n normalize: f
unction() {\n var nodes = snapshotNodeList(this.childNodes);\n var rem
Nodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i
< nodes.length; i++) {\n n = nodes[i];\n if (n.nodeType === Node.
TEXT_NODE) {\n if (!modNode && !n.data.length)\n this.remove
Node(n);\n else if (!modNode)\n modNode = n;\n else
{\n s += n.data;\n remNodes.push(n);\n }\n
} else {\n if (modNode && remNodes.length) {\n modNode.dat
a += s;\n cleanupNodes(remNodes);\n }\n remNodes =
[];\n s = '';\n modNode = null;\n if (n.childNodes.le
ngth)\n n.normalize();\n }\n }\n\n // handle case wh
ere >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 DocumentFrag
ment as a base and then delete the properties of\n // DocumentFragment.prototyp
e from the wrapper Node. Since delete makes\n // objects slow in some JS engine
s we recreate the prototype object.\n registerWrapper(OriginalNode, Node, docum
ent.createDocumentFragment());\n delete Node.prototype.querySelector;\n delete
Node.prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(EventT
arget.prototype), Node.prototype);\n\n scope.cloneNode = cloneNode;\n scope.no
deWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRemoved;\n scope.no
desWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = nodesWereRemoved;\n
scope.snapshotNodeList = snapshotNodeList;\n scope.wrappers.Node = Node;\n\n})(
window.ShadowDOMPolyfill);\n", | 103 "/**\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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var EventTarge
t = scope.wrappers.EventTarget;\n var NodeList = scope.wrappers.NodeList;\n va
r TreeScope = scope.TreeScope;\n var assert = scope.assert;\n var defineWrapGe
tter = scope.defineWrapGetter;\n var enqueueMutation = scope.enqueueMutation;\n
var getTreeScope = scope.getTreeScope;\n var isWrapper = scope.isWrapper;\n
var mixin = scope.mixin;\n var registerTransientObservers = scope.registerTrans
ientObservers;\n var registerWrapper = scope.registerWrapper;\n var setTreeSco
pe = scope.setTreeScope;\n var unwrap = scope.unwrap;\n var unwrapIfNeeded = s
cope.unwrapIfNeeded;\n var wrap = scope.wrap;\n var wrapIfNeeded = scope.wrapI
fNeeded;\n var wrappers = scope.wrappers;\n\n function assertIsNodeWrapper(nod
e) {\n assert(node instanceof Node);\n }\n\n function createOneElementNodeL
ist(node) {\n var nodes = new NodeList();\n nodes[0] = node;\n nodes.le
ngth = 1;\n return nodes;\n }\n\n var surpressMutations = false;\n\n /**\n
* Called before 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 fro
m.\n * @param {!NodeList} nodes The collected nodes.\n */\n function enqueu
eRemovalForInsertedNodes(node, parent, nodes) {\n enqueueMutation(parent, 'ch
ildList', {\n removedNodes: nodes,\n previousSibling: node.previousSib
ling,\n nextSibling: node.nextSibling\n });\n }\n\n function enqueueRe
movalForInsertedDocumentFragment(df, nodes) {\n enqueueMutation(df, 'childLis
t', {\n removedNodes: nodes\n });\n }\n\n /**\n * Collects nodes fro
m a DocumentFragment or a Node for removal followed\n * by an insertion.\n *
\n * This updates the internal pointers for node, previousNode and nextNode.\n
*/\n function collectNodes(node, parentNode, previousNode, nextNode) {\n
if (node instanceof DocumentFragment) {\n var nodes = collectNodesForDocume
ntFragment(node);\n\n // The extra loop is to work around bugs with Documen
tFragments in IE.\n surpressMutations = true;\n for (var i = nodes.len
gth - 1; i >= 0; i--) {\n node.removeChild(nodes[i]);\n nodes[i].p
arentNode_ = parentNode;\n }\n surpressMutations = false;\n\n for
(var i = 0; i < nodes.length; i++) {\n nodes[i].previousSibling_ = nodes
[i - 1] || previousNode;\n nodes[i].nextSibling_ = nodes[i + 1] || nextNo
de;\n }\n\n if (previousNode)\n previousNode.nextSibling_ = nod
es[0];\n if (nextNode)\n nextNode.previousSibling_ = nodes[nodes.len
gth - 1];\n\n return nodes;\n }\n\n var nodes = createOneElementNodeL
ist(node);\n var oldParent = node.parentNode;\n if (oldParent) {\n //
This will enqueue the mutation record for the removal as needed.\n oldPare
nt.removeChild(node);\n }\n\n node.parentNode_ = parentNode;\n node.pre
viousSibling_ = previousNode;\n node.nextSibling_ = nextNode;\n if (previo
usNode)\n previousNode.nextSibling_ = node;\n if (nextNode)\n nextN
ode.previousSibling_ = node;\n\n return nodes;\n }\n\n function collectNode
sNative(node) {\n if (node instanceof DocumentFragment)\n return collect
NodesForDocumentFragment(node);\n\n var nodes = createOneElementNodeList(node
);\n var oldParent = node.parentNode;\n if (oldParent)\n enqueueRemov
alForInsertedNodes(node, oldParent, nodes);\n return nodes;\n }\n\n functio
n collectNodesForDocumentFragment(node) {\n var nodes = new NodeList();\n
var i = 0;\n for (var child = node.firstChild; child; child = child.nextSibli
ng) {\n nodes[i++] = child;\n }\n nodes.length = i;\n enqueueRemov
alForInsertedDocumentFragment(node, nodes);\n return nodes;\n }\n\n functio
n snapshotNodeList(nodeList) {\n // NodeLists are not live at the moment so j
ust return the same object.\n return nodeList;\n }\n\n // http://dom.spec.w
hatwg.org/#node-is-inserted\n function nodeWasAdded(node, treeScope) {\n set
TreeScope(node, treeScope);\n node.nodeIsInserted_();\n }\n\n function node
sWereAdded(nodes, parent) {\n var treeScope = getTreeScope(parent);\n for
(var i = 0; i < nodes.length; i++) {\n nodeWasAdded(nodes[i], treeScope);\n
}\n }\n\n // http://dom.spec.whatwg.org/#node-is-removed\n function nodeW
asRemoved(node) {\n setTreeScope(node, new TreeScope(node, null));\n }\n\n
function nodesWereRemoved(nodes) {\n for (var i = 0; i < nodes.length; i++) {
\n nodeWasRemoved(nodes[i]);\n }\n }\n\n function ensureSameOwnerDocum
ent(parent, child) {\n var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE
?\n parent : parent.ownerDocument;\n if (ownerDoc !== child.ownerDocum
ent)\n ownerDoc.adoptNode(child);\n }\n\n function adoptNodesIfNeeded(own
er, nodes) {\n if (!nodes.length)\n return;\n\n var ownerDoc = owner.
ownerDocument;\n\n // All nodes have the same ownerDocument when we get here.
\n if (ownerDoc === nodes[0].ownerDocument)\n return;\n\n for (var i
= 0; i < nodes.length; i++) {\n scope.adoptNodeNoRemove(nodes[i], ownerDoc)
;\n }\n }\n\n function unwrapNodesForInsertion(owner, nodes) {\n adoptNo
desIfNeeded(owner, nodes);\n var length = nodes.length;\n\n if (length ===
1)\n return unwrap(nodes[0]);\n\n var df = unwrap(owner.ownerDocument.c
reateDocumentFragment());\n for (var i = 0; i < length; i++) {\n df.appe
ndChild(unwrap(nodes[i]));\n }\n return df;\n }\n\n function clearChildN
odes(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_ = tm
p.nextSibling_ = undefined;\n }\n }\n wrapper.firstChild_ = wrapper.l
astChild_ = undefined;\n }\n\n function removeAllChildNodes(wrapper) {\n if
(wrapper.invalidateShadowRenderer()) {\n var childWrapper = wrapper.firstC
hild;\n while (childWrapper) {\n assert(childWrapper.parentNode ===
wrapper);\n var nextSibling = childWrapper.nextSibling;\n var chil
dNode = unwrap(childWrapper);\n var parentNode = childNode.parentNode;\n
if (parentNode)\n originalRemoveChild.call(parentNode, childNode
);\n childWrapper.previousSibling_ = childWrapper.nextSibling_ =\n
childWrapper.parentNode_ = null;\n childWrapper = nextSibling;\n
}\n wrapper.firstChild_ = wrapper.lastChild_ = null;\n } else {\n
var node = unwrap(wrapper);\n var child = node.firstChild;\n var next
Sibling;\n while (child) {\n nextSibling = child.nextSibling;\n
originalRemoveChild.call(node, child);\n child = nextSibling;\n }
\n }\n }\n\n function invalidateParent(node) {\n var p = node.parentNode
;\n return p && p.invalidateShadowRenderer();\n }\n\n function cleanupNodes
(nodes) {\n for (var i = 0, n; i < nodes.length; i++) {\n n = nodes[i];\
n n.parentNode.removeChild(n);\n }\n }\n\n var originalImportNode = do
cument.importNode;\n var originalCloneNode = window.Node.prototype.cloneNode;\n
\n function cloneNode(node, deep, opt_doc) {\n var clone;\n if (opt_doc)\
n clone = wrap(originalImportNode.call(opt_doc, node.impl, false));\n el
se\n clone = wrap(originalCloneNode.call(node.impl, false));\n\n if (dee
p) {\n for (var child = node.firstChild; child; child = child.nextSibling)
{\n clone.appendChild(cloneNode(child, true, opt_doc));\n }\n\n
if (node instanceof wrappers.HTMLTemplateElement) {\n var cloneContent =
clone.content;\n for (var child = node.content.firstChild;\n
child;\n child = child.nextSibling) {\n cloneContent.append
Child(cloneNode(child, true, opt_doc));\n }\n }\n }\n // TODO(
arv): Some HTML elements also clone other data like value.\n return clone;\n
}\n\n function contains(self, child) {\n if (!child || getTreeScope(self) !
== getTreeScope(child))\n return false;\n\n for (var node = child; node;
node = node.parentNode) {\n if (node === self)\n return true;\n
}\n return false;\n }\n\n var OriginalNode = window.Node;\n\n /**\n * Th
is 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, original);\n\n // These propert
ies are used to override the visual references with the\n // logical ones. If
the value is undefined it means that the logical is the\n // same as the vis
ual.\n\n /**\n * @type {Node|undefined}\n * @private\n */\n th
is.parentNode_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @p
rivate\n */\n this.firstChild_ = undefined;\n\n /**\n * @type {Nod
e|undefined}\n * @private\n */\n this.lastChild_ = undefined;\n\n
/**\n * @type {Node|undefined}\n * @private\n */\n this.nextSibli
ng_ = undefined;\n\n /**\n * @type {Node|undefined}\n * @private\n
*/\n this.previousSibling_ = undefined;\n\n this.treeScope_ = undefined;
\n }\n\n var OriginalDocumentFragment = window.DocumentFragment;\n var origin
alAppendChild = OriginalNode.prototype.appendChild;\n var originalCompareDocume
ntPosition =\n OriginalNode.prototype.compareDocumentPosition;\n var origi
nalInsertBefore = OriginalNode.prototype.insertBefore;\n var originalRemoveChil
d = OriginalNode.prototype.removeChild;\n var originalReplaceChild = OriginalNo
de.prototype.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
throw ex;\n }\n } :\n function(parent, child) {\n ori
ginalRemoveChild.call(parent, child);\n };\n\n Node.prototype = Object.cre
ate(EventTarget.prototype);\n mixin(Node.prototype, {\n appendChild: functio
n(childWrapper) {\n return this.insertBefore(childWrapper, null);\n },\n
\n insertBefore: function(childWrapper, refWrapper) {\n assertIsNodeWrap
per(childWrapper);\n\n var refNode;\n if (refWrapper) {\n if (i
sWrapper(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
nodes;\n var previousNode =\n refWrapper ? refWrapper.previousSibl
ing : this.lastChild;\n\n var useNative = !this.invalidateShadowRenderer()
&&\n !invalidateParent(childWrapper);\n\n if (useNativ
e)\n nodes = collectNodesNative(childWrapper);\n else\n nodes
= collectNodes(childWrapper, this, previousNode, refWrapper);\n\n if (useN
ative) {\n ensureSameOwnerDocument(this, childWrapper);\n clearChi
ldNodes(this);\n originalInsertBefore.call(this.impl, unwrap(childWrapper
), refNode);\n } else {\n if (!previousNode)\n this.firstCh
ild_ = nodes[0];\n if (!refWrapper) {\n this.lastChild_ = nodes[
nodes.length - 1];\n if (this.firstChild_ === undefined)\n t
his.firstChild_ = this.firstChild;\n }\n\n var parentNode = refNod
e ? refNode.parentNode : this.impl;\n\n // insertBefore refWrapper no mat
ter what the parent is?\n if (parentNode) {\n originalInsertBefo
re.call(parentNode,\n unwrapNodesForInsertion(this, nodes), refNode
);\n } else {\n adoptNodesIfNeeded(this, nodes);\n }\n
}\n\n enqueueMutation(this, 'childList', {\n addedNodes: nodes,\n
nextSibling: refWrapper,\n previousSibling: previousNode\n }
);\n\n nodesWereAdded(nodes, this);\n\n return childWrapper;\n },\n
\n removeChild: function(childWrapper) {\n assertIsNodeWrapper(childWrap
per);\n if (childWrapper.parentNode !== this) {\n // IE has invalid
DOM trees at times.\n var found = false;\n var childNodes = this.c
hildNodes;\n for (var ieChild = this.firstChild; ieChild;\n i
eChild = ieChild.nextSibling) {\n if (ieChild === childWrapper) {\n
found = true;\n break;\n }\n }\n if (!
found) {\n // TODO(arv): DOMException\n throw new Error('NotFo
undError');\n }\n }\n\n var childNode = unwrap(childWrapper);\n
var childWrapperNextSibling = childWrapper.nextSibling;\n var childWr
apperPreviousSibling = childWrapper.previousSibling;\n\n if (this.invalidat
eShadowRenderer()) {\n // We need to remove the real node from the DOM be
fore updating the\n // pointers. This is so that that mutation event is d
ispatched before\n // the pointers have changed.\n var thisFirstCh
ild = this.firstChild;\n var thisLastChild = this.lastChild;\n\n v
ar parentNode = childNode.parentNode;\n if (parentNode)\n remove
ChildOriginalHelper(parentNode, childNode);\n\n if (thisFirstChild === ch
ildWrapper)\n this.firstChild_ = childWrapperNextSibling;\n if (
thisLastChild === childWrapper)\n this.lastChild_ = childWrapperPreviou
sSibling;\n if (childWrapperPreviousSibling)\n childWrapperPrevi
ousSibling.nextSibling_ = childWrapperNextSibling;\n if (childWrapperNext
Sibling) {\n childWrapperNextSibling.previousSibling_ =\n
childWrapperPreviousSibling;\n }\n\n childWrapper.previousSibling_
= childWrapper.nextSibling_ =\n childWrapper.parentNode_ = undefined
;\n } else {\n clearChildNodes(this);\n removeChildOriginalHe
lper(this.impl, childNode);\n }\n\n if (!surpressMutations) {\n
enqueueMutation(this, 'childList', {\n removedNodes: createOneElementN
odeList(childWrapper),\n nextSibling: childWrapperNextSibling,\n
previousSibling: childWrapperPreviousSibling\n });\n }\n\n r
egisterTransientObservers(this, childWrapper);\n\n return childWrapper;\n
},\n\n replaceChild: function(newChildWrapper, oldChildWrapper) {\n as
sertIsNodeWrapper(newChildWrapper);\n\n var oldChildNode;\n if (isWrap
per(oldChildWrapper)) {\n oldChildNode = unwrap(oldChildWrapper);\n
} else {\n oldChildNode = oldChildWrapper;\n oldChildWrapper = wra
p(oldChildNode);\n }\n\n if (oldChildWrapper.parentNode !== this) {\n
// TODO(arv): DOMException\n throw new Error('NotFoundError');\n
}\n\n var nextNode = oldChildWrapper.nextSibling;\n var previousNo
de = oldChildWrapper.previousSibling;\n var nodes;\n\n var useNative =
!this.invalidateShadowRenderer() &&\n !invalidateParent(ne
wChildWrapper);\n\n if (useNative) {\n nodes = collectNodesNative(ne
wChildWrapper);\n } else {\n if (nextNode === newChildWrapper)\n
nextNode = newChildWrapper.nextSibling;\n nodes = collectNodes(newC
hildWrapper, this, previousNode, nextNode);\n }\n\n if (!useNative) {\
n if (this.firstChild === oldChildWrapper)\n this.firstChild_ =
nodes[0];\n if (this.lastChild === oldChildWrapper)\n this.lastC
hild_ = nodes[nodes.length - 1];\n\n oldChildWrapper.previousSibling_ = o
ldChildWrapper.nextSibling_ =\n oldChildWrapper.parentNode_ = undefin
ed;\n\n // replaceChild no matter what the parent is?\n if (oldChi
ldNode.parentNode) {\n originalReplaceChild.call(\n oldChi
ldNode.parentNode,\n unwrapNodesForInsertion(this, nodes),\n
oldChildNode);\n }\n } else {\n ensureSameOwnerDocumen
t(this, newChildWrapper);\n clearChildNodes(this);\n originalRepla
ceChild.call(this.impl, unwrap(newChildWrapper),\n
oldChildNode);\n }\n\n enqueueMutation(this, 'childList', {\n
addedNodes: nodes,\n removedNodes: createOneElementNodeList(oldChildWr
apper),\n nextSibling: nextNode,\n previousSibling: previousNode\n
});\n\n nodeWasRemoved(oldChildWrapper);\n nodesWereAdded(nodes,
this);\n\n return oldChildWrapper;\n },\n\n /**\n * Called after
a node was inserted. Subclasses override this to invalidate\n * the rendere
r as needed.\n * @private\n */\n nodeIsInserted_: function() {\n
for (var child = this.firstChild; child; child = 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 has not been overridden, use the ori
ginal parentNode.\n return this.parentNode_ !== undefined ?\n this
.parentNode_ : wrap(this.impl.parentNode);\n },\n\n /** @type {Node} */\n
get firstChild() {\n return this.firstChild_ !== undefined ?\n
this.firstChild_ : wrap(this.impl.firstChild);\n },\n\n /** @type {Node} *
/\n get lastChild() {\n return this.lastChild_ !== 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.nextSibling);\n },\n\n /** @type
{Node} */\n get previousSibling() {\n return this.previousSibling_ !== u
ndefined ?\n this.previousSibling_ : wrap(this.impl.previousSibling);\n
},\n\n get parentElement() {\n var p = this.parentNode;\n while
(p && p.nodeType !== Node.ELEMENT_NODE) {\n p = p.parentNode;\n }\n
return p;\n },\n\n get textContent() {\n // TODO(arv): This sho
uld fallback to this.impl.textContent if there\n // are no shadow trees bel
ow or above the context node.\n var s = '';\n for (var child = this.fi
rstChild; child; child = child.nextSibling) {\n if (child.nodeType != Nod
e.COMMENT_NODE) {\n s += child.textContent;\n }\n }\n
return s;\n },\n set textContent(textContent) {\n var removedNodes =
snapshotNodeList(this.childNodes);\n\n if (this.invalidateShadowRenderer())
{\n removeAllChildNodes(this);\n if (textContent !== '') {\n
var textNode = this.impl.ownerDocument.createTextNode(textContent);\n
this.appendChild(textNode);\n }\n } else {\n clearChildNo
des(this);\n this.impl.textContent = textContent;\n }\n\n var a
ddedNodes = snapshotNodeList(this.childNodes);\n\n enqueueMutation(this, 'c
hildList', {\n addedNodes: addedNodes,\n removedNodes: removedNode
s\n });\n\n nodesWereRemoved(removedNodes);\n nodesWereAdded(adde
dNodes, this);\n },\n\n get childNodes() {\n var wrapperList = new No
deList();\n var i = 0;\n for (var child = this.firstChild; child; chil
d = child.nextSibling) {\n wrapperList[i++] = child;\n }\n wrap
perList.length = i;\n return wrapperList;\n },\n\n cloneNode: functio
n(deep) {\n return cloneNode(this, deep);\n },\n\n contains: function
(child) {\n return contains(this, wrapIfNeeded(child));\n },\n\n comp
areDocumentPosition: function(otherNode) {\n // This only wraps, it therefo
re only operates on the composed DOM and not\n // the logical DOM.\n r
eturn originalCompareDocumentPosition.call(this.impl,\n
unwrapIfNeeded(otherNode));\n },\n\n normalize: f
unction() {\n var nodes = snapshotNodeList(this.childNodes);\n var rem
Nodes = [];\n var s = '';\n var modNode;\n\n for (var i = 0, n; i
< nodes.length; i++) {\n n = nodes[i];\n if (n.nodeType === Node.
TEXT_NODE) {\n if (!modNode && !n.data.length)\n this.remove
Node(n);\n else if (!modNode)\n modNode = n;\n else
{\n s += n.data;\n remNodes.push(n);\n }\n
} else {\n if (modNode && remNodes.length) {\n modNode.dat
a += s;\n cleanupNodes(remNodes);\n }\n remNodes =
[];\n s = '';\n modNode = null;\n if (n.childNodes.le
ngth)\n n.normalize();\n }\n }\n\n // handle case wh
ere >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 DocumentFrag
ment as a base and then delete the properties of\n // DocumentFragment.prototyp
e from the wrapper Node. Since delete makes\n // objects slow in some JS engine
s we recreate the prototype object.\n registerWrapper(OriginalNode, Node, docum
ent.createDocumentFragment());\n delete Node.prototype.querySelector;\n delete
Node.prototype.querySelectorAll;\n Node.prototype = mixin(Object.create(EventT
arget.prototype), Node.prototype);\n\n scope.cloneNode = cloneNode;\n scope.no
deWasAdded = nodeWasAdded;\n scope.nodeWasRemoved = nodeWasRemoved;\n scope.no
desWereAdded = nodesWereAdded;\n scope.nodesWereRemoved = nodesWereRemoved;\n
scope.snapshotNodeList = snapshotNodeList;\n scope.wrappers.Node = Node;\n\n})(
window.ShadowDOMPolyfill);\n", |
103 "// 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 HTMLCollection = scop
e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n\n funct
ion findOne(node, selector) {\n var m, el = node.firstElementChild;\n whil
e (el) {\n if (el.matches(selector))\n return el;\n m = findOne
(el, selector);\n if (m)\n return m;\n el = el.nextElementSibli
ng;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\
n return el.matches(selector);\n }\n\n var XHTML_NS = 'http://www.w3.org/19
99/xhtml';\n\n function matchesTagName(el, localName, localNameLowerCase) {\n
var ln = el.localName;\n return ln === localName ||\n ln === localNa
meLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThin
g() {\n return true;\n }\n\n function matchesLocalName(el, localName) {\n
return el.localName === localName;\n }\n\n function matchesNameSpace(el, ns)
{\n return el.namespaceURI === ns;\n }\n\n function matchesLocalNameNS(el,
ns, localName) {\n return el.namespaceURI === ns && el.localName === localNa
me;\n }\n\n function findElements(node, result, p, arg0, arg1) {\n var el =
node.firstElementChild;\n while (el) {\n if (p(el, arg0, arg1))\n
result[result.length++] = el;\n findElements(el, result, p, arg0, arg1);\
n el = el.nextElementSibling;\n }\n return result;\n }\n\n // find
and findAll will only match Simple Selectors,\n // Structural Pseudo Classes ar
e not guarenteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple
-selectors\n\n var SelectorsInterface = {\n querySelector: function(selector
) {\n return findOne(this, selector);\n },\n querySelectorAll: functi
on(selector) {\n return findElements(this, new NodeList(), matchesSelector,
selector);\n }\n };\n\n var GetElementsByInterface = {\n getElementsByT
agName: function(localName) {\n var result = new HTMLCollection();\n i
f (localName === '*')\n return findElements(this, result, matchesEveryThi
ng);\n\n return findElements(this, result,\n matchesTagName,\n
localName,\n localName.toLowerCase());\n },\n\n getElements
ByClassName: function(className) {\n // TODO(arv): Check className?\n
return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNa
meNS: function(ns, localName) {\n var result = new HTMLCollection();\n\n
if (ns === '') {\n ns = null;\n } else if (ns === '*') {\n
if (localName === '*')\n return findElements(this, result, matchesEver
yThing);\n return findElements(this, result, matchesLocalName, localName)
;\n }\n\n if (localName === '*')\n return findElements(this, re
sult, matchesNameSpace, ns);\n\n return findElements(this, result, matchesL
ocalNameNS, ns, localName);\n }\n };\n\n scope.GetElementsByInterface = Get
ElementsByInterface;\n scope.SelectorsInterface = SelectorsInterface;\n\n})(win
dow.ShadowDOMPolyfill);\n", | 104 "// 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 HTMLCollection = scop
e.wrappers.HTMLCollection;\n var NodeList = scope.wrappers.NodeList;\n\n funct
ion findOne(node, selector) {\n var m, el = node.firstElementChild;\n whil
e (el) {\n if (el.matches(selector))\n return el;\n m = findOne
(el, selector);\n if (m)\n return m;\n el = el.nextElementSibli
ng;\n }\n return null;\n }\n\n function matchesSelector(el, selector) {\
n return el.matches(selector);\n }\n\n var XHTML_NS = 'http://www.w3.org/19
99/xhtml';\n\n function matchesTagName(el, localName, localNameLowerCase) {\n
var ln = el.localName;\n return ln === localName ||\n ln === localNa
meLowerCase && el.namespaceURI === XHTML_NS;\n }\n\n function matchesEveryThin
g() {\n return true;\n }\n\n function matchesLocalName(el, localName) {\n
return el.localName === localName;\n }\n\n function matchesNameSpace(el, ns)
{\n return el.namespaceURI === ns;\n }\n\n function matchesLocalNameNS(el,
ns, localName) {\n return el.namespaceURI === ns && el.localName === localNa
me;\n }\n\n function findElements(node, result, p, arg0, arg1) {\n var el =
node.firstElementChild;\n while (el) {\n if (p(el, arg0, arg1))\n
result[result.length++] = el;\n findElements(el, result, p, arg0, arg1);\
n el = el.nextElementSibling;\n }\n return result;\n }\n\n // find
and findAll will only match Simple Selectors,\n // Structural Pseudo Classes ar
e not guarenteed to be correct\n // http://www.w3.org/TR/css3-selectors/#simple
-selectors\n\n var SelectorsInterface = {\n querySelector: function(selector
) {\n return findOne(this, selector);\n },\n querySelectorAll: functi
on(selector) {\n return findElements(this, new NodeList(), matchesSelector,
selector);\n }\n };\n\n var GetElementsByInterface = {\n getElementsByT
agName: function(localName) {\n var result = new HTMLCollection();\n i
f (localName === '*')\n return findElements(this, result, matchesEveryThi
ng);\n\n return findElements(this, result,\n matchesTagName,\n
localName,\n localName.toLowerCase());\n },\n\n getElements
ByClassName: function(className) {\n // TODO(arv): Check className?\n
return this.querySelectorAll('.' + className);\n },\n\n getElementsByTagNa
meNS: function(ns, localName) {\n var result = new HTMLCollection();\n\n
if (ns === '') {\n ns = null;\n } else if (ns === '*') {\n
if (localName === '*')\n return findElements(this, result, matchesEver
yThing);\n return findElements(this, result, matchesLocalName, localName)
;\n }\n\n if (localName === '*')\n return findElements(this, re
sult, matchesNameSpace, ns);\n\n return findElements(this, result, matchesL
ocalNameNS, ns, localName);\n }\n };\n\n scope.GetElementsByInterface = Get
ElementsByInterface;\n scope.SelectorsInterface = SelectorsInterface;\n\n})(win
dow.ShadowDOMPolyfill);\n", |
104 "// 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 remove: function() {\n var p
= this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n
var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar
dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n
return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod
eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf
ace;\n\n})(window.ShadowDOMPolyfill);\n", | 105 "// 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 remove: function() {\n var p
= this.parentNode;\n if (p)\n p.removeChild(this);\n }\n };\n\n
var ChildNodeInterface = {\n get nextElementSibling() {\n return forwar
dElement(this.nextSibling);\n },\n\n get previousElementSibling() {\n
return backwardsElement(this.previousSibling);\n }\n };\n\n scope.ChildNod
eInterface = ChildNodeInterface;\n scope.ParentNodeInterface = ParentNodeInterf
ace;\n\n})(window.ShadowDOMPolyfill);\n", |
105 "// 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", | 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 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", |
106 "// 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", | 107 "// 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", |
107 "// 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 function invalidateClass
(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n fun
ction DOMTokenList(impl, ownerElement) {\n this.impl = impl;\n this.ownerE
lement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n get length() {
\n return this.impl.length;\n },\n item: function(index) {\n ret
urn this.impl.item(index);\n },\n contains: function(token) {\n retur
n this.impl.contains(token);\n },\n add: function() {\n this.impl.add
.apply(this.impl, arguments);\n invalidateClass(this.ownerElement_);\n }
,\n remove: function() {\n this.impl.remove.apply(this.impl, arguments);
\n invalidateClass(this.ownerElement_);\n },\n toggle: function(token
) {\n var rv = this.impl.toggle.apply(this.impl, arguments);\n invalid
ateClass(this.ownerElement_);\n return rv;\n },\n toString: function(
) {\n return this.impl.toString();\n }\n };\n\n scope.wrappers.DOMToke
nList = DOMTokenList;\n})(window.ShadowDOMPolyfill);\n", | 108 "// 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 function invalidateClass
(el) {\n scope.invalidateRendererBasedOnAttribute(el, 'class');\n }\n\n fun
ction DOMTokenList(impl, ownerElement) {\n this.impl = impl;\n this.ownerE
lement_ = ownerElement;\n }\n\n DOMTokenList.prototype = {\n get length() {
\n return this.impl.length;\n },\n item: function(index) {\n ret
urn this.impl.item(index);\n },\n contains: function(token) {\n retur
n this.impl.contains(token);\n },\n add: function() {\n this.impl.add
.apply(this.impl, arguments);\n invalidateClass(this.ownerElement_);\n }
,\n remove: function() {\n this.impl.remove.apply(this.impl, arguments);
\n invalidateClass(this.ownerElement_);\n },\n toggle: function(token
) {\n var rv = this.impl.toggle.apply(this.impl, arguments);\n invalid
ateClass(this.ownerElement_);\n return rv;\n },\n toString: function(
) {\n return this.impl.toString();\n }\n };\n\n scope.wrappers.DOMToke
nList = DOMTokenList;\n})(window.ShadowDOMPolyfill);\n", |
108 "// 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 DOMTokenList = scope.wrappers
.DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se
lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop
e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var
mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope.
registerWrapper;\n var unwrap = scope.unwrap;\n var wrappers = scope.wrappers;
\n\n var OriginalElement = window.Element;\n\n var matchesNames = [\n 'matc
hes', // needs to come first.\n 'mozMatchesSelector',\n 'msMatchesSelecto
r',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n return Origi
nalElement.prototype[name];\n });\n\n var matchesName = matchesNames[0];\n\n
var originalMatches = OriginalElement.prototype[matchesName];\n\n function inva
lidateRendererBasedOnAttribute(element, name) {\n // Only invalidate if paren
t node is a shadow host.\n var p = element.parentNode;\n if (!p || !p.shad
owRoot)\n return;\n\n var renderer = scope.getRendererForHost(p);\n i
f (renderer.dependsOnAttribute(name))\n renderer.invalidate();\n }\n\n fu
nction enqueAttributeChange(element, name, oldValue) {\n // This is not fully
spec compliant. We should use localName (which might\n // have a different c
ase than name) and the namespace (which requires us\n // to get the Attr obje
ct).\n enqueueMutation(element, 'attributes', {\n name: name,\n nam
espace: null,\n oldValue: oldValue\n });\n }\n\n var classListTable =
new WeakMap();\n\n function Element(node) {\n Node.call(this, node);\n }\n
Element.prototype = Object.create(Node.prototype);\n mixin(Element.prototype,
{\n createShadowRoot: function() {\n var newShadowRoot = new wrappers.Sh
adowRoot(this);\n this.impl.polymerShadowRoot_ = newShadowRoot;\n\n va
r renderer = scope.getRendererForHost(this);\n renderer.invalidate();\n\n
return newShadowRoot;\n },\n\n get shadowRoot() {\n return this.i
mpl.polymerShadowRoot_ || null;\n },\n\n // getDestinationInsertionPoints
added in ShadowRenderer.js\n\n setAttribute: function(name, value) {\n v
ar oldValue = this.impl.getAttribute(name);\n this.impl.setAttribute(name,
value);\n enqueAttributeChange(this, name, oldValue);\n invalidateRend
ererBasedOnAttribute(this, name);\n },\n\n removeAttribute: function(name)
{\n var oldValue = this.impl.getAttribute(name);\n this.impl.removeAt
tribute(name);\n enqueAttributeChange(this, name, oldValue);\n invalid
ateRendererBasedOnAttribute(this, name);\n },\n\n matches: function(select
or) {\n return originalMatches.call(this.impl, selector);\n },\n\n ge
t classList() {\n var list = classListTable.get(this);\n if (!list) {\
n classListTable.set(this,\n list = new DOMTokenList(unwrap(th
is).classList, this));\n }\n return list;\n },\n\n get className
() {\n return unwrap(this).className;\n },\n\n set className(v) {\n
this.setAttribute('class', v);\n },\n\n get id() {\n return unwra
p(this).id;\n },\n\n set id(v) {\n this.setAttribute('id', v);\n }
\n });\n\n matchesNames.forEach(function(name) {\n if (name !== 'matches')
{\n Element.prototype[name] = function(selector) {\n return this.mat
ches(selector);\n };\n }\n });\n\n if (OriginalElement.prototype.webki
tCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot =\n El
ement.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype, ChildNodeIn
terface);\n mixin(Element.prototype, GetElementsByInterface);\n mixin(Element.
prototype, ParentNodeInterface);\n mixin(Element.prototype, SelectorsInterface)
;\n\n registerWrapper(OriginalElement, Element,\n document.cre
ateElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttribute = invali
dateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames;\n scope.wra
ppers.Element = Element;\n})(window.ShadowDOMPolyfill);\n", | 109 "// 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 DOMTokenList = scope.wrappers
.DOMTokenList;\n var ParentNodeInterface = scope.ParentNodeInterface;\n var Se
lectorsInterface = scope.SelectorsInterface;\n var addWrapNodeListMethod = scop
e.addWrapNodeListMethod;\n var enqueueMutation = scope.enqueueMutation;\n var
mixin = scope.mixin;\n var oneOf = scope.oneOf;\n var registerWrapper = scope.
registerWrapper;\n var unwrap = scope.unwrap;\n var wrappers = scope.wrappers;
\n\n var OriginalElement = window.Element;\n\n var matchesNames = [\n 'matc
hes', // needs to come first.\n 'mozMatchesSelector',\n 'msMatchesSelecto
r',\n 'webkitMatchesSelector',\n ].filter(function(name) {\n return Origi
nalElement.prototype[name];\n });\n\n var matchesName = matchesNames[0];\n\n
var originalMatches = OriginalElement.prototype[matchesName];\n\n function inva
lidateRendererBasedOnAttribute(element, name) {\n // Only invalidate if paren
t node is a shadow host.\n var p = element.parentNode;\n if (!p || !p.shad
owRoot)\n return;\n\n var renderer = scope.getRendererForHost(p);\n i
f (renderer.dependsOnAttribute(name))\n renderer.invalidate();\n }\n\n fu
nction enqueAttributeChange(element, name, oldValue) {\n // This is not fully
spec compliant. We should use localName (which might\n // have a different c
ase than name) and the namespace (which requires us\n // to get the Attr obje
ct).\n enqueueMutation(element, 'attributes', {\n name: name,\n nam
espace: null,\n oldValue: oldValue\n });\n }\n\n var classListTable =
new WeakMap();\n\n function Element(node) {\n Node.call(this, node);\n }\n
Element.prototype = Object.create(Node.prototype);\n mixin(Element.prototype,
{\n createShadowRoot: function() {\n var newShadowRoot = new wrappers.Sh
adowRoot(this);\n this.impl.polymerShadowRoot_ = newShadowRoot;\n\n va
r renderer = scope.getRendererForHost(this);\n renderer.invalidate();\n\n
return newShadowRoot;\n },\n\n get shadowRoot() {\n return this.i
mpl.polymerShadowRoot_ || null;\n },\n\n // getDestinationInsertionPoints
added in ShadowRenderer.js\n\n setAttribute: function(name, value) {\n v
ar oldValue = this.impl.getAttribute(name);\n this.impl.setAttribute(name,
value);\n enqueAttributeChange(this, name, oldValue);\n invalidateRend
ererBasedOnAttribute(this, name);\n },\n\n removeAttribute: function(name)
{\n var oldValue = this.impl.getAttribute(name);\n this.impl.removeAt
tribute(name);\n enqueAttributeChange(this, name, oldValue);\n invalid
ateRendererBasedOnAttribute(this, name);\n },\n\n matches: function(select
or) {\n return originalMatches.call(this.impl, selector);\n },\n\n ge
t classList() {\n var list = classListTable.get(this);\n if (!list) {\
n classListTable.set(this,\n list = new DOMTokenList(unwrap(th
is).classList, this));\n }\n return list;\n },\n\n get className
() {\n return unwrap(this).className;\n },\n\n set className(v) {\n
this.setAttribute('class', v);\n },\n\n get id() {\n return unwra
p(this).id;\n },\n\n set id(v) {\n this.setAttribute('id', v);\n }
\n });\n\n matchesNames.forEach(function(name) {\n if (name !== 'matches')
{\n Element.prototype[name] = function(selector) {\n return this.mat
ches(selector);\n };\n }\n });\n\n if (OriginalElement.prototype.webki
tCreateShadowRoot) {\n Element.prototype.webkitCreateShadowRoot =\n El
ement.prototype.createShadowRoot;\n }\n\n mixin(Element.prototype, ChildNodeIn
terface);\n mixin(Element.prototype, GetElementsByInterface);\n mixin(Element.
prototype, ParentNodeInterface);\n mixin(Element.prototype, SelectorsInterface)
;\n\n registerWrapper(OriginalElement, Element,\n document.cre
ateElementNS(null, 'x'));\n\n scope.invalidateRendererBasedOnAttribute = invali
dateRendererBasedOnAttribute;\n scope.matchesNames = matchesNames;\n scope.wra
ppers.Element = Element;\n})(window.ShadowDOMPolyfill);\n", |
109 "// 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, this);\n },\n\n get outerHTML() {
\n return getOuterHTML(this, this.parentNode);\n },\n set outerHTML(v
alue) {\n var p = this.parentNode;\n if (p) {\n p.invalidateSha
dowRenderer();\n var df = frag(p, value);\n p.replaceChild(df, thi
s);\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
refNode = this;\n break;\n case 'afterend':\n cont
extElement = this.parentNode;\n refNode = this.nextSibling;\n
break;\n case 'afterbegin':\n contextElement = this;\n
refNode = this.firstChild;\n break;\n case 'beforeend':\n
contextElement = this;\n refNode = null;\n break;\n
default:\n return;\n }\n\n var df = frag(contextElement, text
);\n contextElement.insertBefore(df, refNode);\n }\n });\n\n function
frag(contextElement, 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
return wrap(df);\n }\n\n function getter(name) {\n return function() {\n
scope.renderAllPending();\n return this.impl[name];\n };\n }\n\n
function getterRequiresRendering(name) {\n defineGetter(HTMLElement, name, g
etter(name));\n }\n\n [\n 'clientHeight',\n 'clientLeft',\n 'clientTo
p',\n 'clientWidth',\n 'offsetHeight',\n 'offsetLeft',\n 'offsetTop'
,\n 'offsetWidth',\n 'scrollHeight',\n 'scrollWidth',\n ].forEach(gett
erRequiresRendering);\n\n function getterAndSetterRequiresRendering(name) {\n
Object.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(getterAndSetterR
equiresRendering);\n\n function methodRequiresRendering(name) {\n Object.def
ineProperty(HTMLElement.prototype, name, {\n value: function() {\n s
cope.renderAllPending();\n return this.impl[name].apply(this.impl, argume
nts);\n },\n configurable: true,\n enumerable: true\n });\n }
\n\n [\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoVie
w'\n ].forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we
use a subclass that has no members.\n registerWrapper(OriginalHTMLElement, HTML
Element,\n document.createElement('b'));\n\n scope.wrappers.HT
MLElement = HTMLElement;\n\n // TODO: Find a better way to share these two with
WrapperShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML
= setInnerHTML\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 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, this);\n },\n\n get outerHTML() {
\n return getOuterHTML(this, this.parentNode);\n },\n set outerHTML(v
alue) {\n var p = this.parentNode;\n if (p) {\n p.invalidateSha
dowRenderer();\n var df = frag(p, value);\n p.replaceChild(df, thi
s);\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
refNode = this;\n break;\n case 'afterend':\n cont
extElement = this.parentNode;\n refNode = this.nextSibling;\n
break;\n case 'afterbegin':\n contextElement = this;\n
refNode = this.firstChild;\n break;\n case 'beforeend':\n
contextElement = this;\n refNode = null;\n break;\n
default:\n return;\n }\n\n var df = frag(contextElement, text
);\n contextElement.insertBefore(df, refNode);\n }\n });\n\n function
frag(contextElement, 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
return wrap(df);\n }\n\n function getter(name) {\n return function() {\n
scope.renderAllPending();\n return this.impl[name];\n };\n }\n\n
function getterRequiresRendering(name) {\n defineGetter(HTMLElement, name, g
etter(name));\n }\n\n [\n 'clientHeight',\n 'clientLeft',\n 'clientTo
p',\n 'clientWidth',\n 'offsetHeight',\n 'offsetLeft',\n 'offsetTop'
,\n 'offsetWidth',\n 'scrollHeight',\n 'scrollWidth',\n ].forEach(gett
erRequiresRendering);\n\n function getterAndSetterRequiresRendering(name) {\n
Object.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(getterAndSetterR
equiresRendering);\n\n function methodRequiresRendering(name) {\n Object.def
ineProperty(HTMLElement.prototype, name, {\n value: function() {\n s
cope.renderAllPending();\n return this.impl[name].apply(this.impl, argume
nts);\n },\n configurable: true,\n enumerable: true\n });\n }
\n\n [\n 'getBoundingClientRect',\n 'getClientRects',\n 'scrollIntoVie
w'\n ].forEach(methodRequiresRendering);\n\n // HTMLElement is abstract so we
use a subclass that has no members.\n registerWrapper(OriginalHTMLElement, HTML
Element,\n document.createElement('b'));\n\n scope.wrappers.HT
MLElement = HTMLElement;\n\n // TODO: Find a better way to share these two with
WrapperShadowRoot.\n scope.getInnerHTML = getInnerHTML;\n scope.setInnerHTML
= setInnerHTML\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 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", | 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 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", |
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 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\n if (OriginalHTMLContentElem
ent)\n registerWrapper(OriginalHTMLContentElement, HTMLContentElement);\n\n
scope.wrappers.HTMLContentElement = HTMLContentElement;\n})(window.ShadowDOMPoly
fill);\n", | 112 "// 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\n if (OriginalHTMLContentElem
ent)\n registerWrapper(OriginalHTMLContentElement, HTMLContentElement);\n\n
scope.wrappers.HTMLContentElement = HTMLContentElement;\n})(window.ShadowDOMPoly
fill);\n", |
112 "/*\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\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 wrapHTMLCollection = scope.wrapHTMLCollection;\
n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLFor
mElement = window.HTMLFormElement;\n\n function HTMLFormElement(node) {\n HT
MLElement.call(this, node);\n }\n HTMLFormElement.prototype = Object.create(HT
MLElement.prototype);\n mixin(HTMLFormElement.prototype, {\n get elements()
{\n // Note: technically this should be an HTMLFormControlsCollection, but\
n // that inherits from HTMLCollection, so should be good enough. Spec:\n
// http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-in
terfaces.html#htmlformcontrolscollection\n return wrapHTMLCollection(unwrap
(this).elements);\n }\n });\n\n registerWrapper(OriginalHTMLFormElement, HT
MLFormElement,\n document.createElement('form'));\n\n scope.wr
appers.HTMLFormElement = HTMLFormElement;\n})(window.ShadowDOMPolyfill);\n", | 113 "/*\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\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 wrapHTMLCollection = scope.wrapHTMLCollection;\
n var unwrap = scope.unwrap;\n\n var OriginalHTMLFormElement = window.HTMLForm
Element;\n\n function HTMLFormElement(node) {\n HTMLElement.call(this, node)
;\n }\n HTMLFormElement.prototype = Object.create(HTMLElement.prototype);\n m
ixin(HTMLFormElement.prototype, {\n get elements() {\n // Note: technica
lly this should be an HTMLFormControlsCollection, but\n // that inherits fr
om HTMLCollection, so should be good enough. Spec:\n // http://www.whatwg.o
rg/specs/web-apps/current-work/multipage/common-dom-interfaces.html#htmlformcont
rolscollection\n return wrapHTMLCollection(unwrap(this).elements);\n }\n
});\n\n registerWrapper(OriginalHTMLFormElement, HTMLFormElement,\n
document.createElement('form'));\n\n scope.wrappers.HTMLFormElement = H
TMLFormElement;\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 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", | 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 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", |
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 HTMLElement = scope.
wrappers.HTMLElement;\n var mixin = scope.mixin;\n var NodeList = scope.wrappe
rs.NodeList;\n var registerWrapper = scope.registerWrapper;\n\n var OriginalHT
MLShadowElement = window.HTMLShadowElement;\n\n function HTMLShadowElement(node
) {\n HTMLElement.call(this, node);\n }\n HTMLShadowElement.prototype = Obj
ect.create(HTMLElement.prototype);\n\n // getDistributedNodes is added in Shado
wRenderer\n\n if (OriginalHTMLShadowElement)\n registerWrapper(OriginalHTMLS
hadowElement, HTMLShadowElement);\n\n scope.wrappers.HTMLShadowElement = HTMLSh
adowElement;\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 NodeList = scope.wrappe
rs.NodeList;\n var registerWrapper = scope.registerWrapper;\n\n var OriginalHT
MLShadowElement = window.HTMLShadowElement;\n\n function HTMLShadowElement(node
) {\n HTMLElement.call(this, node);\n }\n HTMLShadowElement.prototype = Obj
ect.create(HTMLElement.prototype);\n\n // getDistributedNodes is added in Shado
wRenderer\n\n if (OriginalHTMLShadowElement)\n registerWrapper(OriginalHTMLS
hadowElement, HTMLShadowElement);\n\n scope.wrappers.HTMLShadowElement = HTMLSh
adowElement;\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 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", | 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 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", |
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 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", | 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\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", |
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 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", | 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 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", |
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 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", | 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 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", |
119 "// 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 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 OriginalHTMLSelectElement = window.HTMLSelectElement;\n\n function HTMLSelec
tElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLSelectElement.pr
ototype = Object.create(HTMLElement.prototype);\n mixin(HTMLSelectElement.proto
type, {\n add: function(element, before) {\n if (typeof before === 'obje
ct') // also includes null\n before = unwrap(before);\n unwrap(this
).add(unwrap(element), before);\n },\n\n remove: function(indexOrNode) {\n
// Spec only allows index but implementations allow index or node.\n
// remove() is also allowed which is same as remove(undefined)\n if (indexO
rNode === undefined) {\n HTMLElement.prototype.remove.call(this);\n
return;\n }\n\n if (typeof indexOrNode === 'object')\n indexO
rNode = unwrap(indexOrNode);\n\n unwrap(this).remove(indexOrNode);\n },\
n\n get form() {\n return wrap(unwrap(this).form);\n }\n });\n\n re
gisterWrapper(OriginalHTMLSelectElement, HTMLSelectElement,\n d
ocument.createElement('select'));\n\n scope.wrappers.HTMLSelectElement = HTMLSe
lectElement;\n})(window.ShadowDOMPolyfill);\n", | 120 "// 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 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 OriginalHTMLSelectElement = window.HTMLSelectElement;\n\n function HTMLSelec
tElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLSelectElement.pr
ototype = Object.create(HTMLElement.prototype);\n mixin(HTMLSelectElement.proto
type, {\n add: function(element, before) {\n if (typeof before === 'obje
ct') // also includes null\n before = unwrap(before);\n unwrap(this
).add(unwrap(element), before);\n },\n\n remove: function(indexOrNode) {\n
// Spec only allows index but implementations allow index or node.\n
// remove() is also allowed which is same as remove(undefined)\n if (indexO
rNode === undefined) {\n HTMLElement.prototype.remove.call(this);\n
return;\n }\n\n if (typeof indexOrNode === 'object')\n indexO
rNode = unwrap(indexOrNode);\n\n unwrap(this).remove(indexOrNode);\n },\
n\n get form() {\n return wrap(unwrap(this).form);\n }\n });\n\n re
gisterWrapper(OriginalHTMLSelectElement, HTMLSelectElement,\n d
ocument.createElement('select'));\n\n scope.wrappers.HTMLSelectElement = HTMLSe
lectElement;\n})(window.ShadowDOMPolyfill);\n", |
120 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\n\n var OriginalHTMLTa
bleElement = window.HTMLTableElement;\n\n function HTMLTableElement(node) {\n
HTMLElement.call(this, node);\n }\n HTMLTableElement.prototype = Object.crea
te(HTMLElement.prototype);\n mixin(HTMLTableElement.prototype, {\n get capti
on() {\n return wrap(unwrap(this).caption);\n },\n createCaption: fun
ction() {\n return wrap(unwrap(this).createCaption());\n },\n\n get t
Head() {\n return wrap(unwrap(this).tHead);\n },\n createTHead: funct
ion() {\n return wrap(unwrap(this).createTHead());\n },\n\n createTFo
ot: function() {\n return wrap(unwrap(this).createTFoot());\n },\n ge
t tFoot() {\n return wrap(unwrap(this).tFoot);\n },\n\n get tBodies()
{\n return wrapHTMLCollection(unwrap(this).tBodies);\n },\n createTB
ody: function() {\n return wrap(unwrap(this).createTBody());\n },\n\n
get rows() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n
insertRow: function(index) {\n return wrap(unwrap(this).insertRow(index));\
n }\n });\n\n registerWrapper(OriginalHTMLTableElement, HTMLTableElement,\n
document.createElement('table'));\n\n scope.wrappers.HTMLTabl
eElement = HTMLTableElement;\n})(window.ShadowDOMPolyfill);\n", | 121 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n var wrapHTMLCollection = scope.wrapHTMLCollection;\n\n var OriginalHTMLTa
bleElement = window.HTMLTableElement;\n\n function HTMLTableElement(node) {\n
HTMLElement.call(this, node);\n }\n HTMLTableElement.prototype = Object.crea
te(HTMLElement.prototype);\n mixin(HTMLTableElement.prototype, {\n get capti
on() {\n return wrap(unwrap(this).caption);\n },\n createCaption: fun
ction() {\n return wrap(unwrap(this).createCaption());\n },\n\n get t
Head() {\n return wrap(unwrap(this).tHead);\n },\n createTHead: funct
ion() {\n return wrap(unwrap(this).createTHead());\n },\n\n createTFo
ot: function() {\n return wrap(unwrap(this).createTFoot());\n },\n ge
t tFoot() {\n return wrap(unwrap(this).tFoot);\n },\n\n get tBodies()
{\n return wrapHTMLCollection(unwrap(this).tBodies);\n },\n createTB
ody: function() {\n return wrap(unwrap(this).createTBody());\n },\n\n
get rows() {\n return wrapHTMLCollection(unwrap(this).rows);\n },\n
insertRow: function(index) {\n return wrap(unwrap(this).insertRow(index));\
n }\n });\n\n registerWrapper(OriginalHTMLTableElement, HTMLTableElement,\n
document.createElement('table'));\n\n scope.wrappers.HTMLTabl
eElement = HTMLTableElement;\n})(window.ShadowDOMPolyfill);\n", |
121 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;
\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLTa
bleSectionElement = window.HTMLTableSectionElement;\n\n function HTMLTableSecti
onElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLTableSectionEle
ment.prototype = Object.create(HTMLElement.prototype);\n mixin(HTMLTableSection
Element.prototype, {\n get rows() {\n return wrapHTMLCollection(unwrap(t
his).rows);\n },\n insertRow: function(index) {\n return wrap(unwrap(
this).insertRow(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableSec
tionElement, HTMLTableSectionElement,\n document.createElement(
'thead'));\n\n scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement
;\n})(window.ShadowDOMPolyfill);\n", | 122 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;
\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLTa
bleSectionElement = window.HTMLTableSectionElement;\n\n function HTMLTableSecti
onElement(node) {\n HTMLElement.call(this, node);\n }\n HTMLTableSectionEle
ment.prototype = Object.create(HTMLElement.prototype);\n mixin(HTMLTableSection
Element.prototype, {\n get rows() {\n return wrapHTMLCollection(unwrap(t
his).rows);\n },\n insertRow: function(index) {\n return wrap(unwrap(
this).insertRow(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableSec
tionElement, HTMLTableSectionElement,\n document.createElement(
'thead'));\n\n scope.wrappers.HTMLTableSectionElement = HTMLTableSectionElement
;\n})(window.ShadowDOMPolyfill);\n", |
122 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;
\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLTa
bleRowElement = window.HTMLTableRowElement;\n\n function HTMLTableRowElement(no
de) {\n HTMLElement.call(this, node);\n }\n HTMLTableRowElement.prototype =
Object.create(HTMLElement.prototype);\n mixin(HTMLTableRowElement.prototype, {
\n get cells() {\n return wrapHTMLCollection(unwrap(this).cells);\n }
,\n\n insertCell: function(index) {\n return wrap(unwrap(this).insertCel
l(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableRowElement, HTMLT
ableRowElement,\n document.createElement('tr'));\n\n scope.wra
ppers.HTMLTableRowElement = HTMLTableRowElement;\n})(window.ShadowDOMPolyfill);\
n", | 123 "/*\n * 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 th
e LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var HTMLElement
= scope.wrappers.HTMLElement;\n var mixin = scope.mixin;\n var registerWrappe
r = scope.registerWrapper;\n var wrapHTMLCollection = scope.wrapHTMLCollection;
\n var unwrap = scope.unwrap;\n var wrap = scope.wrap;\n\n var OriginalHTMLTa
bleRowElement = window.HTMLTableRowElement;\n\n function HTMLTableRowElement(no
de) {\n HTMLElement.call(this, node);\n }\n HTMLTableRowElement.prototype =
Object.create(HTMLElement.prototype);\n mixin(HTMLTableRowElement.prototype, {
\n get cells() {\n return wrapHTMLCollection(unwrap(this).cells);\n }
,\n\n insertCell: function(index) {\n return wrap(unwrap(this).insertCel
l(index));\n }\n });\n\n registerWrapper(OriginalHTMLTableRowElement, HTMLT
ableRowElement,\n document.createElement('tr'));\n\n scope.wra
ppers.HTMLTableRowElement = HTMLTableRowElement;\n})(window.ShadowDOMPolyfill);\
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 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 Element = scope.wrap
pers.Element;\n var HTMLElement = scope.wrappers.HTMLElement;\n var registerOb
ject = scope.registerObject;\n\n var SVG_NS = 'http://www.w3.org/2000/svg';\n
var svgTitleElement = document.createElementNS(SVG_NS, 'title');\n var SVGTitle
Element = registerObject(svgTitleElement);\n var SVGElement = Object.getPrototy
peOf(SVGTitleElement.prototype).constructor;\n\n // IE11 does not have classLis
t for SVG elements. The spec says that classList\n // is an accessor on Element
, but IE11 puts classList on HTMLElement, leaving\n // SVGElement without a cla
ssList property. We therefore move the accessor for\n // IE11.\n if (!('classL
ist' in svgTitleElement)) {\n var descr = Object.getOwnPropertyDescriptor(Ele
ment.prototype, 'classList');\n Object.defineProperty(HTMLElement.prototype,
'classList', descr);\n delete Element.prototype.classList;\n }\n\n scope.wr
appers.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 Element = scope.wrap
pers.Element;\n var HTMLElement = scope.wrappers.HTMLElement;\n var registerOb
ject = scope.registerObject;\n\n var SVG_NS = 'http://www.w3.org/2000/svg';\n
var svgTitleElement = document.createElementNS(SVG_NS, 'title');\n var SVGTitle
Element = registerObject(svgTitleElement);\n var SVGElement = Object.getPrototy
peOf(SVGTitleElement.prototype).constructor;\n\n // IE11 does not have classLis
t for SVG elements. The spec says that classList\n // is an accessor on Element
, but IE11 puts classList on HTMLElement, leaving\n // SVGElement without a cla
ssList property. We therefore move the accessor for\n // IE11.\n if (!('classL
ist' in svgTitleElement)) {\n var descr = Object.getOwnPropertyDescriptor(Ele
ment.prototype, 'classList');\n Object.defineProperty(HTMLElement.prototype,
'classList', descr);\n delete Element.prototype.classList;\n }\n\n scope.wr
appers.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 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 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 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 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 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 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 TreeScope = scope.TreeScope;\n var eleme
ntFromPoint = scope.elementFromPoint;\n var getInnerHTML = scope.getInnerHTML;\
n var getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var rew
rap = scope.rewrap;\n var setInnerHTML = scope.setInnerHTML;\n var unwrap = sc
ope.unwrap;\n\n var shadowHostTable = new WeakMap();\n var nextOlderShadowTree
Table = new WeakMap();\n\n var spaceCharRe = /[ \\t\\n\\r\\f]/;\n\n function S
hadowRoot(hostWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument.c
reateDocumentFragment());\n DocumentFragment.call(this, node);\n\n // crea
teDocumentFragment associates the node with a wrapper\n // DocumentFragment i
nstance. Override that.\n rewrap(node, this);\n\n var oldShadowRoot = host
Wrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\n
this.treeScope_ =\n new TreeScope(this, getTreeScope(oldShadowRoot ||
hostWrapper));\n\n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoot
.prototype = Object.create(DocumentFragment.prototype);\n mixin(ShadowRoot.prot
otype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n s
et innerHTML(value) {\n setInnerHTML(this, value);\n this.invalidateSh
adowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderSh
adowTreeTable.get(this) || null;\n },\n\n get host() {\n return shado
wHostTable.get(this) || null;\n },\n\n invalidateShadowRenderer: function(
) {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },\
n\n elementFromPoint: function(x, y) {\n return elementFromPoint(this, t
his.ownerDocument, x, y);\n },\n\n getElementById: function(id) {\n i
f (spaceCharRe.test(id))\n return null;\n return this.querySelector(
'[id=\"' + id + '\"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoo
t;\n\n})(window.ShadowDOMPolyfill);\n", | 132 "// 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 TreeScope = scope.TreeScope;\n var eleme
ntFromPoint = scope.elementFromPoint;\n var getInnerHTML = scope.getInnerHTML;\
n var getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n var rew
rap = scope.rewrap;\n var setInnerHTML = scope.setInnerHTML;\n var unwrap = sc
ope.unwrap;\n\n var shadowHostTable = new WeakMap();\n var nextOlderShadowTree
Table = new WeakMap();\n\n var spaceCharRe = /[ \\t\\n\\r\\f]/;\n\n function S
hadowRoot(hostWrapper) {\n var node = unwrap(hostWrapper.impl.ownerDocument.c
reateDocumentFragment());\n DocumentFragment.call(this, node);\n\n // crea
teDocumentFragment associates the node with a wrapper\n // DocumentFragment i
nstance. Override that.\n rewrap(node, this);\n\n var oldShadowRoot = host
Wrapper.shadowRoot;\n nextOlderShadowTreeTable.set(this, oldShadowRoot);\n\n
this.treeScope_ =\n new TreeScope(this, getTreeScope(oldShadowRoot ||
hostWrapper));\n\n shadowHostTable.set(this, hostWrapper);\n }\n ShadowRoot
.prototype = Object.create(DocumentFragment.prototype);\n mixin(ShadowRoot.prot
otype, {\n get innerHTML() {\n return getInnerHTML(this);\n },\n s
et innerHTML(value) {\n setInnerHTML(this, value);\n this.invalidateSh
adowRenderer();\n },\n\n get olderShadowRoot() {\n return nextOlderSh
adowTreeTable.get(this) || null;\n },\n\n get host() {\n return shado
wHostTable.get(this) || null;\n },\n\n invalidateShadowRenderer: function(
) {\n return shadowHostTable.get(this).invalidateShadowRenderer();\n },\
n\n elementFromPoint: function(x, y) {\n return elementFromPoint(this, t
his.ownerDocument, x, y);\n },\n\n getElementById: function(id) {\n i
f (spaceCharRe.test(id))\n return null;\n return this.querySelector(
'[id=\"' + id + '\"]');\n }\n });\n\n scope.wrappers.ShadowRoot = ShadowRoo
t;\n\n})(window.ShadowDOMPolyfill);\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 getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n
var oneOf = scope.oneOf;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n /**\n * Updates the fields of a wrapper to a snapshot of the logical D
OM as needed.\n * Up means parentNode\n * Sideways means previous and next s
ibling.\n * @param {!Node} wrapper\n */\n function updateWrapperUpAndSidewa
ys(wrapper) {\n wrapper.previousSibling_ = wrapper.previousSibling;\n wrap
per.nextSibling_ = wrapper.nextSibling;\n wrapper.parentNode_ = wrapper.paren
tNode;\n }\n\n /**\n * Updates the fields of a wrapper to a snapshot of the
logical DOM as needed.\n * Down means first and last child\n * @param {!Node
} wrapper\n */\n function updateWrapperDown(wrapper) {\n wrapper.firstChil
d_ = wrapper.firstChild;\n wrapper.lastChild_ = wrapper.lastChild;\n }\n\n
function updateAllChildNodes(parentNodeWrapper) {\n assert(parentNodeWrapper
instanceof Node);\n for (var childWrapper = parentNodeWrapper.firstChild;\n
childWrapper;\n childWrapper = childWrapper.nextSibling) {\n
updateWrapperUpAndSideways(childWrapper);\n }\n updateWrapperDown(parentN
odeWrapper);\n }\n\n function insertBefore(parentNodeWrapper, newChildWrapper,
refChildWrapper) {\n var parentNode = unwrap(parentNodeWrapper);\n var ne
wChild = unwrap(newChildWrapper);\n var refChild = refChildWrapper ? unwrap(r
efChildWrapper) : null;\n\n remove(newChildWrapper);\n updateWrapperUpAndS
ideways(newChildWrapper);\n\n if (!refChildWrapper) {\n parentNodeWrappe
r.lastChild_ = parentNodeWrapper.lastChild;\n if (parentNodeWrapper.lastChi
ld === parentNodeWrapper.firstChild)\n parentNodeWrapper.firstChild_ = pa
rentNodeWrapper.firstChild;\n\n var lastChildWrapper = wrap(parentNode.last
Child);\n if (lastChildWrapper)\n lastChildWrapper.nextSibling_ = la
stChildWrapper.nextSibling;\n } else {\n if (parentNodeWrapper.firstChil
d === refChildWrapper)\n parentNodeWrapper.firstChild_ = refChildWrapper;
\n\n refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;\n
}\n\n parentNode.insertBefore(newChild, refChild);\n }\n\n function remo
ve(nodeWrapper) {\n var node = unwrap(nodeWrapper)\n var parentNode = node
.parentNode;\n if (!parentNode)\n return;\n\n var parentNodeWrapper =
wrap(parentNode);\n updateWrapperUpAndSideways(nodeWrapper);\n\n if (node
Wrapper.previousSibling)\n nodeWrapper.previousSibling.nextSibling_ = nodeW
rapper;\n if (nodeWrapper.nextSibling)\n nodeWrapper.nextSibling.previou
sSibling_ = nodeWrapper;\n\n if (parentNodeWrapper.lastChild === nodeWrapper)
\n parentNodeWrapper.lastChild_ = nodeWrapper;\n if (parentNodeWrapper.f
irstChild === nodeWrapper)\n parentNodeWrapper.firstChild_ = nodeWrapper;\n
\n parentNode.removeChild(node);\n }\n\n var distributedNodesTable = new We
akMap();\n var destinationInsertionPointsTable = new WeakMap();\n var renderer
ForHostTable = new WeakMap();\n\n function resetDistributedNodes(insertionPoint
) {\n distributedNodesTable.set(insertionPoint, []);\n }\n\n function getDi
stributedNodes(insertionPoint) {\n var rv = distributedNodesTable.get(inserti
onPoint);\n if (!rv)\n distributedNodesTable.set(insertionPoint, rv = []
);\n return rv;\n }\n\n function getChildNodesSnapshot(node) {\n var res
ult = [], i = 0;\n for (var child = node.firstChild; child; child = child.nex
tSibling) {\n result[i++] = child;\n }\n return result;\n }\n\n var
request = oneOf(window, [\n 'requestAnimationFrame',\n 'mozRequestAnimati
onFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout'\n ]);\n\n var
pendingDirtyRenderers = [];\n var renderTimer;\n\n function renderAllPending()
{\n // TODO(arv): Order these in document order. That way we do not have to\
n // render something twice.\n for (var i = 0; i < pendingDirtyRenderers.l
ength; i++) {\n var renderer = pendingDirtyRenderers[i];\n var parentR
enderer = renderer.parentRenderer;\n if (parentRenderer && parentRenderer.d
irty)\n continue;\n renderer.render();\n }\n\n pendingDirtyRen
derers = [];\n }\n\n function handleRequestAnimationFrame() {\n renderTimer
= null;\n renderAllPending();\n }\n\n /**\n * Returns existing shadow re
nderer for a host or creates it if it is needed.\n * @params {!Element} host\n
* @return {!ShadowRenderer}\n */\n function getRendererForHost(host) {\n
var renderer = rendererForHostTable.get(host);\n if (!renderer) {\n re
nderer = new ShadowRenderer(host);\n rendererForHostTable.set(host, rendere
r);\n }\n return renderer;\n }\n\n function getShadowRootAncestor(node)
{\n var root = getTreeScope(node).root;\n if (root instanceof ShadowRoot)\
n return root;\n return null;\n }\n\n function getRendererForShadowRoo
t(shadowRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n var s
pliceDiff = new ArraySplice();\n spliceDiff.equals = function(renderNode, rawNo
de) {\n return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n * Rend
erNode is used as an in memory \"render tree\". When we render the\n * compose
d 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 rv = n
ew 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 o
ldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added = opt_
added || new WeakMap();\n\n var splices = spliceDiff.calculateSplices(newCh
ildren, oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var lastIn
dex = 0;\n for (var i = 0; i < splices.length; i++) {\n var splice =
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 < remove
dCount; j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n
if (!added.get(wrapper))\n remove(wrapper);\n }\n\n v
ar addedCount = splice.addedCount;\n var refNode = oldChildren[oldIndex]
&& wrap(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j++) {\
n var newChildRenderNode = newChildren[newIndex++];\n var newC
hildWrapper = newChildRenderNode.node;\n insertBefore(nodeWrapper, newC
hildWrapper, refNode);\n\n // Keep track of added so that we do not rem
ove the node after it\n // has been added.\n added.set(newChil
dWrapper, true);\n\n newChildRenderNode.sync(added);\n }\n\n
lastIndex += addedCount;\n }\n\n for (var i = lastIndex; i < newCh
ildren.length; i++) {\n newChildren[i].sync(added);\n }\n }\n };
\n\n function ShadowRenderer(host) {\n this.host = host;\n this.dirty = f
alse;\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: function(opt
_renderNode) {\n if (!this.dirty)\n return;\n\n this.invalidate
Attributes();\n\n var host = this.host;\n\n this.distribution(host);\n
var renderNode = opt_renderNode || new RenderNode(host);\n this.build
RenderTree(renderNode, host);\n\n var topMostRenderer = !opt_renderNode;\n
if (topMostRenderer)\n renderNode.sync();\n\n this.dirty = fals
e;\n },\n\n get parentRenderer() {\n return getTreeScope(this.host).r
enderer;\n },\n\n invalidate: function() {\n if (!this.dirty) {\n
this.dirty = true;\n pendingDirtyRenderers.push(this);\n if (r
enderTimer)\n return;\n renderTimer = window[request](handleRequ
estAnimationFrame, 0);\n }\n },\n\n // http://w3c.github.io/webcompon
ents/spec/shadow/#distribution-algorithms\n distribution: function(root) {\n
this.resetAll(root);\n this.distributionResolution(root);\n },\n\n
resetAll: function(node) {\n if (isInsertionPoint(node))\n resetD
istributedNodes(node);\n else\n resetDestinationInsertionPoints(node
);\n\n for (var child = node.firstChild; child; child = child.nextSibling)
{\n this.resetAll(child);\n }\n\n if (node.shadowRoot)\n
this.resetAll(node.shadowRoot);\n\n if (node.olderShadowRoot)\n thi
s.resetAll(node.olderShadowRoot);\n },\n\n // http://w3c.github.io/webcomp
onents/spec/shadow/#distribution-results\n distributionResolution: function(n
ode) {\n if (isShadowHost(node)) {\n var shadowHost = node;\n
// 1.1\n var pool = poolPopulation(shadowHost);\n\n var shadowTre
es = getShadowTrees(shadowHost);\n\n // 1.2\n for (var i = 0; i <
shadowTrees.length; i++) {\n // 1.2.1\n this.poolDistribution(
shadowTrees[i], pool);\n }\n\n // 1.3\n for (var i = shadow
Trees.length - 1; i >= 0; i--) {\n var shadowTree = shadowTrees[i];\n\n
// 1.3.1\n // TODO(arv): We should keep the shadow insertion
points on the\n // shadow root (or renderer) so we don't have to search
the tree\n // every time.\n var shadow = getShadowInsertionPo
int(shadowTree);\n\n // 1.3.2\n if (shadow) {\n\n /
/ 1.3.2.1\n var olderShadowRoot = shadowTree.olderShadowRoot;\n
if (olderShadowRoot) {\n // 1.3.2.1.1\n pool = p
oolPopulation(olderShadowRoot);\n }\n\n // 1.3.2.2\n
for (var j = 0; j < pool.length; j++) {\n // 1.3.2.2.1\n
destributeNodeInto(pool[j], shadow);\n }\n }\n\n
// 1.3.3\n this.distributionResolution(shadowTree);\n }\n
}\n\n for (var child = node.firstChild; child; child = child.nextSibl
ing) {\n this.distributionResolution(child);\n }\n },\n\n // h
ttp://w3c.github.io/webcomponents/spec/shadow/#dfn-pool-distribution-algorithm\n
poolDistribution: function (node, pool) {\n if (node instanceof HTMLSha
dowElement)\n return;\n\n if (node instanceof HTMLContentElement) {\
n var content = node;\n this.updateDependentAttributes(content.get
Attribute('select'));\n\n var anyDistributed = false;\n\n // 1.1\n
for (var i = 0; i < pool.length; i++) {\n var node = pool[i];\n
if (!node)\n continue;\n if (matches(node, content
)) {\n destributeNodeInto(node, content);\n pool[i] = unde
fined;\n anyDistributed = true;\n }\n }\n\n //
1.2\n // Fallback content\n if (!anyDistributed) {\n for
(var child = content.firstChild;\n child;\n child =
child.nextSibling) {\n destributeNodeInto(child, content);\n
}\n }\n\n return;\n }\n\n for (var child = node.firstC
hild; child; child = child.nextSibling) {\n this.poolDistribution(child,
pool);\n }\n },\n\n buildRenderTree: function(renderNode, node) {\n
var children = this.compose(node);\n for (var i = 0; i < children.lengt
h; i++) {\n var child = children[i];\n var childRenderNode = rende
rNode.append(child);\n this.buildRenderTree(childRenderNode, child);\n
}\n\n if (isShadowHost(node)) {\n var renderer = getRendererForHo
st(node);\n renderer.dirty = false;\n }\n\n },\n\n compose: fu
nction(node) {\n var children = [];\n var p = node.shadowRoot || node;
\n for (var child = p.firstChild; child; child = child.nextSibling) {\n
if (isInsertionPoint(child)) {\n this.associateNode(p);\n
var distributedNodes = getDistributedNodes(child);\n for (var j = 0; j
< distributedNodes.length; j++) {\n var distributedNode = distributed
Nodes[j];\n if (isFinalDestination(child, distributedNode))\n
children.push(distributedNode);\n }\n } else {\n
children.push(child);\n }\n }\n return children;\n },\n\n
/**\n * Invalidates the attributes used to keep track of which attributes m
ay\n * cause the renderer to be invalidated.\n */\n invalidateAttribu
tes: function() {\n this.attributes = Object.create(null);\n },\n\n /
**\n * Parses the selector and makes this renderer dependent on the attribut
e\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 att
ributes[name] = true;\n });\n\n // Pseudo selectors have been removed
from the spec.\n },\n\n dependsOnAttribute: function(name) {\n return
this.attributes[name];\n },\n\n associateNode: function(node) {\n no
de.impl.polymerShadowRenderer_ = this;\n }\n };\n\n // http://w3c.github.io
/webcomponents/spec/shadow/#dfn-pool-population-algorithm\n function poolPopula
tion(node) {\n var pool = [];\n for (var child = node.firstChild; child; c
hild = child.nextSibling) {\n if (isInsertionPoint(child)) {\n pool.
push.apply(pool, getDistributedNodes(child));\n } else {\n pool.push
(child);\n }\n }\n return pool;\n }\n\n function getShadowInsertion
Point(node) {\n if (node instanceof HTMLShadowElement)\n return node;\n
if (node instanceof HTMLContentElement)\n return null;\n for (var chi
ld = node.firstChild; child; child = child.nextSibling) {\n var res = getSh
adowInsertionPoint(child);\n if (res)\n return res;\n }\n retu
rn null;\n }\n\n function destributeNodeInto(child, insertionPoint) {\n get
DistributedNodes(insertionPoint).push(child);\n var points = destinationInser
tionPointsTable.get(child);\n if (!points)\n destinationInsertionPointsT
able.set(child, [insertionPoint]);\n else\n points.push(insertionPoint);
\n }\n\n function getDestinationInsertionPoints(node) {\n return destinatio
nInsertionPointsTable.get(node);\n }\n\n function resetDestinationInsertionPoi
nts(node) {\n // IE11 crashes when delete is used.\n destinationInsertionP
ointsTable.set(node, undefined);\n }\n\n // AllowedSelectors :\n // TypeSel
ector\n // *\n // ClassSelector\n // IDSelector\n // AttributeSelect
or\n var selectorStartCharRe = /^[*.#[a-zA-Z_|]/;\n\n function matches(node, c
ontentElement) {\n var select = contentElement.getAttribute('select');\n i
f (!select)\n return true;\n\n // Here we know 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 if (!se
lectorStartCharRe.test(select))\n return false;\n\n try {\n return
node.matches(select);\n } catch (ex) {\n // Invalid selector.\n ret
urn false;\n }\n }\n\n function isFinalDestination(insertionPoint, node) {\
n var points = getDestinationInsertionPoints(node);\n return points && poi
nts[points.length - 1] === insertionPoint;\n }\n\n function isInsertionPoint(n
ode) {\n return node instanceof HTMLContentElement ||\n node instan
ceof HTMLShadowElement;\n }\n\n function isShadowHost(shadowHost) {\n retur
n shadowHost.shadowRoot;\n }\n\n // Returns the shadow trees as an array, with
the youngest tree at the\n // beginning of the array.\n function getShadowTre
es(host) {\n var trees = [];\n\n for (var tree = host.shadowRoot; tree; tr
ee = tree.olderShadowRoot) {\n trees.push(tree);\n }\n return trees;\
n }\n\n function render(host) {\n new ShadowRenderer(host).render();\n };\
n\n // Need to rerender shadow host when:\n //\n // - a direct child to the S
hadowRoot is added or removed\n // - a direct child to the host is added or rem
oved\n // - a new shadow root is created\n // - a direct child to a content/sh
adow element is added or removed\n // - a sibling to a content/shadow element i
s added or removed\n // - content[select] is changed\n // - an attribute in a
direct child to a host is modified\n\n /**\n * This gets called when a node w
as added or removed to it.\n */\n Node.prototype.invalidateShadowRenderer = f
unction(force) {\n var renderer = this.impl.polymerShadowRenderer_;\n if (
renderer) {\n renderer.invalidate();\n return true;\n }\n\n retu
rn false;\n };\n\n HTMLContentElement.prototype.getDistributedNodes =\n HTMLS
hadowElement.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 getDistributedNodes(this);\n };\n\n E
lement.prototype.getDestinationInsertionPoints = function() {\n renderAllPend
ing();\n return getDestinationInsertionPoints(this) || [];\n };\n\n HTMLCon
tentElement.prototype.nodeIsInserted_ =\n HTMLShadowElement.prototype.nodeIsIns
erted_ = function() {\n // Invalidate old renderer if any.\n this.invalida
teShadowRenderer();\n\n var shadowRoot = getShadowRootAncestor(this);\n va
r renderer;\n if (shadowRoot)\n renderer = getRendererForShadowRoot(shad
owRoot);\n this.impl.polymerShadowRenderer_ = renderer;\n if (renderer)\n
renderer.invalidate();\n };\n\n scope.getRendererForHost = getRendererFor
Host;\n scope.getShadowTrees = getShadowTrees;\n scope.renderAllPending = rend
erAllPending;\n\n scope.getDestinationInsertionPoints = getDestinationInsertion
Points;\n\n // Exposed for testing\n scope.visual = {\n insertBefore: inser
tBefore,\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 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 getTreeScope = scope.getTreeScope;\n var mixin = scope.mixin;\n
var oneOf = scope.oneOf;\n var unwrap = scope.unwrap;\n var wrap = scope.wra
p;\n\n /**\n * Updates the fields of a wrapper to a snapshot of the logical D
OM as needed.\n * Up means parentNode\n * Sideways means previous and next s
ibling.\n * @param {!Node} wrapper\n */\n function updateWrapperUpAndSidewa
ys(wrapper) {\n wrapper.previousSibling_ = wrapper.previousSibling;\n wrap
per.nextSibling_ = wrapper.nextSibling;\n wrapper.parentNode_ = wrapper.paren
tNode;\n }\n\n /**\n * Updates the fields of a wrapper to a snapshot of the
logical DOM as needed.\n * Down means first and last child\n * @param {!Node
} wrapper\n */\n function updateWrapperDown(wrapper) {\n wrapper.firstChil
d_ = wrapper.firstChild;\n wrapper.lastChild_ = wrapper.lastChild;\n }\n\n
function updateAllChildNodes(parentNodeWrapper) {\n assert(parentNodeWrapper
instanceof Node);\n for (var childWrapper = parentNodeWrapper.firstChild;\n
childWrapper;\n childWrapper = childWrapper.nextSibling) {\n
updateWrapperUpAndSideways(childWrapper);\n }\n updateWrapperDown(parentN
odeWrapper);\n }\n\n function insertBefore(parentNodeWrapper, newChildWrapper,
refChildWrapper) {\n var parentNode = unwrap(parentNodeWrapper);\n var ne
wChild = unwrap(newChildWrapper);\n var refChild = refChildWrapper ? unwrap(r
efChildWrapper) : null;\n\n remove(newChildWrapper);\n updateWrapperUpAndS
ideways(newChildWrapper);\n\n if (!refChildWrapper) {\n parentNodeWrappe
r.lastChild_ = parentNodeWrapper.lastChild;\n if (parentNodeWrapper.lastChi
ld === parentNodeWrapper.firstChild)\n parentNodeWrapper.firstChild_ = pa
rentNodeWrapper.firstChild;\n\n var lastChildWrapper = wrap(parentNode.last
Child);\n if (lastChildWrapper)\n lastChildWrapper.nextSibling_ = la
stChildWrapper.nextSibling;\n } else {\n if (parentNodeWrapper.firstChil
d === refChildWrapper)\n parentNodeWrapper.firstChild_ = refChildWrapper;
\n\n refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;\n
}\n\n parentNode.insertBefore(newChild, refChild);\n }\n\n function remo
ve(nodeWrapper) {\n var node = unwrap(nodeWrapper)\n var parentNode = node
.parentNode;\n if (!parentNode)\n return;\n\n var parentNodeWrapper =
wrap(parentNode);\n updateWrapperUpAndSideways(nodeWrapper);\n\n if (node
Wrapper.previousSibling)\n nodeWrapper.previousSibling.nextSibling_ = nodeW
rapper;\n if (nodeWrapper.nextSibling)\n nodeWrapper.nextSibling.previou
sSibling_ = nodeWrapper;\n\n if (parentNodeWrapper.lastChild === nodeWrapper)
\n parentNodeWrapper.lastChild_ = nodeWrapper;\n if (parentNodeWrapper.f
irstChild === nodeWrapper)\n parentNodeWrapper.firstChild_ = nodeWrapper;\n
\n parentNode.removeChild(node);\n }\n\n var distributedNodesTable = new We
akMap();\n var destinationInsertionPointsTable = new WeakMap();\n var renderer
ForHostTable = new WeakMap();\n\n function resetDistributedNodes(insertionPoint
) {\n distributedNodesTable.set(insertionPoint, []);\n }\n\n function getDi
stributedNodes(insertionPoint) {\n var rv = distributedNodesTable.get(inserti
onPoint);\n if (!rv)\n distributedNodesTable.set(insertionPoint, rv = []
);\n return rv;\n }\n\n function getChildNodesSnapshot(node) {\n var res
ult = [], i = 0;\n for (var child = node.firstChild; child; child = child.nex
tSibling) {\n result[i++] = child;\n }\n return result;\n }\n\n var
request = oneOf(window, [\n 'requestAnimationFrame',\n 'mozRequestAnimati
onFrame',\n 'webkitRequestAnimationFrame',\n 'setTimeout'\n ]);\n\n var
pendingDirtyRenderers = [];\n var renderTimer;\n\n function renderAllPending()
{\n // TODO(arv): Order these in document order. That way we do not have to\
n // render something twice.\n for (var i = 0; i < pendingDirtyRenderers.l
ength; i++) {\n var renderer = pendingDirtyRenderers[i];\n var parentR
enderer = renderer.parentRenderer;\n if (parentRenderer && parentRenderer.d
irty)\n continue;\n renderer.render();\n }\n\n pendingDirtyRen
derers = [];\n }\n\n function handleRequestAnimationFrame() {\n renderTimer
= null;\n renderAllPending();\n }\n\n /**\n * Returns existing shadow re
nderer for a host or creates it if it is needed.\n * @params {!Element} host\n
* @return {!ShadowRenderer}\n */\n function getRendererForHost(host) {\n
var renderer = rendererForHostTable.get(host);\n if (!renderer) {\n re
nderer = new ShadowRenderer(host);\n rendererForHostTable.set(host, rendere
r);\n }\n return renderer;\n }\n\n function getShadowRootAncestor(node)
{\n var root = getTreeScope(node).root;\n if (root instanceof ShadowRoot)\
n return root;\n return null;\n }\n\n function getRendererForShadowRoo
t(shadowRoot) {\n return getRendererForHost(shadowRoot.host);\n }\n\n var s
pliceDiff = new ArraySplice();\n spliceDiff.equals = function(renderNode, rawNo
de) {\n return unwrap(renderNode.node) === rawNode;\n };\n\n /**\n * Rend
erNode is used as an in memory \"render tree\". When we render the\n * compose
d 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 rv = n
ew 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 o
ldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));\n var added = opt_
added || new WeakMap();\n\n var splices = spliceDiff.calculateSplices(newCh
ildren, oldChildren);\n\n var newIndex = 0, oldIndex = 0;\n var lastIn
dex = 0;\n for (var i = 0; i < splices.length; i++) {\n var splice =
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 < remove
dCount; j++) {\n var wrapper = wrap(oldChildren[oldIndex++]);\n
if (!added.get(wrapper))\n remove(wrapper);\n }\n\n v
ar addedCount = splice.addedCount;\n var refNode = oldChildren[oldIndex]
&& wrap(oldChildren[oldIndex]);\n for (var j = 0; j < addedCount; j++) {\
n var newChildRenderNode = newChildren[newIndex++];\n var newC
hildWrapper = newChildRenderNode.node;\n insertBefore(nodeWrapper, newC
hildWrapper, refNode);\n\n // Keep track of added so that we do not rem
ove the node after it\n // has been added.\n added.set(newChil
dWrapper, true);\n\n newChildRenderNode.sync(added);\n }\n\n
lastIndex += addedCount;\n }\n\n for (var i = lastIndex; i < newCh
ildren.length; i++) {\n newChildren[i].sync(added);\n }\n }\n };
\n\n function ShadowRenderer(host) {\n this.host = host;\n this.dirty = f
alse;\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: function(opt
_renderNode) {\n if (!this.dirty)\n return;\n\n this.invalidate
Attributes();\n\n var host = this.host;\n\n this.distribution(host);\n
var renderNode = opt_renderNode || new RenderNode(host);\n this.build
RenderTree(renderNode, host);\n\n var topMostRenderer = !opt_renderNode;\n
if (topMostRenderer)\n renderNode.sync();\n\n this.dirty = fals
e;\n },\n\n get parentRenderer() {\n return getTreeScope(this.host).r
enderer;\n },\n\n invalidate: function() {\n if (!this.dirty) {\n
this.dirty = true;\n var parentRenderer = this.parentRenderer;\n
if (parentRenderer)\n parentRenderer.invalidate();\n pendingD
irtyRenderers.push(this);\n if (renderTimer)\n return;\n
renderTimer = window[request](handleRequestAnimationFrame, 0);\n }\n },\
n\n // http://w3c.github.io/webcomponents/spec/shadow/#distribution-algorithm
s\n distribution: function(root) {\n this.resetAll(root);\n this.di
stributionResolution(root);\n },\n\n resetAll: function(node) {\n if
(isInsertionPoint(node))\n resetDistributedNodes(node);\n else\n
resetDestinationInsertionPoints(node);\n\n for (var child = node.firstC
hild; child; child = child.nextSibling) {\n this.resetAll(child);\n
}\n\n if (node.shadowRoot)\n this.resetAll(node.shadowRoot);\n\n
if (node.olderShadowRoot)\n this.resetAll(node.olderShadowRoot);\n }
,\n\n // http://w3c.github.io/webcomponents/spec/shadow/#distribution-results
\n distributionResolution: function(node) {\n if (isShadowHost(node)) {\
n var shadowHost = node;\n // 1.1\n var pool = poolPopulati
on(shadowHost);\n\n var shadowTrees = getShadowTrees(shadowHost);\n\n
// 1.2\n for (var i = 0; i < shadowTrees.length; i++) {\n //
1.2.1\n this.poolDistribution(shadowTrees[i], pool);\n }\n\n
// 1.3\n for (var i = shadowTrees.length - 1; i >= 0; i--) {\n
var shadowTree = shadowTrees[i];\n\n // 1.3.1\n // TODO(ar
v): We should keep the shadow insertion points on the\n // shadow root
(or renderer) so we don't have to search the tree\n // every time.\n
var shadow = getShadowInsertionPoint(shadowTree);\n\n // 1.3.2\n
if (shadow) {\n\n // 1.3.2.1\n var olderShadowRo
ot = shadowTree.olderShadowRoot;\n if (olderShadowRoot) {\n
// 1.3.2.1.1\n pool = poolPopulation(olderShadowRoot);\n
}\n\n // 1.3.2.2\n for (var j = 0; j < pool.length; j
++) {\n // 1.3.2.2.1\n destributeNodeInto(pool[j], sha
dow);\n }\n }\n\n // 1.3.3\n this.distribu
tionResolution(shadowTree);\n }\n }\n\n for (var child = node.f
irstChild; child; child = child.nextSibling) {\n this.distributionResolut
ion(child);\n }\n },\n\n // http://w3c.github.io/webcomponents/spec/s
hadow/#dfn-pool-distribution-algorithm\n poolDistribution: function (node, po
ol) {\n if (node instanceof HTMLShadowElement)\n return;\n\n if
(node instanceof HTMLContentElement) {\n var content = node;\n th
is.updateDependentAttributes(content.getAttribute('select'));\n\n var any
Distributed = false;\n\n // 1.1\n for (var i = 0; i < pool.length;
i++) {\n var node = pool[i];\n if (!node)\n contin
ue;\n if (matches(node, content)) {\n destributeNodeInto(nod
e, content);\n pool[i] = undefined;\n anyDistributed = tru
e;\n }\n }\n\n // 1.2\n // Fallback content\n
if (!anyDistributed) {\n for (var child = content.firstChild;\n
child;\n child = child.nextSibling) {\n destr
ibuteNodeInto(child, content);\n }\n }\n\n return;\n
}\n\n for (var child = node.firstChild; child; child = child.nextSibling)
{\n this.poolDistribution(child, pool);\n }\n },\n\n buildRend
erTree: function(renderNode, node) {\n var children = this.compose(node);\n
for (var i = 0; i < children.length; i++) {\n var child = children[
i];\n var childRenderNode = renderNode.append(child);\n this.build
RenderTree(childRenderNode, child);\n }\n\n if (isShadowHost(node)) {\
n var renderer = getRendererForHost(node);\n renderer.dirty = fals
e;\n }\n\n },\n\n compose: function(node) {\n var children = [];
\n var p = node.shadowRoot || node;\n for (var child = p.firstChild; c
hild; child = child.nextSibling) {\n if (isInsertionPoint(child)) {\n
this.associateNode(p);\n var distributedNodes = getDistributedNod
es(child);\n for (var j = 0; j < distributedNodes.length; j++) {\n
var distributedNode = distributedNodes[j];\n if (isFinalDestin
ation(child, distributedNode))\n children.push(distributedNode);\n
}\n } else {\n children.push(child);\n }\n
}\n return children;\n },\n\n /**\n * Invalidates the attributes
used to keep track of which attributes may\n * cause the renderer to be inva
lidated.\n */\n invalidateAttributes: function() {\n this.attributes
= Object.create(null);\n },\n\n /**\n * Parses the selector and makes
this renderer dependent on the attribute\n * being used in the selector.\n
* @param {string} selector\n */\n updateDependentAttributes: function
(selector) {\n if (!selector)\n return;\n\n var attributes = th
is.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 removed from the spec.\n },\n\n dependsOnA
ttribute: function(name) {\n return this.attributes[name];\n },\n\n a
ssociateNode: function(node) {\n node.impl.polymerShadowRenderer_ = this;\n
}\n };\n\n // http://w3c.github.io/webcomponents/spec/shadow/#dfn-pool-pop
ulation-algorithm\n function poolPopulation(node) {\n var pool = [];\n fo
r (var child = node.firstChild; child; child = child.nextSibling) {\n if (i
sInsertionPoint(child)) {\n pool.push.apply(pool, getDistributedNodes(chi
ld));\n } else {\n pool.push(child);\n }\n }\n return poo
l;\n }\n\n function getShadowInsertionPoint(node) {\n if (node instanceof H
TMLShadowElement)\n return node;\n if (node instanceof HTMLContentElemen
t)\n return null;\n for (var child = node.firstChild; child; child = chi
ld.nextSibling) {\n var res = getShadowInsertionPoint(child);\n if (re
s)\n return res;\n }\n return null;\n }\n\n function destributeNo
deInto(child, insertionPoint) {\n getDistributedNodes(insertionPoint).push(ch
ild);\n var points = destinationInsertionPointsTable.get(child);\n if (!po
ints)\n destinationInsertionPointsTable.set(child, [insertionPoint]);\n
else\n points.push(insertionPoint);\n }\n\n function getDestinationInsert
ionPoints(node) {\n return destinationInsertionPointsTable.get(node);\n }\n\
n function resetDestinationInsertionPoints(node) {\n // IE11 crashes when de
lete is used.\n destinationInsertionPointsTable.set(node, undefined);\n }\n\
n // AllowedSelectors :\n // TypeSelector\n // *\n // ClassSelector\n
// IDSelector\n // AttributeSelector\n var selectorStartCharRe = /^[*.#[a
-zA-Z_|]/;\n\n function matches(node, contentElement) {\n var select = conte
ntElement.getAttribute('select');\n if (!select)\n return true;\n\n /
/ Here we know the select attribute is a non empty string.\n select = select.
trim();\n if (!select)\n return true;\n\n if (!(node instanceof Eleme
nt))\n return false;\n\n if (!selectorStartCharRe.test(select))\n r
eturn false;\n\n try {\n return node.matches(select);\n } catch (ex)
{\n // Invalid selector.\n return false;\n }\n }\n\n function isF
inalDestination(insertionPoint, node) {\n var points = getDestinationInsertio
nPoints(node);\n return points && points[points.length - 1] === insertionPoin
t;\n }\n\n function isInsertionPoint(node) {\n return node instanceof HTMLC
ontentElement ||\n node instanceof HTMLShadowElement;\n }\n\n functi
on isShadowHost(shadowHost) {\n return shadowHost.shadowRoot;\n }\n\n // Re
turns the shadow trees as an array, with the youngest tree at the\n // beginnin
g of the array.\n function getShadowTrees(host) {\n var trees = [];\n\n f
or (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {\n tree
s.push(tree);\n }\n return trees;\n }\n\n function render(host) {\n n
ew ShadowRenderer(host).render();\n };\n\n // Need to rerender shadow host whe
n:\n //\n // - a direct child to the ShadowRoot is added or removed\n // - a
direct child to the host is added or removed\n // - a new shadow root is create
d\n // - a direct child to a content/shadow element is added or removed\n // -
a sibling to a content/shadow element is added or removed\n // - content[selec
t] is changed\n // - an attribute in a direct child to a host is modified\n\n
/**\n * This gets called when a node was added or removed to it.\n */\n Nod
e.prototype.invalidateShadowRenderer = function(force) {\n var renderer = thi
s.impl.polymerShadowRenderer_;\n if (renderer) {\n renderer.invalidate()
;\n return true;\n }\n\n return false;\n };\n\n HTMLContentElement.
prototype.getDistributedNodes =\n HTMLShadowElement.prototype.getDistributedNod
es = function() {\n // TODO(arv): We should only rerender the dirty ancestor
renderers (from\n // the root and down).\n renderAllPending();\n return
getDistributedNodes(this);\n };\n\n Element.prototype.getDestinationInsertion
Points = function() {\n renderAllPending();\n return getDestinationInserti
onPoints(this) || [];\n };\n\n HTMLContentElement.prototype.nodeIsInserted_ =\
n HTMLShadowElement.prototype.nodeIsInserted_ = function() {\n // Invalidate
old renderer if any.\n this.invalidateShadowRenderer();\n\n var shadowRoo
t = getShadowRootAncestor(this);\n var renderer;\n if (shadowRoot)\n
renderer = getRendererForShadowRoot(shadowRoot);\n this.impl.polymerShadowRen
derer_ = renderer;\n if (renderer)\n renderer.invalidate();\n };\n\n s
cope.getRendererForHost = getRendererForHost;\n scope.getShadowTrees = getShado
wTrees;\n scope.renderAllPending = renderAllPending;\n\n scope.getDestinationI
nsertionPoints = getDestinationInsertionPoints;\n\n // Exposed for testing\n s
cope.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 is handled in HTMLSelectElement.js\n 'HT
MLTextAreaElement',\n ];\n\n function createWrapperConstructor(name) {\n if
(!window[name])\n return;\n\n // Ensure we are not overriding an alread
y existing constructor.\n assert(!scope.wrappers[name]);\n\n var Generated
Wrapper = function(node) {\n // At this point all of them extend HTMLElemen
t.\n HTMLElement.call(this, node);\n }\n GeneratedWrapper.prototype =
Object.create(HTMLElement.prototype);\n mixin(GeneratedWrapper.prototype, {\
n get form() {\n return wrap(unwrap(this).form);\n },\n });\
n\n registerWrapper(window[name], GeneratedWrapper,\n document.createE
lement(name.slice(4, -7)));\n scope.wrappers[name] = GeneratedWrapper;\n }\n
\n elementsWithFormProperty.forEach(createWrapperConstructor);\n\n})(window.Sha
dowDOMPolyfill);\n", | 134 "// 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 is handled in HTMLSelectElement.js\n 'HT
MLTextAreaElement',\n ];\n\n function createWrapperConstructor(name) {\n if
(!window[name])\n return;\n\n // Ensure we are not overriding an alread
y existing constructor.\n assert(!scope.wrappers[name]);\n\n var Generated
Wrapper = function(node) {\n // At this point all of them extend HTMLElemen
t.\n HTMLElement.call(this, node);\n }\n GeneratedWrapper.prototype =
Object.create(HTMLElement.prototype);\n mixin(GeneratedWrapper.prototype, {\
n get form() {\n return wrap(unwrap(this).form);\n },\n });\
n\n registerWrapper(window[name], GeneratedWrapper,\n document.createE
lement(name.slice(4, -7)));\n scope.wrappers[name] = GeneratedWrapper;\n }\n
\n elementsWithFormProperty.forEach(createWrapperConstructor);\n\n})(window.Sha
dowDOMPolyfill);\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 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 TreeScope = scope.TreeScope;\n var clone
Node = scope.cloneNode;\n var defineWrapGetter = scope.defineWrapGetter;\n var
elementFromPoint = scope.elementFromPoint;\n var forwardMethodsToWrapper = sco
pe.forwardMethodsToWrapper;\n var matchesNames = scope.matchesNames;\n var mix
in = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderA
llPending = scope.renderAllPending;\n var rewrap = scope.rewrap;\n var unwrap
= scope.unwrap;\n var wrap = scope.wrap;\n var wrapEventTargetMethods = scope.
wrapEventTargetMethods;\n var wrapNodeList = scope.wrapNodeList;\n\n var imple
mentationTable = new WeakMap();\n\n function Document(node) {\n Node.call(th
is, node);\n this.treeScope_ = new TreeScope(this, null);\n }\n Document.pr
ototype = Object.create(Node.prototype);\n\n defineWrapGetter(Document, 'docume
ntElement');\n\n // Conceptually both body and head can be in a shadow but supo
rting that seems\n // overkill at this point.\n defineWrapGetter(Document, 'bo
dy');\n defineWrapGetter(Document, 'head');\n\n // document cannot be overridd
en so we override a bunch of its methods\n // directly on the instance.\n\n fu
nction wrapMethod(name) {\n var original = document[name];\n Document.prot
otype[name] = function() {\n return wrap(original.apply(this.impl, argument
s));\n };\n }\n\n [\n 'createComment',\n 'createDocumentFragment',\n
'createElement',\n 'createElementNS',\n 'createEvent',\n 'createEven
tNS',\n 'createRange',\n 'createTextNode',\n 'getElementById'\n ].forE
ach(wrapMethod);\n\n var originalAdoptNode = document.adoptNode;\n\n function
adoptNodeNoRemove(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 in
stanceof ShadowRoot)\n adoptOlderShadowRoots(node, doc);\n for (var chil
d = node.firstChild; child; child = child.nextSibling) {\n adoptSubtree(chi
ld, doc);\n }\n }\n\n function adoptOlderShadowRoots(shadowRoot, doc) {\n
var oldShadowRoot = shadowRoot.olderShadowRoot;\n if (oldShadowRoot)\n
doc.adoptNode(oldShadowRoot);\n }\n\n var originalGetSelection = document.get
Selection;\n\n mixin(Document.prototype, {\n adoptNode: function(node) {\n
if (node.parentNode)\n node.parentNode.removeChild(node);\n adop
tNodeNoRemove(node, this);\n return node;\n },\n elementFromPoint: fu
nction(x, y) {\n return elementFromPoint(this, this, x, y);\n },\n im
portNode: function(node, deep) {\n return cloneNode(node, deep, this.impl);
\n },\n getSelection: function() {\n renderAllPending();\n retur
n new Selection(originalGetSelection.call(unwrap(this)));\n },\n getElemen
tsByName: function(name) {\n return SelectorsInterface.querySelectorAll.cal
l(this,\n '[name=' + JSON.stringify(String(name)) + ']');\n }\n });
\n\n if (document.registerElement) {\n var originalRegisterElement = documen
t.registerElement;\n Document.prototype.registerElement = function(tagName, o
bject) {\n var prototype, extendsOption;\n if (object !== undefined) {
\n prototype = object.prototype;\n extendsOption = object.extends;
\n }\n\n if (!prototype)\n prototype = Object.create(HTMLElemen
t.prototype);\n\n\n // If we already used the object as a prototype for ano
ther custom\n // element.\n if (scope.nativePrototypeTable.get(prototy
pe)) {\n // TODO(arv): DOMException\n throw new Error('NotSupporte
dError');\n }\n\n // Find first object on the prototype chain that alr
eady have a native\n // prototype. Keep track of all the objects before tha
t so we can create\n // a similar structure for the native case.\n var
proto = Object.getPrototypeOf(prototype);\n var nativePrototype;\n va
r prototypes = [];\n while (proto) {\n nativePrototype = scope.nativ
ePrototypeTable.get(proto);\n if (nativePrototype)\n break;\n
prototypes.push(proto);\n proto = Object.getPrototypeOf(proto);\n
}\n\n if (!nativePrototype) {\n // TODO(arv): DOMException\n
throw new Error('NotSupportedError');\n }\n\n // This works by crea
ting a new prototype object that is empty, but has\n // the native prototyp
e as its proto. The original prototype object\n // passed into register is
used as the wrapper prototype.\n\n var newPrototype = Object.create(nativeP
rototype);\n for (var i = prototypes.length - 1; i >= 0; i--) {\n ne
wPrototype = Object.create(newPrototype);\n }\n\n // Add callbacks if
present.\n // Names are taken from:\n // https://code.google.com/p/c
hromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/CustomElem
entConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\n // and not fr
om the spec since the spec is out of date.\n [\n 'createdCallback',\
n 'attachedCallback',\n 'detachedCallback',\n 'attributeCha
ngedCallback',\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 registration,\n
// the wrapper is stale; in this case rewrap\n if (!(wrap(this) inst
anceof CustomElementConstructor)) {\n rewrap(this);\n }\n
f.apply(wrap(this), arguments);\n };\n });\n\n var p = {
prototype: newPrototype};\n if (extendsOption)\n p.extends = extends
Option;\n\n function CustomElementConstructor(node) {\n if (!node) {
\n if (extendsOption) {\n return document.createElement(exte
ndsOption, tagName);\n } else {\n return document.createElem
ent(tagName);\n }\n }\n this.impl = node;\n }\n
CustomElementConstructor.prototype = prototype;\n CustomElementConstructor
.prototype.constructor = CustomElementConstructor;\n\n scope.constructorTab
le.set(newPrototype, CustomElementConstructor);\n scope.nativePrototypeTabl
e.set(prototype, newPrototype);\n\n // registration is synchronous so do it
last\n var nativeConstructor = originalRegisterElement.call(unwrap(this),\
n tagName, p);\n return CustomElementConstructor;\n };\n\n f
orwardMethodsToWrapper([\n window.HTMLDocument || window.Document, // Geck
o adds these to HTMLDocument\n ], [\n 'registerElement',\n ]);\n }\n
\n // We also override some of the methods on document.body and document.head\n
// for convenience.\n forwardMethodsToWrapper([\n window.HTMLBodyElement,\
n window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocumen
t\n window.HTMLHeadElement,\n window.HTMLHtmlElement,\n ], [\n 'append
Child',\n 'compareDocumentPosition',\n 'contains',\n 'getElementsByClas
sName',\n 'getElementsByTagName',\n 'getElementsByTagNameNS',\n 'insert
Before',\n 'querySelector',\n 'querySelectorAll',\n 'removeChild',\n
'replaceChild',\n ].concat(matchesNames));\n\n forwardMethodsToWrapper([\n
window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument\n
], [\n 'adoptNode',\n 'importNode',\n 'contains',\n 'createComment'
,\n 'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n
'createEvent',\n 'createEventNS',\n 'createRange',\n 'createTextNod
e',\n 'elementFromPoint',\n 'getElementById',\n 'getElementsByName',\n
'getSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface)
;\n mixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype
, SelectorsInterface);\n\n mixin(Document.prototype, {\n get implementation(
) {\n var implementation = implementationTable.get(this);\n if (implem
entation)\n return implementation;\n implementation =\n new
DOMImplementation(unwrap(this).implementation);\n implementationTable.set(
this, implementation);\n return implementation;\n },\n\n get defaultV
iew() {\n return wrap(unwrap(this).defaultView);\n }\n });\n\n registe
rWrapper(window.Document, Document,\n document.implementation.createHTMLDoc
ument(''));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/
DOM only has\n // one Document interface and IE implements the standard correct
ly.\n if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Docume
nt);\n\n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTML
Document || window.Document, // Gecko adds these to HTMLDocument\n window.HT
MLHeadElement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = i
mpl;\n }\n\n function wrapImplMethod(constructor, name) {\n var original =
document.implementation[name];\n constructor.prototype[name] = function() {\n
return wrap(original.apply(this.impl, arguments));\n };\n }\n\n funct
ion forwardImplMethod(constructor, name) {\n var original = document.implemen
tation[name];\n constructor.prototype[name] = function() {\n return orig
inal.apply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementa
tion, 'createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocumen
t');\n wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplM
ethod(DOMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplement
ation, DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImpleme
ntation,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createH
TMLDocument',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNode
NoRemove;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrap
pers.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 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 TreeScope = scope.TreeScope;\n var clone
Node = scope.cloneNode;\n var defineWrapGetter = scope.defineWrapGetter;\n var
elementFromPoint = scope.elementFromPoint;\n var forwardMethodsToWrapper = sco
pe.forwardMethodsToWrapper;\n var matchesNames = scope.matchesNames;\n var mix
in = scope.mixin;\n var registerWrapper = scope.registerWrapper;\n var renderA
llPending = scope.renderAllPending;\n var rewrap = scope.rewrap;\n var unwrap
= scope.unwrap;\n var wrap = scope.wrap;\n var wrapEventTargetMethods = scope.
wrapEventTargetMethods;\n var wrapNodeList = scope.wrapNodeList;\n\n var imple
mentationTable = new WeakMap();\n\n function Document(node) {\n Node.call(th
is, node);\n this.treeScope_ = new TreeScope(this, null);\n }\n Document.pr
ototype = Object.create(Node.prototype);\n\n defineWrapGetter(Document, 'docume
ntElement');\n\n // Conceptually both body and head can be in a shadow but supo
rting that seems\n // overkill at this point.\n defineWrapGetter(Document, 'bo
dy');\n defineWrapGetter(Document, 'head');\n\n // document cannot be overridd
en so we override a bunch of its methods\n // directly on the instance.\n\n fu
nction wrapMethod(name) {\n var original = document[name];\n Document.prot
otype[name] = function() {\n return wrap(original.apply(this.impl, argument
s));\n };\n }\n\n [\n 'createComment',\n 'createDocumentFragment',\n
'createElement',\n 'createElementNS',\n 'createEvent',\n 'createEven
tNS',\n 'createRange',\n 'createTextNode',\n 'getElementById'\n ].forE
ach(wrapMethod);\n\n var originalAdoptNode = document.adoptNode;\n\n function
adoptNodeNoRemove(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 in
stanceof ShadowRoot)\n adoptOlderShadowRoots(node, doc);\n for (var chil
d = node.firstChild; child; child = child.nextSibling) {\n adoptSubtree(chi
ld, doc);\n }\n }\n\n function adoptOlderShadowRoots(shadowRoot, doc) {\n
var oldShadowRoot = shadowRoot.olderShadowRoot;\n if (oldShadowRoot)\n
doc.adoptNode(oldShadowRoot);\n }\n\n var originalGetSelection = document.get
Selection;\n\n mixin(Document.prototype, {\n adoptNode: function(node) {\n
if (node.parentNode)\n node.parentNode.removeChild(node);\n adop
tNodeNoRemove(node, this);\n return node;\n },\n elementFromPoint: fu
nction(x, y) {\n return elementFromPoint(this, this, x, y);\n },\n im
portNode: function(node, deep) {\n return cloneNode(node, deep, this.impl);
\n },\n getSelection: function() {\n renderAllPending();\n retur
n new Selection(originalGetSelection.call(unwrap(this)));\n },\n getElemen
tsByName: function(name) {\n return SelectorsInterface.querySelectorAll.cal
l(this,\n '[name=' + JSON.stringify(String(name)) + ']');\n }\n });
\n\n if (document.registerElement) {\n var originalRegisterElement = documen
t.registerElement;\n Document.prototype.registerElement = function(tagName, o
bject) {\n var prototype, extendsOption;\n if (object !== undefined) {
\n prototype = object.prototype;\n extendsOption = object.extends;
\n }\n\n if (!prototype)\n prototype = Object.create(HTMLElemen
t.prototype);\n\n\n // If we already used the object as a prototype for ano
ther custom\n // element.\n if (scope.nativePrototypeTable.get(prototy
pe)) {\n // TODO(arv): DOMException\n throw new Error('NotSupporte
dError');\n }\n\n // Find first object on the prototype chain that alr
eady have a native\n // prototype. Keep track of all the objects before tha
t so we can create\n // a similar structure for the native case.\n var
proto = Object.getPrototypeOf(prototype);\n var nativePrototype;\n va
r prototypes = [];\n while (proto) {\n nativePrototype = scope.nativ
ePrototypeTable.get(proto);\n if (nativePrototype)\n break;\n
prototypes.push(proto);\n proto = Object.getPrototypeOf(proto);\n
}\n\n if (!nativePrototype) {\n // TODO(arv): DOMException\n
throw new Error('NotSupportedError');\n }\n\n // This works by crea
ting a new prototype object that is empty, but has\n // the native prototyp
e as its proto. The original prototype object\n // passed into register is
used as the wrapper prototype.\n\n var newPrototype = Object.create(nativeP
rototype);\n for (var i = prototypes.length - 1; i >= 0; i--) {\n ne
wPrototype = Object.create(newPrototype);\n }\n\n // Add callbacks if
present.\n // Names are taken from:\n // https://code.google.com/p/c
hromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/CustomElem
entConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156\n // and not fr
om the spec since the spec is out of date.\n [\n 'createdCallback',\
n 'attachedCallback',\n 'detachedCallback',\n 'attributeCha
ngedCallback',\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 registration,\n
// the wrapper is stale; in this case rewrap\n if (!(wrap(this) inst
anceof CustomElementConstructor)) {\n rewrap(this);\n }\n
f.apply(wrap(this), arguments);\n };\n });\n\n var p = {
prototype: newPrototype};\n if (extendsOption)\n p.extends = extends
Option;\n\n function CustomElementConstructor(node) {\n if (!node) {
\n if (extendsOption) {\n return document.createElement(exte
ndsOption, tagName);\n } else {\n return document.createElem
ent(tagName);\n }\n }\n this.impl = node;\n }\n
CustomElementConstructor.prototype = prototype;\n CustomElementConstructor
.prototype.constructor = CustomElementConstructor;\n\n scope.constructorTab
le.set(newPrototype, CustomElementConstructor);\n scope.nativePrototypeTabl
e.set(prototype, newPrototype);\n\n // registration is synchronous so do it
last\n var nativeConstructor = originalRegisterElement.call(unwrap(this),\
n tagName, p);\n return CustomElementConstructor;\n };\n\n f
orwardMethodsToWrapper([\n window.HTMLDocument || window.Document, // Geck
o adds these to HTMLDocument\n ], [\n 'registerElement',\n ]);\n }\n
\n // We also override some of the methods on document.body and document.head\n
// for convenience.\n forwardMethodsToWrapper([\n window.HTMLBodyElement,\
n window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocumen
t\n window.HTMLHeadElement,\n window.HTMLHtmlElement,\n ], [\n 'append
Child',\n 'compareDocumentPosition',\n 'contains',\n 'getElementsByClas
sName',\n 'getElementsByTagName',\n 'getElementsByTagNameNS',\n 'insert
Before',\n 'querySelector',\n 'querySelectorAll',\n 'removeChild',\n
'replaceChild',\n ].concat(matchesNames));\n\n forwardMethodsToWrapper([\n
window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument\n
], [\n 'adoptNode',\n 'importNode',\n 'contains',\n 'createComment'
,\n 'createDocumentFragment',\n 'createElement',\n 'createElementNS',\n
'createEvent',\n 'createEventNS',\n 'createRange',\n 'createTextNod
e',\n 'elementFromPoint',\n 'getElementById',\n 'getElementsByName',\n
'getSelection',\n ]);\n\n mixin(Document.prototype, GetElementsByInterface)
;\n mixin(Document.prototype, ParentNodeInterface);\n mixin(Document.prototype
, SelectorsInterface);\n\n mixin(Document.prototype, {\n get implementation(
) {\n var implementation = implementationTable.get(this);\n if (implem
entation)\n return implementation;\n implementation =\n new
DOMImplementation(unwrap(this).implementation);\n implementationTable.set(
this, implementation);\n return implementation;\n },\n\n get defaultV
iew() {\n return wrap(unwrap(this).defaultView);\n }\n });\n\n registe
rWrapper(window.Document, Document,\n document.implementation.createHTMLDoc
ument(''));\n\n // Both WebKit and Gecko uses HTMLDocument for document. HTML5/
DOM only has\n // one Document interface and IE implements the standard correct
ly.\n if (window.HTMLDocument)\n registerWrapper(window.HTMLDocument, Docume
nt);\n\n wrapEventTargetMethods([\n window.HTMLBodyElement,\n window.HTML
Document || window.Document, // Gecko adds these to HTMLDocument\n window.HT
MLHeadElement,\n ]);\n\n function DOMImplementation(impl) {\n this.impl = i
mpl;\n }\n\n function wrapImplMethod(constructor, name) {\n var original =
document.implementation[name];\n constructor.prototype[name] = function() {\n
return wrap(original.apply(this.impl, arguments));\n };\n }\n\n funct
ion forwardImplMethod(constructor, name) {\n var original = document.implemen
tation[name];\n constructor.prototype[name] = function() {\n return orig
inal.apply(this.impl, arguments);\n };\n }\n\n wrapImplMethod(DOMImplementa
tion, 'createDocumentType');\n wrapImplMethod(DOMImplementation, 'createDocumen
t');\n wrapImplMethod(DOMImplementation, 'createHTMLDocument');\n forwardImplM
ethod(DOMImplementation, 'hasFeature');\n\n registerWrapper(window.DOMImplement
ation, DOMImplementation);\n\n forwardMethodsToWrapper([\n window.DOMImpleme
ntation,\n ], [\n 'createDocumentType',\n 'createDocument',\n 'createH
TMLDocument',\n 'hasFeature',\n ]);\n\n scope.adoptNodeNoRemove = adoptNode
NoRemove;\n scope.wrappers.DOMImplementation = DOMImplementation;\n scope.wrap
pers.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 get docum
ent() {\n return wrap(unwrap(this).document);\n }\n });\n\n registerWr
apper(OriginalWindow, Window, 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 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 get docum
ent() {\n return wrap(unwrap(this).document);\n }\n });\n\n registerWr
apper(OriginalWindow, Window, window);\n\n scope.wrappers.Window = Window;\n\n}
)(window.ShadowDOMPolyfill);\n", |
137 "/**\n * 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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = s
cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m
ethod that\n // requires wrapping. Since it is only a method we do not need a r
eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe
r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI
mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n OriginalDataTran
sfer.prototype.setDragImage = function(image, x, y) {\n OriginalDataTransferS
etDragImage.call(this, unwrap(image), x, y);\n };\n\n})(window.ShadowDOMPolyfil
l);\n", | 138 "/**\n * 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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var unwrap = s
cope.unwrap;\n\n // DataTransfer (Clipboard in old Blink/WebKit) has a single m
ethod that\n // requires wrapping. Since it is only a method we do not need a r
eal wrapper,\n // we can just override the method.\n\n var OriginalDataTransfe
r = window.DataTransfer || window.Clipboard;\n var OriginalDataTransferSetDragI
mage =\n OriginalDataTransfer.prototype.setDragImage;\n\n if (OriginalData
TransferSetDragImage) {\n OriginalDataTransfer.prototype.setDragImage = funct
ion(image, x, y) {\n OriginalDataTransferSetDragImage.call(this, unwrap(ima
ge), x, y);\n };\n }\n\n})(window.ShadowDOMPolyfill);\n", |
| 139 "/**\n * 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 t
he LICENSE file.\n */\n\n(function(scope) {\n 'use strict';\n\n var registerWr
apper = scope.registerWrapper;\n var unwrap = scope.unwrap;\n\n var OriginalFo
rmData = window.FormData;\n\n function FormData(formElement) {\n this.impl =
new OriginalFormData(formElement && unwrap(formElement));\n }\n\n registerWra
pper(OriginalFormData, FormData, new OriginalFormData());\n\n scope.wrappers.Fo
rmData = FormData;\n\n})(window.ShadowDOMPolyfill);\n", |
138 "// 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 // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n", | 140 "// 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 // Do not create an applet element by default since it shows a warning in\
n // IE.\n // https://github.com/Polymer/polymer/issues/217\n // 'apple
t': 'HTMLAppletElement',\n 'area': 'HTMLAreaElement',\n 'audio': 'HTMLAudi
oElement',\n 'base': 'HTMLBaseElement',\n 'body': 'HTMLBodyElement',\n
'br': 'HTMLBRElement',\n 'button': 'HTMLButtonElement',\n 'canvas': 'HTMLC
anvasElement',\n 'caption': 'HTMLTableCaptionElement',\n 'col': 'HTMLTable
ColElement',\n // 'command': 'HTMLCommandElement', // Not fully implemented
in Gecko.\n 'content': 'HTMLContentElement',\n 'data': 'HTMLDataElement',\
n 'datalist': 'HTMLDataListElement',\n 'del': 'HTMLModElement',\n 'dir'
: 'HTMLDirectoryElement',\n 'div': 'HTMLDivElement',\n 'dl': 'HTMLDListEle
ment',\n 'embed': 'HTMLEmbedElement',\n 'fieldset': 'HTMLFieldSetElement',
\n 'font': 'HTMLFontElement',\n 'form': 'HTMLFormElement',\n 'frame': '
HTMLFrameElement',\n 'frameset': 'HTMLFrameSetElement',\n 'h1': 'HTMLHeadi
ngElement',\n 'head': 'HTMLHeadElement',\n 'hr': 'HTMLHRElement',\n 'ht
ml': 'HTMLHtmlElement',\n 'iframe': 'HTMLIFrameElement',\n 'img': 'HTMLIma
geElement',\n 'input': 'HTMLInputElement',\n 'keygen': 'HTMLKeygenElement'
,\n 'label': 'HTMLLabelElement',\n 'legend': 'HTMLLegendElement',\n 'li
': 'HTMLLIElement',\n 'link': 'HTMLLinkElement',\n 'map': 'HTMLMapElement'
,\n 'marquee': 'HTMLMarqueeElement',\n 'menu': 'HTMLMenuElement',\n 'me
nuitem': 'HTMLMenuItemElement',\n 'meta': 'HTMLMetaElement',\n 'meter': 'H
TMLMeterElement',\n 'object': 'HTMLObjectElement',\n 'ol': 'HTMLOListEleme
nt',\n 'optgroup': 'HTMLOptGroupElement',\n 'option': 'HTMLOptionElement',
\n 'output': 'HTMLOutputElement',\n 'p': 'HTMLParagraphElement',\n 'par
am': 'HTMLParamElement',\n 'pre': 'HTMLPreElement',\n 'progress': 'HTMLPro
gressElement',\n 'q': 'HTMLQuoteElement',\n 'script': 'HTMLScriptElement',
\n 'select': 'HTMLSelectElement',\n 'shadow': 'HTMLShadowElement',\n 's
ource': 'HTMLSourceElement',\n 'span': 'HTMLSpanElement',\n 'style': 'HTML
StyleElement',\n 'table': 'HTMLTableElement',\n 'tbody': 'HTMLTableSection
Element',\n // WebKit and Moz are wrong:\n // https://bugs.webkit.org/show
_bug.cgi?id=111469\n // https://bugzilla.mozilla.org/show_bug.cgi?id=848096\n
// 'td': 'HTMLTableCellElement',\n 'template': 'HTMLTemplateElement',\n
'textarea': 'HTMLTextAreaElement',\n 'thead': 'HTMLTableSectionElement',\n
'time': 'HTMLTimeElement',\n 'title': 'HTMLTitleElement',\n 'tr': 'HTML
TableRowElement',\n 'track': 'HTMLTrackElement',\n 'ul': 'HTMLUListElement
',\n 'video': 'HTMLVideoElement',\n };\n\n function overrideConstructor(tag
Name) {\n var nativeConstructorName = elements[tagName];\n var nativeConst
ructor = window[nativeConstructorName];\n if (!nativeConstructor)\n retu
rn;\n var element = document.createElement(tagName);\n var wrapperConstruc
tor = element.constructor;\n window[nativeConstructorName] = wrapperConstruct
or;\n }\n\n Object.keys(elements).forEach(overrideConstructor);\n\n Object.ge
tOwnPropertyNames(scope.wrappers).forEach(function(name) {\n window[name] = s
cope.wrappers[name]\n });\n\n})(window.ShadowDOMPolyfill);\n", |
139 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u
nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot
her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b
ut\n // I've left this code here in case we need to temporarily patch another\n
// type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\
n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr
uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume
nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name
\n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g
etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea
teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh
adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n
CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy
pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu
eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh
adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n
shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow
s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n
if (m) {\n return m;\n }\n }\n while(el) {\n m = query
Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el
.nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows
(node, selector, results) {\n var el = node.firstElementChild;\n var temp,
sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr)
{\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i =
shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se
lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j]
);\n }\n }\n while (el) {\n queryAllShadows(el, selector, result
s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco
pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu
rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow(
node, selector);\n }\n };\n})(window.Platform);\n", | 141 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ convenient global\n window.wrap = ShadowDOMPolyfill.wrapIfNeeded;\n window.u
nwrap = ShadowDOMPolyfill.unwrapIfNeeded;\n\n // users may want to customize ot
her types\n // TODO(sjmiles): 'button' is now supported by ShadowDOMPolyfill, b
ut\n // I've left this code here in case we need to temporarily patch another\n
// type\n /*\n (function() {\n var elts = {HTMLButtonElement: 'button'};\
n for (var c in elts) {\n window[c] = function() { throw 'Patched Constr
uctor'; };\n window[c].prototype = Object.getPrototypeOf(\n docume
nt.createElement(elts[c]));\n }\n })();\n */\n\n // patch in prefixed name
\n Object.defineProperty(Element.prototype, 'webkitShadowRoot',\n Object.g
etOwnPropertyDescriptor(Element.prototype, 'shadowRoot'));\n\n var originalCrea
teShadowRoot = Element.prototype.createShadowRoot;\n Element.prototype.createSh
adowRoot = function() {\n var root = originalCreateShadowRoot.call(this);\n
CustomElements.watchShadow(this);\n return root;\n };\n\n Element.prototy
pe.webkitCreateShadowRoot = Element.prototype.createShadowRoot;\n\n function qu
eryShadow(node, selector) {\n var m, el = node.firstElementChild;\n var sh
adows, sr, i;\n shadows = [];\n sr = node.shadowRoot;\n while(sr) {\n
shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for(i = shadow
s.length - 1; i >= 0; i--) {\n m = shadows[i].querySelector(selector);\n
if (m) {\n return m;\n }\n }\n while(el) {\n m = query
Shadow(el, selector);\n if (m) {\n return m;\n }\n el = el
.nextElementSibling;\n }\n return null;\n }\n\n function queryAllShadows
(node, selector, results) {\n var el = node.firstElementChild;\n var temp,
sr, shadows, i, j;\n shadows = [];\n sr = node.shadowRoot;\n while(sr)
{\n shadows.push(sr);\n sr = sr.olderShadowRoot;\n }\n for (i =
shadows.length - 1; i >= 0; i--) {\n temp = shadows[i].querySelectorAll(se
lector);\n for(j = 0; j < temp.length; j++) {\n results.push(temp[j]
);\n }\n }\n while (el) {\n queryAllShadows(el, selector, result
s);\n el = el.nextElementSibling;\n }\n return results;\n }\n\n sco
pe.queryAllShadows = function(node, selector, all) {\n if (all) {\n retu
rn queryAllShadows(node, selector, []);\n } else {\n return queryShadow(
node, selector);\n }\n };\n})(window.Platform);\n", |
140 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n/*\n This is a limited s
him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/shadow/index.html#styles\n \n The intention here is to support only t
he 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 compromi
sing performance significantly. \n For ShadowDOM styling that's not covered her
e, a set of best practices\n can be provided that should allow users to accompl
ish more complex styling.\n\n The following is a list of specific ShadowDOM sty
ling features and a brief\n discussion of the approach used to shim.\n\n Shimm
ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow
Root's host\n element using the :host rule. To shim this feature, the :host sty
les 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 be
comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty
les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme
r uses one of two techniques to imlement\n this feature.\n \n By default, rul
es are prefixed with the host element tag name \n as a descendant selector. Thi
s 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 scope
d by adding an attribute selector suffix to each\n simple selector that contain
s the host element tag name. Each element \n in the element's ShadowDOM templat
e is also given the scope attribute. \n Thus, these rules match only elements t
hat have the scope attribute.\n For example, given a scope name of x-foo, a rul
e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n
\n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that
are dynamically added to a scope must have the scope\n selector added to them
manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi
de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\
n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl
e ways to do this that \n were rejected due to complexity and/or performance co
ncerns include: (1) reset\n every possible property for every possible selector
for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt
ernative, users should make sure to use selectors\n specific to the scope in wh
ich they are working.\n \n * ::distributed: This behavior is not emulated. It'
s often not necessary\n to style the contents of a specific insertion point and
instead, descendants\n of the host element can be styled selectively. Users ca
n also create an \n extra node around 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(div) {\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 backgr
ound: 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 styl
ing shim to use the selector \n in comments in lieu of the next selector when r
unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty
ling: false,\n registry: {},\n // Shim styles for a given root associated with
a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t
ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */
and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio
n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name,
extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n
var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac
hing to make working with styles nodes easier and to facilitate\n // lookup o
f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText =
this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo
r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n }
\n // add style to document\n this.addCssToDocument(cssText, name);\n },\
n /*\n * Shim a style element with the given selector. Returns cssText that ca
n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css).
\n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st
yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se
lector. Returns cssText that can\n * be included in the document via Platform.S
hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector
) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText
(cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) {
\n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n
}\n return '';\n },\n isTypeExtension: function(extendsName) {\n return
extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo
t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName
);\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n //
remove existing style elements\n this.removeStyles(root, def.rootStyles);\n
// apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC
ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f
unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style
s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot:
function(root, name, extendsName) {\n var def = this.registry[name] = {\n
root: root,\n name: name,\n extendsName: extendsName\n }\n var
styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty
les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i
f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty
les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro
ot) {\n return [];\n }\n var styles = root.querySelectorAll('style');
\n return Array.prototype.filter.call(styles, function(s) {\n return !s.
hasAttribute(NO_SHIM_ATTRIBUTE);\n });\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 contents too\n Array.prototype.forEach.call(root.querySe
lectorAll('template'),\n function(template) {\n this.applySc
opeToContent(template.content, name);\n },\n this);\n }\n
},\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi
rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex
t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will
trip\n * up the css parser; we rely on decorating the stylesheet with inert r
ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next
-selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n
* to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir
ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte
nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function(
match, p1) {\n // remove end comment delimiter and add block start\n r
eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext
SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\
n * Process styles to add rules which will only apply under the polyfill\n *
\n * For example, we convert this rule:\n * \n * polyfill-rule {\n *
content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n *
scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio
n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex
t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end
comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r
eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r
eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En
sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {..
. } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n
*/\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi
s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo
stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex
t = this.convertColonHostContext(cssText);\n cssText = this.convertCombinator
s(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n wi
thCssRules(cssText, function(rules) {\n cssText = self.scopeRules(rules,
scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unscoped;\n
return cssText.trim();\n },\n /*\n * Process styles to add rules which w
ill only apply under the polyfill\n * and do not process via CSSOM. (CSSOM is
destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safari.)\n
* For example, we convert this rule:\n * \n * (comment start) @polyfill-uns
coped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n * \n
* menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: function(c
ssText) {\n // TODO(sorvell): remove either content or comment\n var r = '
', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r += m[1]
.slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe.exec(c
ssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\\n';\n
}\n return r;\n },\n /*\n * convert a rule like :host(.foo) > .bar { }
\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHost: func
tion(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe,\n
this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :host-con
text(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .foo scop
eName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .bar { ..
. }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n convertColo
nHostContext: function(cssText) {\n return this.convertColonRule(cssText, css
ColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n conver
tColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host, p2 = c
ontents of (), p3 rest of rule\n return cssText.replace(regExp, function(m, p
1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n var
parts = 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 re
turn p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: function(
host, part, suffix) {\n if (part.match(polyfillHost)) {\n return this.co
lonHostPartReplacer(host, part, suffix);\n } else {\n return host + part
+ suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostPartRepl
acer: function(host, part, suffix) {\n return host + part.replace(polyfillHos
t, '') + suffix;\n },\n /*\n * Convert ^ and ^^ combinators by replacing wit
h space.\n */\n convertCombinators: function(cssText) {\n for (var i=0; i <
combinatorsRe.length; i++) {\n cssText = cssText.replace(combinatorsRe[i],
' ');\n }\n return cssText;\n },\n // change a selector like 'div' to '
name div'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText =
'';\n if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(
rule) {\n if (rule.selectorText && (rule.style && rule.style.cssText !==
undefined)) {\n cssText += this.scopeSelector(rule.selectorText, scopeS
elector, \n this.strictStyling) + ' {\\n\\t';\n cssText += t
his.propertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === C
SSRule.MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + '
{\\n';\n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n
cssText += '\\n}\\n\\n';\n } else {\n // TODO(sjmiles): K
EYFRAMES_RULE in IE11 throws when we query cssText\n // 'cssText' in ru
le returns true, but rule.cssText throws anyway\n // We can test the ru
le type, e.g.\n // else if (rule.type !== CSSRule.KEYFRAMES_RULE && r
ule.cssText) {\n // but this will prevent cssText propagation in other
browsers which\n // support it.\n // KEYFRAMES_RULE has a CSSR
uleSet, so the text can probably be reconstructed\n // from that collec
tion; this would be a proper fix.\n // For now, I'm trapping the except
ion so IE11 is unblocked in other areas.\n try {\n if (rule.
cssText) {\n cssText += rule.cssText + '\\n\\n';\n }\n
} catch(x) {\n // squelch\n }\n }\n }, t
his);\n }\n return cssText;\n },\n scopeSelector: function(selector, sco
peSelector, strict) {\n var r = [], parts = selector.split(',');\n parts.f
orEach(function(p) {\n p = p.trim();\n if (this.selectorNeedsScoping(p
, scopeSelector)) {\n p = (strict && !p.match(polyfillHostNoCombinator))
? \n this.applyStrictSelectorScope(p, scopeSelector) :\n t
his.applySelectorScope(p, scopeSelector);\n }\n r.push(p);\n }, thi
s);\n return r.join(', ');\n },\n selectorNeedsScoping: function(selector,
scopeSelector) {\n if (Array.isArray(scopeSelector)) {\n return true;\n
}\n var re = this.makeScopeMatcher(scopeSelector);\n return !selector.m
atch(re);\n },\n makeScopeMatcher: function(scopeSelector) {\n scopeSelecto
r = scopeSelector.replace(/\\[/g, '\\\\[').replace(/\\[/g, '\\\\]');\n return
new RegExp('^(' + scopeSelector + ')' + selectorReSuffix, 'm');\n },\n applyS
electorScope: function(selector, selectorScope) {\n return Array.isArray(sele
ctorScope) ?\n this.applySelectorScopeList(selector, selectorScope) :\n
this.applySimpleSelectorScope(selector, selectorScope);\n },\n // apply
an array of selectors\n applySelectorScopeList: function(selector, scopeSelecto
rList) {\n var r = [];\n for (var i=0, s; (s=scopeSelectorList[i]); i++) {
\n r.push(this.applySimpleSelectorScope(selector, s));\n }\n return r
.join(', ');\n },\n // scope via name and [is=name]\n applySimpleSelectorScop
e: function(selector, scopeSelector) {\n if (selector.match(polyfillHostRe))
{\n selector = selector.replace(polyfillHostNoCombinator, scopeSelector);\n
return selector.replace(polyfillHostRe, scopeSelector + ' ');\n } else
{\n return scopeSelector + ' ' + selector;\n }\n },\n // return a sele
ctor with [name] suffix on each simple selector\n // e.g. .foo.bar > .zot becom
es .foo[name].bar[name] > .zot[name]\n applyStrictSelectorScope: function(selec
tor, scopeSelector) {\n scopeSelector = scopeSelector.replace(/\\[is=([^\\]]*
)\\]/g, '$1');\n var splits = [' ', '>', '+', '~'],\n scoped = selector,
\n attrName = '[' + scopeSelector + ']';\n splits.forEach(function(sep)
{\n var parts = scoped.split(sep);\n scoped = parts.map(function(p) {\
n // remove :host since it should be unnecessary\n var t = p.trim(
).replace(polyfillHostRe, '');\n if (t && (splits.indexOf(t) < 0) && (t.i
ndexOf(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attr
Name + '$2$3')\n }\n return p;\n }).join(sep);\n });\n
return scoped;\n },\n insertPolyfillHostInCssText: function(selector) {\n r
eturn selector.replace(colonHostContextRe, polyfillHostContext).replace(\n
colonHostRe, polyfillHost);\n },\n propertiesFromRule: function(rule) {\n
var cssText = rule.style.cssText;\n // TODO(sorvell): Safari cssom incorrect
ly removes quotes from the content\n // property. (https://bugs.webkit.org/sh
ow_bug.cgi?id=118045)\n // don't replace attr rules\n if (rule.style.conte
nt && !rule.style.content.match(/['\"]+|attr/)) {\n cssText = cssText.repla
ce(/content:[^;]*;/g, 'content: \\'' + \n rule.style.content + '\\';');
\n }\n // TODO(sorvell): we can workaround this issue here, but we need a
list\n // of troublesome properties to fix https://github.com/Polymer/platfor
m/issues/53\n //\n // inherit rules can be omitted from cssText\n // TO
DO(sorvell): remove when Blink bug is fixed:\n // https://code.google.com/p/c
hromium/issues/detail?id=358273\n var style = rule.style;\n for (var i in
style) {\n if (style[i] === 'initial') {\n cssText += i + ': initial
; ';\n }\n }\n return cssText;\n },\n replaceTextInStyles: function
(styles, action) {\n if (styles && action) {\n if (!(styles instanceof A
rray)) {\n styles = [styles];\n }\n Array.prototype.forEach.cal
l(styles, function(s) {\n s.textContent = action.call(this, s.textContent
);\n }, this);\n }\n },\n addCssToDocument: function(cssText, name) {\
n if (cssText.match('@import')) {\n addOwnSheet(cssText, name);\n } e
lse {\n addCssToDocument(cssText);\n }\n }\n};\n\nvar selectorRe = /([^
{]*)({[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\/
/gim,\n // TODO(sorvell): remove either content or comment\n cssCommentNex
tSelectorRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^{]*?){/gim,
\n cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\\:[\\s]*'([
^']*)'[^}]*}([^{]*?){/gim,\n // TODO(sorvell): remove either content or comme
nt\n cssCommentRuleRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*][^*]*\\*+)*)\
\//gim,\n cssContentRuleRe = /(polyfill-rule)[^}]*(content\\:[\\s]*'([^']*)'[
^;]*;)[^}]*}/gim,\n // TODO(sorvell): remove either content or comment\n c
ssCommentUnscopedRuleRe = /\\/\\*\\s@polyfill-unscoped-rule([^*]*\\*+([^/*][^*]*
\\*+)*)\\//gim,\n cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(c
ontent\\:[\\s]*'([^']*)'[^;]*;)[^}]*}/gim,\n cssPseudoRe = /::(x-[^\\s{,(]*)/
gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n // note: :host pre-processe
d to -shadowcsshost.\n polyfillHost = '-shadowcsshost',\n // note: :host-c
ontext pre-processed to -shadowcsshostcontext.\n polyfillHostContext = '-shad
owcsscontext',\n parenSuffix = ')(?:\\\\((' +\n '(?:\\\\([^)(]*\\\\)|[
^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssColonHostRe = new RegExp('(' +
polyfillHost + parenSuffix, 'gim'),\n cssColonHostContextRe = new RegExp('('
+ polyfillHostContext + parenSuffix, 'gim'),\n selectorReSuffix = '([>\\\\s~+
\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:host/gim,\n colonHostContex
tRe = /\\:host-context/gim,\n /* host name without combinator */\n polyfil
lHostNoCombinator = polyfillHost + '-no-combinator',\n polyfillHostRe = new R
egExp(polyfillHost, 'gim'),\n polyfillHostContextRe = new RegExp(polyfillHost
Context, 'gim'),\n combinatorsRe = [\n /\\^\\^/g,\n /\\^/g,\n
/\\/shadow\\//g,\n /\\/shadow-deep\\//g,\n /::shadow/g,\n /\\/dee
p\\//g\n ];\n\nfunction stylesToCssText(styles, preserveComments) {\n var cs
sText = '';\n Array.prototype.forEach.call(styles, function(s) {\n cssText +
= s.textContent + '\\n\\n';\n });\n // strip comments for easier processing\n
if (!preserveComments) {\n cssText = cssText.replace(cssCommentRe, '');\n }
\n return cssText;\n}\n\nfunction cssTextToStyle(cssText) {\n var style = docu
ment.createElement('style');\n style.textContent = cssText;\n return style;\n}
\n\nfunction cssToRules(cssText) {\n var style = cssTextToStyle(cssText);\n do
cument.head.appendChild(style);\n var rules = [];\n if (style.sheet) {\n //
TODO(sorvell): Firefox throws when accessing the rules of a stylesheet\n //
with an @import\n // https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n
try {\n rules = style.sheet.cssRules;\n } catch(e) {\n //\n }\n
} else {\n console.warn('sheet not found', style);\n }\n style.parentNode
.removeChild(style);\n return rules;\n}\n\nvar frame = document.createElement('
iframe');\nframe.style.display = 'none';\n\nfunction initFrame() {\n frame.init
ialized = true;\n document.body.appendChild(frame);\n var doc = frame.contentD
ocument;\n var base = doc.createElement('base');\n base.href = document.baseUR
I;\n doc.head.appendChild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.ini
tialized) {\n initFrame();\n }\n document.body.appendChild(frame);\n fn(fr
ame.contentDocument);\n document.body.removeChild(frame);\n}\n\n// TODO(sorvell
): use an iframe if the cssText contains an @import to workaround\n// https://co
de.google.com/p/chromium/issues/detail?id=345114\nvar isChrome = navigator.userA
gent.match('Chrome');\nfunction withCssRules(cssText, callback) {\n if (!callba
ck) {\n return;\n }\n var rules;\n if (cssText.match('@import') && isChrom
e) {\n var style = cssTextToStyle(cssText);\n inFrame(function(doc) {\n
doc.head.appendChild(style.impl);\n rules = style.sheet.cssRules;\n
callback(rules);\n });\n } else {\n rules = cssToRules(cssText);\n ca
llback(rules);\n }\n}\n\nfunction rulesToCss(cssRules) {\n for (var i=0, css=[
]; i < cssRules.length; i++) {\n css.push(cssRules[i].cssText);\n }\n retur
n css.join('\\n\\n');\n}\n\nfunction addCssToDocument(cssText) {\n if (cssText)
{\n getSheet().appendChild(document.createTextNode(cssText));\n }\n}\n\nfun
ction addOwnSheet(cssText, name) {\n var style = cssTextToStyle(cssText);\n st
yle.setAttribute(name, '');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n doc
ument.head.appendChild(style);\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shadowdom';\nvar
SHIMMED_ATTRIBUTE = 'shim-shadowdom-css';\nvar NO_SHIM_ATTRIBUTE = 'no-shim';\n
\nvar sheet;\nfunction getSheet() {\n if (!sheet) {\n sheet = document.creat
eElement(\"style\");\n sheet.setAttribute(SHIMMED_ATTRIBUTE, '');\n sheet[
SHIMMED_ATTRIBUTE] = true;\n }\n return sheet;\n}\n\n// add polyfill styleshee
t to document\nif (window.ShadowDOMPolyfill) {\n addCssToDocument('style { disp
lay: none !important; }\\n');\n var doc = wrap(document);\n var head = doc.que
rySelector('head');\n head.insertBefore(getSheet(), head.childNodes[0]);\n\n /
/ TODO(sorvell): monkey-patching HTMLImports is abusive;\n // consider a better
solution.\n document.addEventListener('DOMContentLoaded', function() {\n va
r urlResolver = scope.urlResolver;\n \n if (window.HTMLImports && !HTMLImp
orts.useNative) {\n var SHIM_SHEET_SELECTOR = 'link[rel=stylesheet]' +\n
'[' + SHIM_ATTRIBUTE + ']';\n var SHIM_STYLE_SELECTOR = 'style[' + S
HIM_ATTRIBUTE + ']';\n HTMLImports.importer.documentPreloadSelectors += ','
+ SHIM_SHEET_SELECTOR;\n HTMLImports.importer.importsPreloadSelectors += '
,' + SHIM_SHEET_SELECTOR;\n\n HTMLImports.parser.documentSelectors = [\n
HTMLImports.parser.documentSelectors,\n SHIM_SHEET_SELECTOR,\n
SHIM_STYLE_SELECTOR\n ].join(',');\n \n var originalParseGeneric =
HTMLImports.parser.parseGeneric;\n\n HTMLImports.parser.parseGeneric = func
tion(elt) {\n if (elt[SHIMMED_ATTRIBUTE]) {\n return;\n }
\n var style = elt.__importElement || elt;\n if (!style.hasAttribu
te(SHIM_ATTRIBUTE)) {\n originalParseGeneric.call(this, elt);\n
return;\n }\n if (elt.__resource) {\n style = elt.owner
Document.createElement('style');\n style.textContent = urlResolver.reso
lveCssText(\n elt.__resource, elt.href);\n } else {\n
urlResolver.resolveStyle(style); \n }\n style.textContent = Sh
adowCSS.shimStyle(style);\n style.removeAttribute(SHIM_ATTRIBUTE, '');\n
style.setAttribute(SHIMMED_ATTRIBUTE, '');\n style[SHIMMED_ATTRIBU
TE] = true;\n // place in document\n if (style.parentNode !== head
) {\n // replace links in head\n if (elt.parentNode === head)
{\n head.replaceChild(style, elt);\n } else {\n h
ead.appendChild(style);\n }\n }\n style.__importParsed =
true;\n this.markParsingComplete(elt);\n this.parseNext();\n
}\n\n var hasResource = HTMLImports.parser.hasResource;\n HTMLImports.
parser.hasResource = function(node) {\n if (node.localName === 'link' &&
node.rel === 'stylesheet' &&\n node.hasAttribute(SHIM_ATTRIBUTE)) {\n
return (node.__resource);\n } else {\n return hasResou
rce.call(this, node);\n }\n }\n\n }\n });\n}\n\n// exports\nscop
e.ShadowCSS = ShadowCSS;\n\n})(window.Platform);\n", | 142 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n/*\n This is a limited s
him for ShadowDOM css styling.\n https://dvcs.w3.org/hg/webcomponents/raw-file/
tip/spec/shadow/index.html#styles\n \n The intention here is to support only t
he 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 compromi
sing performance significantly. \n For ShadowDOM styling that's not covered her
e, a set of best practices\n can be provided that should allow users to accompl
ish more complex styling.\n\n The following is a list of specific ShadowDOM sty
ling features and a brief\n discussion of the approach used to shim.\n\n Shimm
ed features:\n\n * :host, :host-context: ShadowDOM allows styling of the shadow
Root's host\n element using the :host rule. To shim this feature, the :host sty
les 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 be
comes:\n \n .foo {\n background: red;\n }\n \n * encapsultion: Sty
les defined within ShadowDOM, apply only to \n dom inside the ShadowDOM. Polyme
r uses one of two techniques to imlement\n this feature.\n \n By default, rul
es are prefixed with the host element tag name \n as a descendant selector. Thi
s 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 scope
d by adding an attribute selector suffix to each\n simple selector that contain
s the host element tag name. Each element \n in the element's ShadowDOM templat
e is also given the scope attribute. \n Thus, these rules match only elements t
hat have the scope attribute.\n For example, given a scope name of x-foo, a rul
e like this:\n \n div {\n font-weight: bold;\n }\n \n becomes:\n
\n div[x-foo] {\n font-weight: bold;\n }\n\n Note that elements that
are dynamically added to a scope must have the scope\n selector added to them
manually.\n\n * upper/lower bound encapsulation: Styles which are defined outsi
de a\n shadowRoot should not cross the ShadowDOM boundary and should not apply\
n inside a shadowRoot.\n\n This styling behavior is not emulated. Some possibl
e ways to do this that \n were rejected due to complexity and/or performance co
ncerns include: (1) reset\n every possible property for every possible selector
for a given scope name;\n (2) re-implement css in javascript.\n \n As an alt
ernative, users should make sure to use selectors\n specific to the scope in wh
ich they are working.\n \n * ::distributed: This behavior is not emulated. It'
s often not necessary\n to style the contents of a specific insertion point and
instead, descendants\n of the host element can be styled selectively. Users ca
n also create an \n extra node around 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(div) {\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 backgr
ound: 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 styl
ing shim to use the selector \n in comments in lieu of the next selector when r
unning under polyfill.\n*/\n(function(scope) {\n\nvar ShadowCSS = {\n strictSty
ling: false,\n registry: {},\n // Shim styles for a given root associated with
a name and extendsName\n // 1. cache root styles by name\n // 2. optionally t
ag root nodes with scope name\n // 3. shim polyfill directives /* @polyfill */
and /* @polyfill-rule */\n // 4. shim :host and scoping\n shimStyling: functio
n(root, name, extendsName) {\n var scopeStyles = this.prepareRoot(root, name,
extendsName);\n var typeExtension = this.isTypeExtension(extendsName);\n
var scopeSelector = this.makeScopeSelector(name, typeExtension);\n // use cac
hing to make working with styles nodes easier and to facilitate\n // lookup o
f extendee\n var cssText = stylesToCssText(scopeStyles, true);\n cssText =
this.scopeCssText(cssText, scopeSelector);\n // cache shimmed css on root fo
r user extensibility\n if (root) {\n root.shimmedStyle = cssText;\n }
\n // add style to document\n this.addCssToDocument(cssText, name);\n },\
n /*\n * Shim a style element with the given selector. Returns cssText that ca
n\n * be included in the document via Platform.ShadowCSS.addCssToDocument(css).
\n */\n shimStyle: function(style, selector) {\n return this.shimCssText(st
yle.textContent, selector);\n },\n /*\n * Shim some cssText with the given se
lector. Returns cssText that can\n * be included in the document via Platform.S
hadowCSS.addCssToDocument(css).\n */\n shimCssText: function(cssText, selector
) {\n cssText = this.insertDirectives(cssText);\n return this.scopeCssText
(cssText, selector);\n },\n makeScopeSelector: function(name, typeExtension) {
\n if (name) {\n return typeExtension ? '[is=' + name + ']' : name;\n
}\n return '';\n },\n isTypeExtension: function(extendsName) {\n return
extendsName && extendsName.indexOf('-') < 0;\n },\n prepareRoot: function(roo
t, name, extendsName) {\n var def = this.registerRoot(root, name, extendsName
);\n this.replaceTextInStyles(def.rootStyles, this.insertDirectives);\n //
remove existing style elements\n this.removeStyles(root, def.rootStyles);\n
// apply strict attr\n if (this.strictStyling) {\n this.applyScopeToC
ontent(root, name);\n }\n return def.scopeStyles;\n },\n removeStyles: f
unction(root, styles) {\n for (var i=0, l=styles.length, s; (i<l) && (s=style
s[i]); i++) {\n s.parentNode.removeChild(s);\n }\n },\n registerRoot:
function(root, name, extendsName) {\n var def = this.registry[name] = {\n
root: root,\n name: name,\n extendsName: extendsName\n }\n var
styles = this.findStyles(root);\n def.rootStyles = styles;\n def.scopeSty
les = def.rootStyles;\n var extendee = this.registry[def.extendsName];\n i
f (extendee) {\n def.scopeStyles = extendee.scopeStyles.concat(def.scopeSty
les);\n }\n return def;\n },\n findStyles: function(root) {\n if (!ro
ot) {\n return [];\n }\n var styles = root.querySelectorAll('style');
\n return Array.prototype.filter.call(styles, function(s) {\n return !s.
hasAttribute(NO_SHIM_ATTRIBUTE);\n });\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 contents too\n Array.prototype.forEach.call(root.querySe
lectorAll('template'),\n function(template) {\n this.applySc
opeToContent(template.content, name);\n },\n this);\n }\n
},\n insertDirectives: function(cssText) {\n cssText = this.insertPolyfillDi
rectivesInCssText(cssText);\n return this.insertPolyfillRulesInCssText(cssTex
t);\n },\n /*\n * Process styles to convert native ShadowDOM rules that will
trip\n * up the css parser; we rely on decorating the stylesheet with inert r
ules.\n * \n * For example, we convert this rule:\n * \n * polyfill-next
-selector { content: ':host menu-item'; }\n * ::content menu-item {\n * \n
* to this:\n * \n * scopeName menu-item {\n *\n **/\n insertPolyfillDir
ectivesInCssText: function(cssText) {\n // TODO(sorvell): remove either conte
nt or comment\n cssText = cssText.replace(cssCommentNextSelectorRe, function(
match, p1) {\n // remove end comment delimiter and add block start\n r
eturn p1.slice(0, -2) + '{';\n });\n return cssText.replace(cssContentNext
SelectorRe, function(match, p1) {\n return p1 + ' {';\n });\n },\n /*\
n * Process styles to add rules which will only apply under the polyfill\n *
\n * For example, we convert this rule:\n * \n * polyfill-rule {\n *
content: ':host menu-item';\n * ...\n * }\n * \n * to this:\n * \n *
scopeName menu-item {...}\n *\n **/\n insertPolyfillRulesInCssText: functio
n(cssText) {\n // TODO(sorvell): remove either content or comment\n cssTex
t = cssText.replace(cssCommentRuleRe, function(match, p1) {\n // remove end
comment delimiter\n return p1.slice(0, -1);\n });\n return cssText.r
eplace(cssContentRuleRe, function(match, p1, p2, p3) {\n var rule = match.r
eplace(p1, '').replace(p2, '');\n return p3 + rule;\n });\n },\n /* En
sure styles are scoped. Pseudo-scoping takes a rule like:\n * \n * .foo {..
. } \n * \n * and converts this to\n * \n * scopeName .foo { ... }\n
*/\n scopeCssText: function(cssText, scopeSelector) {\n var unscoped = thi
s.extractUnscopedRulesFromCssText(cssText);\n cssText = this.insertPolyfillHo
stInCssText(cssText);\n cssText = this.convertColonHost(cssText);\n cssTex
t = this.convertColonHostContext(cssText);\n cssText = this.convertShadowDOMS
electors(cssText);\n if (scopeSelector) {\n var self = this, cssText;\n
withCssRules(cssText, function(rules) {\n cssText = self.scopeRules(
rules, scopeSelector);\n });\n\n }\n cssText = cssText + '\\n' + unsc
oped;\n return cssText.trim();\n },\n /*\n * Process styles to add rules
which will only apply under the polyfill\n * and do not process via CSSOM. (CS
SOM is destructive to rules on rare \n * occasions, e.g. -webkit-calc on Safar
i.)\n * For example, we convert this rule:\n * \n * (comment start) @polyf
ill-unscoped-rule menu-item { \n * ... } (comment end)\n * \n * to this:\n
* \n * menu-item {...}\n *\n **/\n extractUnscopedRulesFromCssText: fun
ction(cssText) {\n // TODO(sorvell): remove either content or comment\n va
r r = '', m;\n while (m = cssCommentUnscopedRuleRe.exec(cssText)) {\n r
+= m[1].slice(0, -1) + '\\n\\n';\n }\n while (m = cssContentUnscopedRuleRe
.exec(cssText)) {\n r += m[0].replace(m[2], '').replace(m[1], m[3]) + '\\n\
\n';\n }\n return r;\n },\n /*\n * convert a rule like :host(.foo) > .
bar { }\n *\n * to\n *\n * scopeName.foo > .bar\n */\n convertColonHos
t: function(cssText) {\n return this.convertColonRule(cssText, cssColonHostRe
,\n this.colonHostPartReplacer);\n },\n /*\n * convert a rule like :h
ost-context(.foo) > .bar { }\n *\n * to\n *\n * scopeName.foo > .bar, .f
oo scopeName > .bar { }\n * \n * and\n *\n * :host-context(.foo:host) .b
ar { ... }\n * \n * to\n * \n * scopeName.foo .bar { ... }\n */\n conv
ertColonHostContext: function(cssText) {\n return this.convertColonRule(cssTe
xt, cssColonHostContextRe,\n this.colonHostContextPartReplacer);\n },\n
convertColonRule: function(cssText, regExp, partReplacer) {\n // p1 = :host,
p2 = contents of (), p3 rest of rule\n return cssText.replace(regExp, functi
on(m, p1, p2, p3) {\n p1 = polyfillHostNoCombinator;\n if (p2) {\n
var parts = 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(partRe
placer(p1, p, p3));\n }\n return r.join(',');\n } else {\n
return p1 + p3;\n }\n });\n },\n colonHostContextPartReplacer: fu
nction(host, part, suffix) {\n if (part.match(polyfillHost)) {\n return
this.colonHostPartReplacer(host, part, suffix);\n } else {\n return host
+ part + suffix + ', ' + part + ' ' + host + suffix;\n }\n },\n colonHostP
artReplacer: function(host, part, suffix) {\n return host + part.replace(poly
fillHost, '') + suffix;\n },\n /*\n * Convert combinators like ::shadow and
pseudo-elements like ::content\n * by replacing with space.\n */\n convertSh
adowDOMSelectors: function(cssText) {\n for (var i=0; i < shadowDOMSelectorsR
e.length; i++) {\n cssText = cssText.replace(shadowDOMSelectorsRe[i], ' ');
\n }\n return cssText;\n },\n // change a selector like 'div' to 'name d
iv'\n scopeRules: function(cssRules, scopeSelector) {\n var cssText = '';\n
if (cssRules) {\n Array.prototype.forEach.call(cssRules, function(rule)
{\n if (rule.selectorText && (rule.style && rule.style.cssText !== undefi
ned)) {\n cssText += this.scopeSelector(rule.selectorText, scopeSelecto
r, \n this.strictStyling) + ' {\\n\\t';\n cssText += this.pr
opertiesFromRule(rule) + '\\n}\\n\\n';\n } else if (rule.type === CSSRule
.MEDIA_RULE) {\n cssText += '@media ' + rule.media.mediaText + ' {\\n';
\n cssText += this.scopeRules(rule.cssRules, scopeSelector);\n
cssText += '\\n}\\n\\n';\n } else {\n // TODO(sjmiles): KEYFRAM
ES_RULE in IE11 throws when we query cssText\n // 'cssText' in rule ret
urns true, but rule.cssText throws anyway\n // We can test the rule typ
e, e.g.\n // else if (rule.type !== CSSRule.KEYFRAMES_RULE && rule.cs
sText) {\n // but this will prevent cssText propagation in other browse
rs which\n // support it.\n // KEYFRAMES_RULE has a CSSRuleSet
, so the text can probably be reconstructed\n // from that collection;
this would be a proper fix.\n // For now, I'm trapping the exception so
IE11 is unblocked in other areas.\n try {\n if (rule.cssTex
t) {\n cssText += rule.cssText + '\\n\\n';\n }\n
} catch(x) {\n // squelch\n }\n }\n }, this);\
n }\n return cssText;\n },\n scopeSelector: function(selector, scopeSele
ctor, strict) {\n var r = [], parts = selector.split(',');\n parts.forEach
(function(p) {\n p = p.trim();\n if (this.selectorNeedsScoping(p, scop
eSelector)) {\n p = (strict && !p.match(polyfillHostNoCombinator)) ? \n
this.applyStrictSelectorScope(p, scopeSelector) :\n this.ap
plySelectorScope(p, scopeSelector);\n }\n r.push(p);\n }, this);\n
return r.join(', ');\n },\n selectorNeedsScoping: function(selector, scopeS
elector) {\n if (Array.isArray(scopeSelector)) {\n return true;\n }\n
var re = this.makeScopeMatcher(scopeSelector);\n return !selector.match(r
e);\n },\n makeScopeMatcher: function(scopeSelector) {\n scopeSelector = sc
opeSelector.replace(/\\[/g, '\\\\[').replace(/\\[/g, '\\\\]');\n return new R
egExp('^(' + scopeSelector + ')' + selectorReSuffix, 'm');\n },\n applySelecto
rScope: function(selector, selectorScope) {\n return Array.isArray(selectorSc
ope) ?\n this.applySelectorScopeList(selector, selectorScope) :\n
this.applySimpleSelectorScope(selector, selectorScope);\n },\n // apply an arr
ay of selectors\n applySelectorScopeList: function(selector, scopeSelectorList)
{\n var r = [];\n for (var i=0, s; (s=scopeSelectorList[i]); i++) {\n
r.push(this.applySimpleSelectorScope(selector, s));\n }\n return r.join(
', ');\n },\n // scope via name and [is=name]\n applySimpleSelectorScope: fun
ction(selector, scopeSelector) {\n if (selector.match(polyfillHostRe)) {\n
selector = selector.replace(polyfillHostNoCombinator, scopeSelector);\n
return selector.replace(polyfillHostRe, scopeSelector + ' ');\n } else {\n
return scopeSelector + ' ' + selector;\n }\n },\n // return a selector w
ith [name] suffix on each simple selector\n // e.g. .foo.bar > .zot becomes .fo
o[name].bar[name] > .zot[name]\n applyStrictSelectorScope: function(selector, s
copeSelector) {\n scopeSelector = scopeSelector.replace(/\\[is=([^\\]]*)\\]/g
, '$1');\n var splits = [' ', '>', '+', '~'],\n scoped = selector,\n
attrName = '[' + scopeSelector + ']';\n splits.forEach(function(sep) {\n
var parts = scoped.split(sep);\n scoped = parts.map(function(p) {\n
// remove :host since it should be unnecessary\n var t = p.trim().repl
ace(polyfillHostRe, '');\n if (t && (splits.indexOf(t) < 0) && (t.indexOf
(attrName) < 0)) {\n p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName +
'$2$3')\n }\n return p;\n }).join(sep);\n });\n return
scoped;\n },\n insertPolyfillHostInCssText: function(selector) {\n return
selector.replace(colonHostContextRe, polyfillHostContext).replace(\n colo
nHostRe, polyfillHost);\n },\n propertiesFromRule: function(rule) {\n var c
ssText = rule.style.cssText;\n // TODO(sorvell): Safari cssom incorrectly rem
oves quotes from the content\n // property. (https://bugs.webkit.org/show_bug
.cgi?id=118045)\n // don't replace attr rules\n if (rule.style.content &&
!rule.style.content.match(/['\"]+|attr/)) {\n cssText = cssText.replace(/co
ntent:[^;]*;/g, 'content: \\'' + \n rule.style.content + '\\';');\n
}\n // TODO(sorvell): we can workaround this issue here, but we need a list\n
// of troublesome properties to fix https://github.com/Polymer/platform/issu
es/53\n //\n // inherit rules can be omitted from cssText\n // TODO(sor
vell): remove when Blink bug is fixed:\n // https://code.google.com/p/chromiu
m/issues/detail?id=358273\n var style = rule.style;\n for (var i in style)
{\n if (style[i] === 'initial') {\n cssText += i + ': initial; ';\n
}\n }\n return cssText;\n },\n replaceTextInStyles: function(style
s, action) {\n if (styles && action) {\n if (!(styles instanceof Array))
{\n styles = [styles];\n }\n Array.prototype.forEach.call(styl
es, function(s) {\n s.textContent = action.call(this, s.textContent);\n
}, this);\n }\n },\n addCssToDocument: function(cssText, name) {\n i
f (cssText.match('@import')) {\n addOwnSheet(cssText, name);\n } else {\
n addCssToDocument(cssText);\n }\n }\n};\n\nvar selectorRe = /([^{]*)({
[\\s\\S]*?})/gim,\n cssCommentRe = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\
n // TODO(sorvell): remove either content or comment\n cssCommentNextSelec
torRe = /\\/\\*\\s*@polyfill ([^*]*\\*+([^/*][^*]*\\*+)*\\/)([^{]*?){/gim,\n
cssContentNextSelectorRe = /polyfill-next-selector[^}]*content\\:[\\s]*['|\"]([^
'\"]*)['|\"][^}]*}([^{]*?){/gim,\n // TODO(sorvell): remove either content or
comment\n cssCommentRuleRe = /\\/\\*\\s@polyfill-rule([^*]*\\*+([^/*][^*]*\\
*+)*)\\//gim,\n cssContentRuleRe = /(polyfill-rule)[^}]*(content\\:[\\s]*['|\
"]([^'\"]*)['|\"][^;]*;)[^}]*}/gim,\n // TODO(sorvell): remove either content
or comment\n cssCommentUnscopedRuleRe = /\\/\\*\\s@polyfill-unscoped-rule([^
*]*\\*+([^/*][^*]*\\*+)*)\\//gim,\n cssContentUnscopedRuleRe = /(polyfill-uns
coped-rule)[^}]*(content\\:[\\s]*['|\"]([^'\"]*)['|\"][^;]*;)[^}]*}/gim,\n cs
sPseudoRe = /::(x-[^\\s{,(]*)/gim,\n cssPartRe = /::part\\(([^)]*)\\)/gim,\n
// note: :host pre-processed to -shadowcsshost.\n polyfillHost = '-shadowc
sshost',\n // note: :host-context pre-processed to -shadowcsshostcontext.\n
polyfillHostContext = '-shadowcsscontext',\n parenSuffix = ')(?:\\\\((' +\n
'(?:\\\\([^)(]*\\\\)|[^)(]*)+?' +\n ')\\\\))?([^,{]*)';\n cssC
olonHostRe = new RegExp('(' + polyfillHost + parenSuffix, 'gim'),\n cssColonH
ostContextRe = new RegExp('(' + polyfillHostContext + parenSuffix, 'gim'),\n
selectorReSuffix = '([>\\\\s~+\\[.,{:][\\\\s\\\\S]*)?$',\n colonHostRe = /\\:
host/gim,\n colonHostContextRe = /\\:host-context/gim,\n /* host name with
out combinator */\n polyfillHostNoCombinator = polyfillHost + '-no-combinator
',\n polyfillHostRe = new RegExp(polyfillHost, 'gim'),\n polyfillHostConte
xtRe = new RegExp(polyfillHostContext, 'gim'),\n shadowDOMSelectorsRe = [\n
/\\^\\^/g,\n /\\^/g,\n /\\/shadow\\//g,\n /\\/shadow-deep\\//
g,\n /::shadow/g,\n /\\/deep\\//g,\n /::content/g\n ];\n\nfunc
tion stylesToCssText(styles, preserveComments) {\n var cssText = '';\n Array.p
rototype.forEach.call(styles, function(s) {\n cssText += s.textContent + '\\n
\\n';\n });\n // strip comments for easier processing\n if (!preserveComments
) {\n cssText = cssText.replace(cssCommentRe, '');\n }\n return cssText;\n}
\n\nfunction cssTextToStyle(cssText) {\n var style = document.createElement('st
yle');\n style.textContent = cssText;\n return style;\n}\n\nfunction cssToRule
s(cssText) {\n var style = cssTextToStyle(cssText);\n document.head.appendChil
d(style);\n var rules = [];\n if (style.sheet) {\n // TODO(sorvell): Firefo
x throws when accessing the rules of a stylesheet\n // with an @import\n /
/ https://bugzilla.mozilla.org/show_bug.cgi?id=625013\n try {\n rules =
style.sheet.cssRules;\n } catch(e) {\n //\n }\n } else {\n consol
e.warn('sheet not found', style);\n }\n style.parentNode.removeChild(style);\n
return rules;\n}\n\nvar frame = document.createElement('iframe');\nframe.style
.display = 'none';\n\nfunction initFrame() {\n frame.initialized = true;\n doc
ument.body.appendChild(frame);\n var doc = frame.contentDocument;\n var base =
doc.createElement('base');\n base.href = document.baseURI;\n doc.head.appendC
hild(base);\n}\n\nfunction inFrame(fn) {\n if (!frame.initialized) {\n initF
rame();\n }\n document.body.appendChild(frame);\n fn(frame.contentDocument);\
n document.body.removeChild(frame);\n}\n\n// TODO(sorvell): use an iframe if th
e cssText contains an @import to workaround\n// https://code.google.com/p/chromi
um/issues/detail?id=345114\nvar isChrome = navigator.userAgent.match('Chrome');\
nfunction withCssRules(cssText, callback) {\n if (!callback) {\n return;\n
}\n var rules;\n if (cssText.match('@import') && isChrome) {\n var style =
cssTextToStyle(cssText);\n inFrame(function(doc) {\n doc.head.appendChil
d(style.impl);\n rules = style.sheet.cssRules;\n callback(rules);\n
});\n } else {\n rules = cssToRules(cssText);\n callback(rules);\n }\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 addCssToDocument(cssText) {\n if (cssText) {\n getSheet().app
endChild(document.createTextNode(cssText));\n }\n}\n\nfunction addOwnSheet(cssT
ext, name) {\n var style = cssTextToStyle(cssText);\n style.setAttribute(name,
'');\n style.setAttribute(SHIMMED_ATTRIBUTE, '');\n document.head.appendChild
(style);\n}\n\nvar SHIM_ATTRIBUTE = 'shim-shadowdom';\nvar SHIMMED_ATTRIBUTE = '
shim-shadowdom-css';\nvar NO_SHIM_ATTRIBUTE = 'no-shim';\n\nvar sheet;\nfunction
getSheet() {\n if (!sheet) {\n sheet = document.createElement(\"style\");\n
sheet.setAttribute(SHIMMED_ATTRIBUTE, '');\n sheet[SHIMMED_ATTRIBUTE] = t
rue;\n }\n return sheet;\n}\n\n// add polyfill stylesheet to document\nif (win
dow.ShadowDOMPolyfill) {\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): monke
y-patching HTMLImports 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_SELECTOR = 'link[rel=stylesheet]' +\n '[' + SHIM_ATTR
IBUTE + ']';\n var SHIM_STYLE_SELECTOR = 'style[' + SHIM_ATTRIBUTE + ']';\n
HTMLImports.importer.documentPreloadSelectors += ',' + SHIM_SHEET_SELECTOR
;\n HTMLImports.importer.importsPreloadSelectors += ',' + SHIM_SHEET_SELECT
OR;\n\n HTMLImports.parser.documentSelectors = [\n HTMLImports.parse
r.documentSelectors,\n SHIM_SHEET_SELECTOR,\n SHIM_STYLE_SELECTOR\
n ].join(',');\n \n var originalParseGeneric = HTMLImports.parser.par
seGeneric;\n\n HTMLImports.parser.parseGeneric = function(elt) {\n i
f (elt[SHIMMED_ATTRIBUTE]) {\n return;\n }\n var style =
elt.__importElement || elt;\n if (!style.hasAttribute(SHIM_ATTRIBUTE)) {\
n originalParseGeneric.call(this, elt);\n return;\n }\n
if (elt.__resource) {\n style = elt.ownerDocument.createElement
('style');\n style.textContent = urlResolver.resolveCssText(\n
elt.__resource, elt.href);\n } else {\n urlResolver.resolve
Style(style); \n }\n style.textContent = ShadowCSS.shimStyle(styl
e);\n style.removeAttribute(SHIM_ATTRIBUTE, '');\n style.setAttrib
ute(SHIMMED_ATTRIBUTE, '');\n style[SHIMMED_ATTRIBUTE] = true;\n /
/ place in document\n if (style.parentNode !== head) {\n // repl
ace links in head\n if (elt.parentNode === head) {\n head.re
placeChild(style, elt);\n } else {\n head.appendChild(style)
;\n }\n }\n style.__importParsed = true;\n this.ma
rkParsingComplete(elt);\n this.parseNext();\n }\n\n var hasReso
urce = HTMLImports.parser.hasResource;\n HTMLImports.parser.hasResource = f
unction(node) {\n if (node.localName === 'link' && node.rel === 'styleshe
et' &&\n node.hasAttribute(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 = ShadowCS
S;\n\n})(window.Platform);\n", |
141 "} else {", | 143 "} else {", |
142 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra
p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC
ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n
var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem
ent.prototype.createShadowRoot = function() {\n var root = originalCreate
ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur
n root;\n };\n }\n });\n\n Platform.templateContent = function(inTempl
ate) {\n // if MDV exists, it may need to boostrap this template to reveal co
ntent\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n
HTMLTemplateElement.bootstrap(inTemplate);\n }\n // fallback when the
re is no Shadow DOM polyfill, no MDV polyfill, and no\n // native template su
pport\n if (!inTemplate.content && !inTemplate._content) {\n var frag =
document.createDocumentFragment();\n while (inTemplate.firstChild) {\n
frag.appendChild(inTemplate.firstChild);\n }\n inTemplate._content
= frag;\n }\n return inTemplate.content || inTemplate._content;\n };\n\n}
)(window.Platform);\n", | 144 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ so we can call wrap/unwrap without testing for ShadowDOMPolyfill\n window.wra
p = window.unwrap = function(n){\n return n;\n }\n\n addEventListener('DOMC
ontentLoaded', function() {\n if (CustomElements.useNative === false) {\n
var originalCreateShadowRoot = Element.prototype.createShadowRoot;\n Elem
ent.prototype.createShadowRoot = function() {\n var root = originalCreate
ShadowRoot.call(this);\n CustomElements.watchShadow(this);\n retur
n root;\n };\n }\n });\n\n Platform.templateContent = function(inTempl
ate) {\n // if MDV exists, it may need to boostrap this template to reveal co
ntent\n if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) {\n
HTMLTemplateElement.bootstrap(inTemplate);\n }\n // fallback when the
re is no Shadow DOM polyfill, no MDV polyfill, and no\n // native template su
pport\n if (!inTemplate.content && !inTemplate._content) {\n var frag =
document.createDocumentFragment();\n while (inTemplate.firstChild) {\n
frag.appendChild(inTemplate.firstChild);\n }\n inTemplate._content
= frag;\n }\n return inTemplate.content || inTemplate._content;\n };\n\n}
)(window.Platform);\n", |
143 "}", | 145 "}", |
144 "/* 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", | 146 "/* 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", |
145 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n//
Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func
tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar
ray.prototype.slice.call(arguments, 1);\n return function() {\n var args
2 = args.slice();\n args2.push.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\nfunction mixin(inObj/*, inProps, inMoreProps, ...*/)
{\n var obj = inObj || {};\n for (var i = 1; i < arguments.length; i++) {\n
var p = arguments[i];\n try {\n for (var n in p) {\n copyPropert
y(n, p, obj);\n }\n } catch(x) {\n }\n }\n return obj;\n}\n\n// cop
y property inName from inSource object to inTarget object\nfunction copyProperty
(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(inSource, inNam
e);\n Object.defineProperty(inTarget, inName, pd);\n}\n\n// get property descri
ptor for inName on inObject, even if\n// inName exists on some link in inObject'
s prototype chain\nfunction getPropertyDescriptor(inObject, inName) {\n if (inO
bject) {\n var pd = Object.getOwnPropertyDescriptor(inObject, inName);\n r
eturn pd || getPropertyDescriptor(Object.getPrototypeOf(inObject), inName);\n }
\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);\n", | 147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n//
Old versions of iOS do not have bind.\n\nif (!Function.prototype.bind) {\n Func
tion.prototype.bind = function(scope) {\n var self = this;\n var args = Ar
ray.prototype.slice.call(arguments, 1);\n return function() {\n var args
2 = args.slice();\n args2.push.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\nfunction mixin(inObj/*, inProps, inMoreProps, ...*/)
{\n var obj = inObj || {};\n for (var i = 1; i < arguments.length; i++) {\n
var p = arguments[i];\n try {\n for (var n in p) {\n copyPropert
y(n, p, obj);\n }\n } catch(x) {\n }\n }\n return obj;\n}\n\n// cop
y property inName from inSource object to inTarget object\nfunction copyProperty
(inName, inSource, inTarget) {\n var pd = getPropertyDescriptor(inSource, inNam
e);\n Object.defineProperty(inTarget, inName, pd);\n}\n\n// get property descri
ptor for inName on inObject, even if\n// inName exists on some link in inObject'
s prototype chain\nfunction getPropertyDescriptor(inObject, inName) {\n if (inO
bject) {\n var pd = Object.getOwnPropertyDescriptor(inObject, inName);\n r
eturn pd || getPropertyDescriptor(Object.getPrototypeOf(inObject), inName);\n }
\n}\n\n// export\n\nscope.mixin = mixin;\n\n})(window.Platform);\n", |
146 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n '
use strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these metho
ds to take multiple classNames\n // * toggle: add a 2nd argument which forces t
he given state rather\n // than toggling.\n\n var add = DOMTokenList.prototyp
e.add;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.
add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.
call(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = functi
on() {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this
, arguments[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name,
bool) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n
}\n bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.proto
type.switch = function(oldName, newName) {\n oldName && this.remove(oldName);
\n newName && this.add(newName);\n };\n\n // add array() to NodeList, Named
NodeMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.pro
totype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || w
indow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n nam
edNodeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = Arra
ySlice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n va
r start = Date.now();\n // only at millisecond precision\n window.performa
nce = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for
requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.requ
estAnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAni
mationFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeR
af ?\n function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n funct
ion( callback ){\n return window.setTimeout(callback, 1000 / 60);\n
};\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.canc
elAnimationFrame = (function() {\n return window.webkitCancelAnimationFram
e ||\n window.mozCancelAnimationFrame ||\n function(id) {\n
clearTimeout(id);\n };\n })();\n }\n\n // utility\n\n function c
reateDOM(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 's
tring' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(tr
ue);\n dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAtt
rs) {\n dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;
\n }\n // Make a stub for Polymer() for polyfill purposes; under the HTMLImpor
ts\n // polyfill, scripts in the main document run before imports. That means\n
// if (1) polymer 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 var elementDeclarations = [];\n\n var polymerStub = function(na
me, dictionary) {\n elementDeclarations.push(arguments);\n }\n window.Polym
er = polymerStub;\n\n // deliver queued delcarations\n scope.deliverDeclaratio
ns = function() {\n scope.deliverDeclarations = function() {\n throw 'Pos
sible attempt to load Polymer twice';\n };\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 if (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 'compon
ents/polymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope
.createDOM = createDOM;\n\n})(window.Platform);\n", | 148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n '
use strict';\n\n // polyfill DOMTokenList\n // * add/remove: allow these metho
ds to take multiple classNames\n // * toggle: add a 2nd argument which forces t
he given state rather\n // than toggling.\n\n var add = DOMTokenList.prototyp
e.add;\n var remove = DOMTokenList.prototype.remove;\n DOMTokenList.prototype.
add = function() {\n for (var i = 0; i < arguments.length; i++) {\n add.
call(this, arguments[i]);\n }\n };\n DOMTokenList.prototype.remove = functi
on() {\n for (var i = 0; i < arguments.length; i++) {\n remove.call(this
, arguments[i]);\n }\n };\n DOMTokenList.prototype.toggle = function(name,
bool) {\n if (arguments.length == 1) {\n bool = !this.contains(name);\n
}\n bool ? this.add(name) : this.remove(name);\n };\n DOMTokenList.proto
type.switch = function(oldName, newName) {\n oldName && this.remove(oldName);
\n newName && this.add(newName);\n };\n\n // add array() to NodeList, Named
NodeMap, HTMLCollection\n\n var ArraySlice = function() {\n return Array.pro
totype.slice.call(this);\n };\n\n var namedNodeMap = (window.NamedNodeMap || w
indow.MozNamedAttrMap || {});\n\n NodeList.prototype.array = ArraySlice;\n nam
edNodeMap.prototype.array = ArraySlice;\n HTMLCollection.prototype.array = Arra
ySlice;\n\n // polyfill performance.now\n\n if (!window.performance) {\n va
r start = Date.now();\n // only at millisecond precision\n window.performa
nce = {now: function(){ return Date.now() - start }};\n }\n\n // polyfill for
requestAnimationFrame\n\n if (!window.requestAnimationFrame) {\n window.requ
estAnimationFrame = (function() {\n var nativeRaf = window.webkitRequestAni
mationFrame ||\n window.mozRequestAnimationFrame;\n\n return nativeR
af ?\n function(callback) {\n return nativeRaf(function() {\n
callback(performance.now());\n });\n } :\n funct
ion( callback ){\n return window.setTimeout(callback, 1000 / 60);\n
};\n })();\n }\n\n if (!window.cancelAnimationFrame) {\n window.canc
elAnimationFrame = (function() {\n return window.webkitCancelAnimationFram
e ||\n window.mozCancelAnimationFrame ||\n function(id) {\n
clearTimeout(id);\n };\n })();\n }\n\n // utility\n\n function c
reateDOM(inTagOrNode, inHTML, inAttrs) {\n var dom = typeof inTagOrNode == 's
tring' ?\n document.createElement(inTagOrNode) : inTagOrNode.cloneNode(tr
ue);\n dom.innerHTML = inHTML;\n if (inAttrs) {\n for (var n in inAtt
rs) {\n dom.setAttribute(n, inAttrs[n]);\n }\n }\n return dom;
\n }\n // Make a stub for Polymer() for polyfill purposes; under the HTMLImpor
ts\n // polyfill, scripts in the main document run before imports. That means\n
// if (1) polymer 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 var elementDeclarations = [];\n\n var polymerStub = function(na
me, dictionary) {\n elementDeclarations.push(arguments);\n }\n window.Polym
er = polymerStub;\n\n // deliver queued delcarations\n scope.deliverDeclaratio
ns = function() {\n scope.deliverDeclarations = function() {\n throw 'Pos
sible attempt to load Polymer twice';\n };\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 if (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 'compon
ents/polymer/polymer.html\">');\n };\n }\n });\n\n // exports\n scope
.createDOM = createDOM;\n\n})(window.Platform);\n", |
147 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n// poor man's adapter for
template.content on various platform scenarios\n(function(scope) {\n scope.tem
plateContent = scope.templateContent || function(inTemplate) {\n return inTem
plate.content;\n };\n})(window.Platform);\n", | 149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n// poor man's adapter for
template.content on various platform scenarios\n(function(scope) {\n scope.tem
plateContent = scope.templateContent || function(inTemplate) {\n return inTem
plate.content;\n };\n})(window.Platform);\n", |
148 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n \n
scope = scope || (window.Inspector = {});\n \n var inspector;\n\n window.sin
spect = function(inNode, inProxy) {\n if (!inspector) {\n inspector = wi
ndow.open('', 'ShadowDOM Inspector', null, true);\n inspector.document.writ
e(inspectorHTML);\n //inspector.document.close();\n inspector.api = {\
n shadowize: shadowize\n };\n }\n inspect(inNode || wrap(docum
ent.body), inProxy);\n };\n\n var inspectorHTML = [\n '<!DOCTYPE html>',\n
'<html>',\n ' <head>',\n ' <title>ShadowDOM 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 ' background-color: #f1f1f1;',\n
' padding: 4px 6px;',\n ' border-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 '</html>'\n ].join('\\n');\n \n
var crumbs = [];\n\n var displayCrumbs = function() {\n // alias our documen
t\n var d = inspector.document;\n // get crumbbar\n var cb = d.querySel
ector('#crumbs');\n // clear crumbs\n cb.textContent = '';\n // build n
ew crumbs\n for (var i=0, c; c=crumbs[i]; i++) {\n var a = d.createEleme
nt('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.appendChil
d(d.createElement('li')).appendChild(a);\n }\n };\n\n var inspect = functio
n(inNode, inProxy) {\n // alias our document\n var d = inspector.document;
\n // reset list of drillable nodes\n drillable = [];\n // memoize our
crumb proxy\n var proxy = inProxy || inNode;\n crumbs.push(proxy);\n //
update crumbs\n displayCrumbs();\n // reflect local tree\n d.body.quer
ySelector('#tree').innerHTML =\n '<pre>' + output(inNode, inNode.childNod
es) + '</pre>';\n };\n\n var forEach = Array.prototype.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[inN
ode.nodeName];\n };\n\n var output = function(inNode, inChildNodes, inIndent)
{\n if (blacklist(inNode)) {\n return '';\n }\n var indent = inInd
ent || '';\n if (inNode.localName || inNode.nodeType == 11) {\n var name
= inNode.localName || 'shadow-root';\n //inChildNodes = ShadowDOM.localNod
es(inNode);\n var info = indent + describe(inNode);\n // if only textN
odes\n // TODO(sjmiles): make correct for ShadowDOM\n /*if (!inNode.ch
ildren.length && inNode.localName !== 'content' && inNode.localName !== 'shadow'
) {\n info += catTextContent(inChildNodes);\n } else*/ {\n //
TODO(sjmiles): native <shadow> has no reference to its projection\n if (
name == 'content' /*|| name == 'shadow'*/) {\n inChildNodes = inNode.ge
tDistributedNodes();\n }\n info += '<br/>';\n var ind = ind
ent + ' ';\n forEach(inChildNodes, function(n) {\n in
fo += output(n, n.childNodes, ind);\n });\n info += indent;\n
}\n if (!({br:1}[name])) {\n info += '<tag></' + name + '></t
ag>';\n info += '<br/>';\n }\n } else {\n var text = inNode.
textContent.trim();\n info = text ? indent + '\"' + text + '\"' + '<br/>' :
'';\n }\n return info;\n };\n\n var catTextContent = function(inChildNo
des) {\n var info = '';\n forEach(inChildNodes, 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 dri
llable.push(inNode);\n } else {\n tag += name || 'shadow-root';\n }\n
if (inNode.attributes) {\n forEach(inNode.attributes, function(a) {\n
tag += ' ' + a.name + (a.value ? '=\"' + a.value + '\"' : '');\n });\
n }\n tag += '>'+ '</tag>';\n return tag;\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 inspec
t(node.webkitShadowRoot || node.shadowRoot, node)\n } else {\n console.l
og(\"bad shadowize node\");\n console.dir(this);\n }\n };\n \n // exp
ort\n \n scope.output = output;\n \n})(window.Inspector);\n", | 150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n \n
scope = scope || (window.Inspector = {});\n \n var inspector;\n\n window.sin
spect = function(inNode, inProxy) {\n if (!inspector) {\n inspector = wi
ndow.open('', 'ShadowDOM Inspector', null, true);\n inspector.document.writ
e(inspectorHTML);\n //inspector.document.close();\n inspector.api = {\
n shadowize: shadowize\n };\n }\n inspect(inNode || wrap(docum
ent.body), inProxy);\n };\n\n var inspectorHTML = [\n '<!DOCTYPE html>',\n
'<html>',\n ' <head>',\n ' <title>ShadowDOM 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 ' background-color: #f1f1f1;',\n
' padding: 4px 6px;',\n ' border-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 '</html>'\n ].join('\\n');\n \n
var crumbs = [];\n\n var displayCrumbs = function() {\n // alias our documen
t\n var d = inspector.document;\n // get crumbbar\n var cb = d.querySel
ector('#crumbs');\n // clear crumbs\n cb.textContent = '';\n // build n
ew crumbs\n for (var i=0, c; c=crumbs[i]; i++) {\n var a = d.createEleme
nt('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.appendChil
d(d.createElement('li')).appendChild(a);\n }\n };\n\n var inspect = functio
n(inNode, inProxy) {\n // alias our document\n var d = inspector.document;
\n // reset list of drillable nodes\n drillable = [];\n // memoize our
crumb proxy\n var proxy = inProxy || inNode;\n crumbs.push(proxy);\n //
update crumbs\n displayCrumbs();\n // reflect local tree\n d.body.quer
ySelector('#tree').innerHTML =\n '<pre>' + output(inNode, inNode.childNod
es) + '</pre>';\n };\n\n var forEach = Array.prototype.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[inN
ode.nodeName];\n };\n\n var output = function(inNode, inChildNodes, inIndent)
{\n if (blacklist(inNode)) {\n return '';\n }\n var indent = inInd
ent || '';\n if (inNode.localName || inNode.nodeType == 11) {\n var name
= inNode.localName || 'shadow-root';\n //inChildNodes = ShadowDOM.localNod
es(inNode);\n var info = indent + describe(inNode);\n // if only textN
odes\n // TODO(sjmiles): make correct for ShadowDOM\n /*if (!inNode.ch
ildren.length && inNode.localName !== 'content' && inNode.localName !== 'shadow'
) {\n info += catTextContent(inChildNodes);\n } else*/ {\n //
TODO(sjmiles): native <shadow> has no reference to its projection\n if (
name == 'content' /*|| name == 'shadow'*/) {\n inChildNodes = inNode.ge
tDistributedNodes();\n }\n info += '<br/>';\n var ind = ind
ent + ' ';\n forEach(inChildNodes, function(n) {\n in
fo += output(n, n.childNodes, ind);\n });\n info += indent;\n
}\n if (!({br:1}[name])) {\n info += '<tag></' + name + '></t
ag>';\n info += '<br/>';\n }\n } else {\n var text = inNode.
textContent.trim();\n info = text ? indent + '\"' + text + '\"' + '<br/>' :
'';\n }\n return info;\n };\n\n var catTextContent = function(inChildNo
des) {\n var info = '';\n forEach(inChildNodes, 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 dri
llable.push(inNode);\n } else {\n tag += name || 'shadow-root';\n }\n
if (inNode.attributes) {\n forEach(inNode.attributes, function(a) {\n
tag += ' ' + a.name + (a.value ? '=\"' + a.value + '\"' : '');\n });\
n }\n tag += '>'+ '</tag>';\n return tag;\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 inspec
t(node.webkitShadowRoot || node.shadowRoot, node)\n } else {\n console.l
og(\"bad shadowize node\");\n console.dir(this);\n }\n };\n \n // exp
ort\n \n scope.output = output;\n \n})(window.Inspector);\n", |
149 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ TODO(sorvell): It's desireable to provide a default stylesheet \n // that's c
onvenient for styling unresolved elements, but\n // it's cumbersome to have to
include this manually in every page.\n // It would make sense to put inside som
e HTMLImport but \n // the HTMLImports polyfill does not allow loading of style
sheets \n // that block rendering. Therefore this injection is tolerated here.\
n\n var style = document.createElement('style');\n style.textContent = ''\n
+ 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n
+ 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidd
en;' \n + ' } \\n'\n ;\n var head = document.querySelector('head');\n
head.insertBefore(style, head.firstChild);\n\n})(Platform);\n", | 151 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n /
/ TODO(sorvell): It's desireable to provide a default stylesheet \n // that's c
onvenient for styling unresolved elements, but\n // it's cumbersome to have to
include this manually in every page.\n // It would make sense to put inside som
e HTMLImport but \n // the HTMLImports polyfill does not allow loading of style
sheets \n // that block rendering. Therefore this injection is tolerated here.\
n\n var style = document.createElement('style');\n style.textContent = ''\n
+ 'body {'\n + 'transition: opacity ease-in 0.2s;' \n + ' } \\n'\n
+ 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidd
en;' \n + ' } \\n'\n ;\n var head = document.querySelector('head');\n
head.insertBefore(style, head.firstChild);\n\n})(Platform);\n", |
150 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f
unction withDependencies(task, depends) {\n depends = depends || [];\n if
(!depends.map) {\n depends = [depends];\n }\n return task.apply(this,
depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module
Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n
return;\n case 1:\n module = null;\n break;\n case
2:\n // dependsOrFactory is `factory` in this case\n module = depe
ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF
actory is `depends` in this case\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 // `module` confuses commonjs detectors\n scop
e.modularize = module;\n scope.using = using;\n\n})(window);\n", | 152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n f
unction withDependencies(task, depends) {\n depends = depends || [];\n if
(!depends.map) {\n depends = [depends];\n }\n return task.apply(this,
depends.map(marshal));\n }\n\n function module(name, dependsOrFactory, module
Factory) {\n var module;\n switch (arguments.length) {\n case 0:\n
return;\n case 1:\n module = null;\n break;\n case
2:\n // dependsOrFactory is `factory` in this case\n module = depe
ndsOrFactory.apply(this);\n break;\n default:\n // dependsOrF
actory is `depends` in this case\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 // `module` confuses commonjs detectors\n scop
e.modularize = module;\n scope.using = using;\n\n})(window);\n", |
151 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
iterations = 0;\nvar callbacks = [];\nvar twiddle = document.createTextNode('')
;\n\nfunction endOfMicrotask(callback) {\n twiddle.textContent = iterations++;\
n callbacks.push(callback);\n}\n\nfunction atEndOfMicrotask() {\n while (callb
acks.length) {\n callbacks.shift()();\n }\n}\n\nnew (window.MutationObserver
|| JsMutationObserver)(atEndOfMicrotask)\n .observe(twiddle, {characterData: t
rue})\n ;\n\n// exports\n\nscope.endOfMicrotask = endOfMicrotask;\n\n})(Platfor
m);\n\n", | 153 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
iterations = 0;\nvar callbacks = [];\nvar twiddle = document.createTextNode('')
;\n\nfunction endOfMicrotask(callback) {\n twiddle.textContent = iterations++;\
n callbacks.push(callback);\n}\n\nfunction atEndOfMicrotask() {\n while (callb
acks.length) {\n callbacks.shift()();\n }\n}\n\nnew (window.MutationObserver
|| JsMutationObserver)(atEndOfMicrotask)\n .observe(twiddle, {characterData: t
rue})\n ;\n\n// exports\n\nscope.endOfMicrotask = endOfMicrotask;\n\n})(Platfor
m);\n\n", |
152 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
urlResolver = {\n resolveDom: function(root, url) {\n url = url || root.own
erDocument.baseURI;\n this.resolveAttributes(root, url);\n this.resolveSty
les(root, url);\n // handle template.content\n var templates = root.queryS
electorAll('template');\n if (templates) {\n for (var i = 0, l = templat
es.length, t; (i < l) && (t = templates[i]); i++) {\n if (t.content) {\n
this.resolveDom(t.content, url);\n }\n }\n }\n },\n re
solveTemplate: function(template) {\n this.resolveDom(template.content, templ
ate.ownerDocument.baseURI);\n },\n resolveStyles: function(root, url) {\n v
ar styles = root.querySelectorAll('style');\n if (styles) {\n for (var i
= 0, l = styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.res
olveStyle(s, url);\n }\n }\n },\n resolveStyle: function(style, url) {
\n url = url || style.ownerDocument.baseURI;\n style.textContent = this.re
solveCssText(style.textContent, url);\n },\n resolveCssText: function(cssText,
baseUrl, keepAbsolute) {\n cssText = replaceUrlsInCssText(cssText, baseUrl,
keepAbsolute, CSS_URL_REGEXP);\n return replaceUrlsInCssText(cssText, baseUrl
, keepAbsolute, CSS_IMPORT_REGEXP);\n },\n resolveAttributes: function(root, u
rl) {\n if (root.hasAttributes && root.hasAttributes()) {\n this.resolve
ElementAttributes(root, url);\n }\n // search for attributes that host url
s\n var nodes = root && root.querySelectorAll(URL_ATTRS_SELECTOR);\n if (n
odes) {\n for (var i = 0, l = nodes.length, n; (i < l) && (n = nodes[i]); i
++) {\n this.resolveElementAttributes(n, url);\n }\n }\n },\n r
esolveElementAttributes: function(node, url) {\n url = url || node.ownerDocum
ent.baseURI;\n URL_ATTRS.forEach(function(v) {\n var attr = node.attribu
tes[v];\n var value = attr && attr.value;\n var replacement;\n if
(value && value.search(URL_TEMPLATE_SEARCH) < 0) {\n if (v === 'style')
{\n replacement = replaceUrlsInCssText(value, url, false, CSS_URL_REGEX
P);\n } else {\n replacement = resolveRelativeUrl(url, value);\n
}\n attr.value = replacement;\n }\n });\n }\n};\n\nvar C
SS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_REGEXP = /(@import[\\s]
+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src', 'action', 'style', 'u
rl'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + ']';\nvar URL_TEMP
LATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText, baseUrl, keepA
bsolute, regexp) {\n return cssText.replace(regexp, function(m, pre, url, post)
{\n var urlPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativeU
rl(baseUrl, urlPath, keepAbsolute);\n return pre + '\\'' + urlPath + '\\'' +
post;\n });\n}\n\nfunction resolveRelativeUrl(baseUrl, url, keepAbsolute) {\n
// do not resolve '/' absolute urls\n if (url && url[0] === '/') {\n return
url;\n }\n var u = new URL(url, baseUrl);\n return keepAbsolute ? u.href : ma
keDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(url) {\n var root
= new URL(document.baseURI);\n var u = new URL(url, root);\n if (u.host === r
oot.host && u.port === root.port &&\n u.protocol === root.protocol) {\n
return makeRelPath(root, u);\n } else {\n return url;\n }\n}\n\n// make a r
elative path from source to target\nfunction makeRelPath(sourceUrl, targetUrl) {
\n var source = sourceUrl.pathname;\n var target = targetUrl.pathname;\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 for (var i = 0, l = s.length
- 1; i < l; i++) {\n t.unshift('..');\n }\n return t.join('/') + targetUrl.
search + targetUrl.hash;\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n}
)(Platform);\n", | 154 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
urlResolver = {\n resolveDom: function(root, url) {\n url = url || root.own
erDocument.baseURI;\n this.resolveAttributes(root, url);\n this.resolveSty
les(root, url);\n // handle template.content\n var templates = root.queryS
electorAll('template');\n if (templates) {\n for (var i = 0, l = templat
es.length, t; (i < l) && (t = templates[i]); i++) {\n if (t.content) {\n
this.resolveDom(t.content, url);\n }\n }\n }\n },\n re
solveTemplate: function(template) {\n this.resolveDom(template.content, templ
ate.ownerDocument.baseURI);\n },\n resolveStyles: function(root, url) {\n v
ar styles = root.querySelectorAll('style');\n if (styles) {\n for (var i
= 0, l = styles.length, s; (i < l) && (s = styles[i]); i++) {\n this.res
olveStyle(s, url);\n }\n }\n },\n resolveStyle: function(style, url) {
\n url = url || style.ownerDocument.baseURI;\n style.textContent = this.re
solveCssText(style.textContent, url);\n },\n resolveCssText: function(cssText,
baseUrl, keepAbsolute) {\n cssText = replaceUrlsInCssText(cssText, baseUrl,
keepAbsolute, CSS_URL_REGEXP);\n return replaceUrlsInCssText(cssText, baseUrl
, keepAbsolute, CSS_IMPORT_REGEXP);\n },\n resolveAttributes: function(root, u
rl) {\n if (root.hasAttributes && root.hasAttributes()) {\n this.resolve
ElementAttributes(root, url);\n }\n // search for attributes that host url
s\n var nodes = root && root.querySelectorAll(URL_ATTRS_SELECTOR);\n if (n
odes) {\n for (var i = 0, l = nodes.length, n; (i < l) && (n = nodes[i]); i
++) {\n this.resolveElementAttributes(n, url);\n }\n }\n },\n r
esolveElementAttributes: function(node, url) {\n url = url || node.ownerDocum
ent.baseURI;\n URL_ATTRS.forEach(function(v) {\n var attr = node.attribu
tes[v];\n var value = attr && attr.value;\n var replacement;\n if
(value && value.search(URL_TEMPLATE_SEARCH) < 0) {\n if (v === 'style')
{\n replacement = replaceUrlsInCssText(value, url, false, CSS_URL_REGEX
P);\n } else {\n replacement = resolveRelativeUrl(url, value);\n
}\n attr.value = replacement;\n }\n });\n }\n};\n\nvar C
SS_URL_REGEXP = /(url\\()([^)]*)(\\))/g;\nvar CSS_IMPORT_REGEXP = /(@import[\\s]
+(?!url\\())([^;]*)(;)/g;\nvar URL_ATTRS = ['href', 'src', 'action', 'style', 'u
rl'];\nvar URL_ATTRS_SELECTOR = '[' + URL_ATTRS.join('],[') + ']';\nvar URL_TEMP
LATE_SEARCH = '{{.*}}';\n\nfunction replaceUrlsInCssText(cssText, baseUrl, keepA
bsolute, regexp) {\n return cssText.replace(regexp, function(m, pre, url, post)
{\n var urlPath = url.replace(/[\"']/g, '');\n urlPath = resolveRelativeU
rl(baseUrl, urlPath, keepAbsolute);\n return pre + '\\'' + urlPath + '\\'' +
post;\n });\n}\n\nfunction resolveRelativeUrl(baseUrl, url, keepAbsolute) {\n
// do not resolve '/' absolute urls\n if (url && url[0] === '/') {\n return
url;\n }\n var u = new URL(url, baseUrl);\n return keepAbsolute ? u.href : ma
keDocumentRelPath(u.href);\n}\n\nfunction makeDocumentRelPath(url) {\n var root
= new URL(document.baseURI);\n var u = new URL(url, root);\n if (u.host === r
oot.host && u.port === root.port &&\n u.protocol === root.protocol) {\n
return makeRelPath(root, u);\n } else {\n return url;\n }\n}\n\n// make a r
elative path from source to target\nfunction makeRelPath(sourceUrl, targetUrl) {
\n var source = sourceUrl.pathname;\n var target = targetUrl.pathname;\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 for (var i = 0, l = s.length
- 1; i < l; i++) {\n t.unshift('..');\n }\n return t.join('/') + targetUrl.
search + targetUrl.hash;\n}\n\n// exports\nscope.urlResolver = urlResolver;\n\n}
)(Platform);\n", |
153 "/*\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", | 155 "/*\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", |
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 */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};", | 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 */\nwindow.HTMLImports = window.HTMLImports || {flags:{}};", |
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\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 if (url.match(/^data:/)) {\n // Handle D
ata URI Scheme\n var pieces = url.split(',');\n var header = piece
s[0];\n var body = pieces[1];\n if(header.indexOf(';base64') > -1)
{\n body = atob(body);\n } else {\n body = decodeURICo
mponent(body);\n }\n setTimeout(function() {\n this.rec
eive(url, elt, null, body);\n }.bind(this), 0);\n } else {\n
var receiveXhr = function(err, resource, redirectedUrl) {\n this.receiv
e(url, elt, err, resource, redirectedUrl);\n }.bind(this);\n xhr.l
oad(url, receiveXhr);\n // TODO(sorvell): blocked on)\n // https:/
/code.google.com/p/chromium/issues/detail?id=257221\n // xhr'ing for a do
cument makes scripts in imports runnable; otherwise\n // they are not; ho
wever, it requires 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 },\n receive: function(url, elt, err, resource, re
directedUrl) {\n this.cache[url] = resource;\n var $p = this.pending[u
rl];\n if ( redirectedUrl && redirectedUrl !== url ) {\n this.cache[
redirectedUrl] = resource;\n $p = $p.concat(this.pending[redirectedUrl]);
\n }\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\n
//if (!err) {\n // If url was redirected, use the redirected locatio
n so paths are\n // calculated relative to that.\n this.onload
(redirectedUrl || url, p, resource);\n //}\n this.tail();\n }
\n this.pending[url] = null;\n if ( redirectedUrl && redirectedUrl !==
url ) {\n this.pending[redirectedUrl] = null;\n }\n },\n tail
: function() {\n --this.inflight;\n this.checkDone();\n },\n che
ckDone: function() {\n if (!this.inflight) {\n this.oncomplete();\n
}\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(requ
est) {\n return (request.status >= 200 && request.status < 300)\n
|| (request.status === 304)\n || (request.status === 0);\n },\n l
oad: function(url, next, nextContext) {\n var request = new XMLHttpRequest(
);\n if (scope.flags.debug || scope.flags.bust) {\n url += '?' + Mat
h.random();\n }\n request.open('GET', url, xhr.async);\n request.
addEventListener('readystatechange', function(e) {\n if (request.readySta
te === 4) {\n // Servers redirecting an import can add a Location heade
r to help us\n // polyfill correctly.\n var locationHeader = r
equest.getResponseHeader(\"Location\");\n var redirectedUrl = null;\n
if (locationHeader) {\n var redirectedUrl = (locationHeader.s
ubstr( 0, 1 ) === \"/\")\n ? location.origin + locationHeader // L
ocation is a relative path\n : redirectedUrl; //
Full path\n }\n next.call(nextContext, !xhr.ok(request) && re
quest,\n request.response || request.responseText, redirectedUrl);\
n }\n });\n request.send();\n return request;\n },\n
loadDocument: function(url, next, nextContext) {\n this.load(url, next, ne
xtContext).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr
= xhr;\n scope.Loader = Loader;\n\n})(window.HTMLImports);\n", | 157 "/*\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 if (url.match(/^data:/)) {\n // Handle D
ata URI Scheme\n var pieces = url.split(',');\n var header = piece
s[0];\n var body = pieces[1];\n if(header.indexOf(';base64') > -1)
{\n body = atob(body);\n } else {\n body = decodeURICo
mponent(body);\n }\n setTimeout(function() {\n this.rec
eive(url, elt, null, body);\n }.bind(this), 0);\n } else {\n
var receiveXhr = function(err, resource, redirectedUrl) {\n this.receiv
e(url, elt, err, resource, redirectedUrl);\n }.bind(this);\n xhr.l
oad(url, receiveXhr);\n // TODO(sorvell): blocked on)\n // https:/
/code.google.com/p/chromium/issues/detail?id=257221\n // xhr'ing for a do
cument makes scripts in imports runnable; otherwise\n // they are not; ho
wever, it requires 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 },\n receive: function(url, elt, err, resource, re
directedUrl) {\n this.cache[url] = resource;\n var $p = this.pending[u
rl];\n if ( redirectedUrl && redirectedUrl !== url ) {\n this.cache[
redirectedUrl] = resource;\n $p = $p.concat(this.pending[redirectedUrl]);
\n }\n for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {\n
//if (!err) {\n // If url was redirected, use the redirected locatio
n so paths are\n // calculated relative to that.\n this.onload
(redirectedUrl || url, p, resource);\n //}\n this.tail();\n }
\n this.pending[url] = null;\n if ( redirectedUrl && redirectedUrl !==
url ) {\n this.pending[redirectedUrl] = null;\n }\n },\n tail
: function() {\n --this.inflight;\n this.checkDone();\n },\n che
ckDone: function() {\n if (!this.inflight) {\n this.oncomplete();\n
}\n }\n };\n\n xhr = xhr || {\n async: true,\n ok: function(requ
est) {\n return (request.status >= 200 && request.status < 300)\n
|| (request.status === 304)\n || (request.status === 0);\n },\n l
oad: function(url, next, nextContext) {\n var request = new XMLHttpRequest(
);\n if (scope.flags.debug || scope.flags.bust) {\n url += '?' + Mat
h.random();\n }\n request.open('GET', url, xhr.async);\n request.
addEventListener('readystatechange', function(e) {\n if (request.readySta
te === 4) {\n // Servers redirecting an import can add a Location heade
r to help us\n // polyfill correctly.\n var locationHeader = r
equest.getResponseHeader(\"Location\");\n var redirectedUrl = null;\n
if (locationHeader) {\n var redirectedUrl = (locationHeader.s
ubstr( 0, 1 ) === \"/\")\n ? location.origin + locationHeader // L
ocation is a relative path\n : redirectedUrl; //
Full path\n }\n next.call(nextContext, !xhr.ok(request) && re
quest,\n request.response || request.responseText, redirectedUrl);\
n }\n });\n request.send();\n return request;\n },\n
loadDocument: function(url, next, nextContext) {\n this.load(url, next, ne
xtContext).responseType = 'document';\n }\n };\n\n // exports\n scope.xhr
= xhr;\n scope.Loader = Loader;\n\n})(window.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 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 parsing
is complete\n // via markParsingComplete.\n // To prompt the system to parse
the next element, parseNext should then be\n // called.\n // Note, parseNext u
sed to be included at the end of markParsingComplete, but\n // we must not do t
his so that, for example, we can (1) mark parsing complete \n // then (2) fire
an import load event, and then (3) parse the next resource.\n markParsing: func
tion(elt) {\n flags.parse && console.log('parsing', elt);\n this.parsingEl
ement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__importPars
ed = true;\n if (elt.__importElement) {\n elt.__importElement.__importPa
rsed = true;\n }\n this.parsingElement = null;\n flags.parse && console
.log('completed', elt);\n },\n invalidateParse: function(doc) {\n if (doc &
& doc.__importLink) {\n doc.__importParsed = doc.__importLink.__importParse
d = false;\n this.parseSoon();\n }\n },\n parseSoon: function() {\n
if (this._parseSoon) {\n cancelAnimationFrame(this._parseDelay);\n }\n
var parser = this;\n this._parseSoon = requestAnimationFrame(function() {\
n parser.parseNext();\n });\n },\n parseImport: function(elt) {\n /
/ TODO(sorvell): consider if there's a better way to do this;\n // expose an
imports parsing hook; this is needed, for example, by the\n // CustomElements
polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports.__imp
ortsParsingHook(elt);\n }\n elt.import.__importParsed = true;\n this.ma
rkParsingComplete(elt);\n // fire load event\n if (elt.__resource) {\n
elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n } else
{\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false}));\n }\n
// TODO(sorvell): workaround for Safari 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: elt});\n }\n }\n }\n thi
s.parseNext();\n },\n parseLink: function(linkElt) {\n if (nodeIsImport(lin
kElt)) {\n this.parseImport(linkElt);\n } else {\n // make href abs
olute\n linkElt.href = linkElt.href;\n this.parseGeneric(linkElt);\n
}\n },\n parseStyle: function(elt) {\n // TODO(sorvell): style element lo
ad event can just not fire so clone styles\n var src = elt;\n elt = cloneS
tyle(elt);\n elt.__importElement = src;\n this.parseGeneric(elt);\n },\n
parseGeneric: function(elt) {\n this.trackElement(elt);\n document.head.a
ppendChild(elt);\n },\n // tracks when a loadable element has loaded\n trackE
lement: function(elt, callback) {\n var self = this;\n var done = function
(e) {\n if (callback) {\n callback(e);\n }\n self.markPars
ingComplete(elt);\n self.parseNext();\n };\n elt.addEventListener('lo
ad', done);\n elt.addEventListener('error', done);\n\n // NOTE: IE does no
t fire \"load\" event for styles that have already loaded\n // This is in vio
lation of the spec, so we try our hardest 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.inde
xOf('@import') == -1) {\n fakeLoad = 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 = fake
Load && Boolean(r.styleSheet);\n }\n }\n }\n // dispat
ch a fake load event and continue parsing\n if (fakeLoad) {\n elt.di
spatchEvent(new CustomEvent('load', {bubbles: false}));\n }\n }\n },\n
// NOTE: execute scripts by injecting them and watching for the load/error\n /
/ event. Inline scripts are handled via dataURL's because browsers tend to\n //
provide correct parsing errors in this case. If this has any compatibility\n /
/ issues, we can switch to injecting the inline script with textContent.\n // S
cripts with dataURL's do not appear to generate load events and therefore\n //
we assume they execute synchronously.\n parseScript: function(scriptElt) {\n
var script = document.createElement('script');\n script.__importElement = sc
riptElt;\n script.src = scriptElt.src ? scriptElt.src : \n generateScr
iptDataUrl(scriptElt);\n scope.currentScript = scriptElt;\n this.trackElem
ent(script, function(e) {\n script.parentNode.removeChild(script);\n s
cope.currentScript = null; \n });\n document.head.appendChild(script);\n
},\n // determine the next element in the tree which should be parsed\n nextT
oParse: function() {\n return !this.parsingElement && this.nextToParseInDoc(m
ainDoc);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = doc.q
uerySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes.len
gth, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n
if (this.hasResource(n)) {\n return nodeIsImport(n) ? this.nextToPa
rseInDoc(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 this n
ode.\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocumen
t || node;\n return doc === mainDoc ? this.documentSelectors : this.importsSe
lectors;\n },\n isParsed: function(node) {\n return node.__importParsed;\n
},\n hasResource: function(node) {\n if (nodeIsImport(node) && !node.import
) {\n return false;\n }\n return true;\n }\n};\n\nfunction nodeIsImp
ort(elt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE
);\n}\n\nfunction generateScriptDataUrl(script) {\n var scriptContent = generat
eScriptContent(script), b64;\n try {\n b64 = btoa(scriptContent);\n } catch
(e) {\n b64 = btoa(unescape(encodeURIComponent(scriptContent)));\n console
.warn('Script contained non-latin characters that were forced ' +\n 'to lat
in. Some characters may be wrong.', script);\n }\n return 'data:text/javascrip
t;base64,' + b64;\n}\n\nfunction generateScriptContent(script) {\n return scrip
t.textContent + generateSourceMapHint(script);\n}\n\n// calculate source map hin
t\nfunction generateSourceMapHint(script) {\n var moniker = script.__nodeUrl;\n
if (!moniker) {\n moniker = script.ownerDocument.baseURI;\n // there cou
ld 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 w
e need to allow \n // this sort of thing\n var matches = script.textConten
t.match(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] || tag;\n
// tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '\\n//#
sourceURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// clone st
yle with proper path resolution for main document\n// NOTE: styles are the only
elements that require direct path fixup.\nfunction cloneStyle(style) {\n var cl
one = style.ownerDocument.createElement('style');\n clone.textContent = style.t
extContent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n// path fi
xup: style elements in imports must be made relative to the main \n// document.
We fixup 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.reso
lveUrlsInCssText(style.textContent, resolver);\n return style; \n },\n res
olveUrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceUrls(css
Text, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_IMPORT_R
EGEXP);\n return r;\n },\n replaceUrls: function(text, urlObj, regexp) {\n
return text.replace(regexp, function(m, pre, url, post) {\n var urlPath
= url.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath = urlO
bj.href;\n return pre + '\\'' + urlPath + '\\'' + post;\n }); \n }\n
}\n\n// exports\nscope.parser = importParser;\nscope.path = path;\nscope.isIE =
isIe;\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\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 parsing
is complete\n // via markParsingComplete.\n // To prompt the system to parse
the next element, parseNext should then be\n // called.\n // Note, parseNext u
sed to be included at the end of markParsingComplete, but\n // we must not do t
his so that, for example, we can (1) mark parsing complete \n // then (2) fire
an import load event, and then (3) parse the next resource.\n markParsing: func
tion(elt) {\n flags.parse && console.log('parsing', elt);\n this.parsingEl
ement = elt;\n },\n markParsingComplete: function(elt) {\n elt.__importPars
ed = true;\n if (elt.__importElement) {\n elt.__importElement.__importPa
rsed = true;\n }\n this.parsingElement = null;\n flags.parse && console
.log('completed', elt);\n },\n invalidateParse: function(doc) {\n if (doc &
& doc.__importLink) {\n doc.__importParsed = doc.__importLink.__importParse
d = false;\n this.parseSoon();\n }\n },\n parseSoon: function() {\n
if (this._parseSoon) {\n cancelAnimationFrame(this._parseDelay);\n }\n
var parser = this;\n this._parseSoon = requestAnimationFrame(function() {\
n parser.parseNext();\n });\n },\n parseImport: function(elt) {\n /
/ TODO(sorvell): consider if there's a better way to do this;\n // expose an
imports parsing hook; this is needed, for example, by the\n // CustomElements
polyfill.\n if (HTMLImports.__importsParsingHook) {\n HTMLImports.__imp
ortsParsingHook(elt);\n }\n elt.import.__importParsed = true;\n this.ma
rkParsingComplete(elt);\n // fire load event\n if (elt.__resource) {\n
elt.dispatchEvent(new CustomEvent('load', {bubbles: false})); \n } else
{\n elt.dispatchEvent(new CustomEvent('error', {bubbles: false}));\n }\n
// TODO(sorvell): workaround for Safari 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: elt});\n }\n }\n }\n thi
s.parseNext();\n },\n parseLink: function(linkElt) {\n if (nodeIsImport(lin
kElt)) {\n this.parseImport(linkElt);\n } else {\n // make href abs
olute\n linkElt.href = linkElt.href;\n this.parseGeneric(linkElt);\n
}\n },\n parseStyle: function(elt) {\n // TODO(sorvell): style element lo
ad event can just not fire so clone styles\n var src = elt;\n elt = cloneS
tyle(elt);\n elt.__importElement = src;\n this.parseGeneric(elt);\n },\n
parseGeneric: function(elt) {\n this.trackElement(elt);\n document.head.a
ppendChild(elt);\n },\n // tracks when a loadable element has loaded\n trackE
lement: function(elt, callback) {\n var self = this;\n var done = function
(e) {\n if (callback) {\n callback(e);\n }\n self.markPars
ingComplete(elt);\n self.parseNext();\n };\n elt.addEventListener('lo
ad', done);\n elt.addEventListener('error', done);\n\n // NOTE: IE does no
t fire \"load\" event for styles that have already loaded\n // This is in vio
lation of the spec, so we try our hardest 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.inde
xOf('@import') == -1) {\n fakeLoad = 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 = fake
Load && Boolean(r.styleSheet);\n }\n }\n }\n // dispat
ch a fake load event and continue parsing\n if (fakeLoad) {\n elt.di
spatchEvent(new CustomEvent('load', {bubbles: false}));\n }\n }\n },\n
// NOTE: execute scripts by injecting them and watching for the load/error\n /
/ event. Inline scripts are handled via dataURL's because browsers tend to\n //
provide correct parsing errors in this case. If this has any compatibility\n /
/ issues, we can switch to injecting the inline script with textContent.\n // S
cripts with dataURL's do not appear to generate load events and therefore\n //
we assume they execute synchronously.\n parseScript: function(scriptElt) {\n
var script = document.createElement('script');\n script.__importElement = sc
riptElt;\n script.src = scriptElt.src ? scriptElt.src : \n generateScr
iptDataUrl(scriptElt);\n scope.currentScript = scriptElt;\n this.trackElem
ent(script, function(e) {\n script.parentNode.removeChild(script);\n s
cope.currentScript = null; \n });\n document.head.appendChild(script);\n
},\n // determine the next element in the tree which should be parsed\n nextT
oParse: function() {\n return !this.parsingElement && this.nextToParseInDoc(m
ainDoc);\n },\n nextToParseInDoc: function(doc, link) {\n var nodes = doc.q
uerySelectorAll(this.parseSelectorsForNode(doc));\n for (var i=0, l=nodes.len
gth, p=0, n; (i<l) && (n=nodes[i]); i++) {\n if (!this.isParsed(n)) {\n
if (this.hasResource(n)) {\n return nodeIsImport(n) ? this.nextToPa
rseInDoc(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 this n
ode.\n parseSelectorsForNode: function(node) {\n var doc = node.ownerDocumen
t || node;\n return doc === mainDoc ? this.documentSelectors : this.importsSe
lectors;\n },\n isParsed: function(node) {\n return node.__importParsed;\n
},\n hasResource: function(node) {\n if (nodeIsImport(node) && !node.import
) {\n return false;\n }\n return true;\n }\n};\n\nfunction nodeIsImp
ort(elt) {\n return (elt.localName === 'link') && (elt.rel === IMPORT_LINK_TYPE
);\n}\n\nfunction generateScriptDataUrl(script) {\n var scriptContent = generat
eScriptContent(script);\n var b64 = 'data:text/javascript';\n // base64 may be
smaller, but does not handle unicode characters\n // attempt base64 first, fal
l back to escaped text\n try {\n b64 += (';base64,' + btoa(scriptContent));\
n } catch(e) {\n b64 += (';charset=utf-8,' + encodeURIComponent(scriptConten
t));\n }\n return b64;\n}\n\nfunction generateScriptContent(script) {\n retur
n script.textContent + generateSourceMapHint(script);\n}\n\n// calculate source
map hint\nfunction generateSourceMapHint(script) {\n var moniker = script.__nod
eUrl;\n if (!moniker) {\n moniker = script.ownerDocument.baseURI;\n // th
ere could be more than one script this url\n var tag = '[' + Math.floor((Math
.random()+1)*1000) + ']';\n // TODO(sjmiles): Polymer hack, should be pluggab
le if we need to allow \n // this sort of thing\n var matches = script.tex
tContent.match(/Polymer\\(['\"]([^'\"]*)/);\n tag = matches && matches[1] ||
tag;\n // tag the moniker\n moniker += '/' + tag + '.js';\n }\n return '
\\n//# sourceURL=' + moniker + '\\n';\n}\n\n// style/stylesheet handling\n\n// c
lone style with proper path resolution for main document\n// NOTE: styles are th
e only elements that require direct path fixup.\nfunction cloneStyle(style) {\n
var clone = style.ownerDocument.createElement('style');\n clone.textContent =
style.textContent;\n path.resolveUrlsInStyle(clone);\n return clone;\n}\n\n//
path fixup: style elements in imports must be made relative to the main \n// doc
ument. We fixup url's in url() and @import.\nvar CSS_URL_REGEXP = /(url\\()([^)]
*)(\\))/g;\nvar CSS_IMPORT_REGEXP = /(@import[\\s]+(?!url\\())([^;]*)(;)/g;\n\nv
ar path = {\n resolveUrlsInStyle: function(style) {\n var doc = style.ownerD
ocument;\n var resolver = doc.createElement('a');\n style.textContent = th
is.resolveUrlsInCssText(style.textContent, resolver);\n return style; \n },
\n resolveUrlsInCssText: function(cssText, urlObj) {\n var r = this.replaceU
rls(cssText, urlObj, CSS_URL_REGEXP);\n r = this.replaceUrls(r, urlObj, CSS_I
MPORT_REGEXP);\n return r;\n },\n replaceUrls: function(text, urlObj, regex
p) {\n return text.replace(regexp, function(m, pre, url, post) {\n var u
rlPath = url.replace(/[\"']/g, '');\n urlObj.href = urlPath;\n urlPath
= urlObj.href;\n return pre + '\\'' + urlPath + '\\'' + post;\n });
\n }\n}\n\n// exports\nscope.parser = importParser;\nscope.path = path;\nscope.
isIE = isIe;\n\n})(HTMLImports);\n", |
157 "/*\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\n var importe
r = {\n documents: {},\n // nodes to load in the mian document\n docume
ntPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // nodes to load
in imports\n importsPreloadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE
+ ']'\n ].join(','),\n loadNode: function(node) {\n importLoader.add
Node(node);\n },\n // load all loadable elements within the parent element
\n loadSubtree: function(parent) {\n var nodes = this.marshalNodes(paren
t);\n // add these nodes to loader's queue\n importLoader.addNodes(nod
es);\n },\n marshalNodes: function(parent) {\n // all preloadable nod
es in inDocument\n return parent.querySelectorAll(this.loadSelectorsForNode
(parent));\n },\n // find the proper set of load selectors for a given nod
e\n loadSelectorsForNode: function(node) {\n var doc = node.ownerDocumen
t || node;\n return doc === mainDoc ? this.documentPreloadSelectors :\n
this.importsPreloadSelectors;\n },\n loaded: function(url, elt, reso
urce) {\n flags.load && console.log('loaded', url, elt);\n // store ge
neric resource\n // TODO(sorvell): fails for nodes inside <template>.conten
t\n // see https://code.google.com/p/chromium/issues/detail?id=249381.\n
elt.__resource = resource;\n if (isDocumentLink(elt)) {\n var doc
= this.documents[url];\n // if we've never seen a document 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 because\n //
SD polyfill does not report these as mutations.\n this.bootDocument(do
c);\n // cache document\n this.documents[url] = doc;\n
}\n // don't store import record until we're actually loaded\n //
store document resource\n elt.import = doc;\n }\n parser.parseN
ext();\n },\n bootDocument: function(doc) {\n this.loadSubtree(doc);\
n this.observe(doc);\n parser.parseNext();\n },\n loadedAll: fun
ction() {\n parser.parseNext();\n }\n };\n\n // loader singleton\n va
r importLoader = new Loader(importer.loaded.bind(importer), \n importer.loa
dedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLinkRe
l(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel) {\n return e
lt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n function i
sScript(elt) {\n return elt.localName === 'script';\n }\n\n function makeDo
cument(resource, url) {\n // create a new HTML document\n var doc = resour
ce;\n if (!(doc instanceof Document)) {\n doc = document.implementation.
createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document's so
urce url\n doc._URL = url;\n // establish a relative path via <base>\n
var base = doc.createElement('base');\n base.setAttribute('href', url);\n
// add baseURI support to browsers (IE) that lack it.\n if (!doc.baseURI) {\n
doc.baseURI = url;\n }\n // ensure UTF-8 charset\n var meta = doc
.createElement('meta');\n meta.setAttribute('charset', 'utf-8');\n\n doc.h
ead.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML las
t as it may trigger CustomElement upgrades\n // TODO(sjmiles): problem wrt to
template boostrapping below,\n // template bootstrapping must (?) come befor
e element upgrade\n // but we cannot bootstrap templates until they are in a
document\n // which is too late\n if (!(resource instanceof Document)) {\n
// install html\n doc.body.innerHTML = resource;\n }\n // TODO(
sorvell): ideally this code is not aware of Template polyfill,\n // but for n
ow the polyfill needs help to bootstrap these templates\n if (window.HTMLTemp
lateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.boots
trap(doc);\n }\n return doc;\n }\n} else {\n // do nothing if using nati
ve imports\n var importer = {};\n}\n\n// NOTE: We cannot polyfill document.curr
entScript because it's not possible\n// both to override and maintain the abilit
y to capture the native value;\n// therefore we choose to expose _currentScript
both when native imports\n// and the polyfill are in use.\nvar currentScriptDesc
riptor = {\n get: function() {\n return HTMLImports.currentScript || documen
t.currentScript;\n },\n configurable: true\n};\n\nObject.defineProperty(docume
nt, '_currentScript', currentScriptDescriptor);\nObject.defineProperty(mainDoc,
'_currentScript', currentScriptDescriptor);\n\n// Polyfill 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, 'baseURI', baseURIDescriptor);
\n Object.defineProperty(mainDoc, 'baseURI', baseURIDescriptor);\n}\n\n// call
a callback when all HTMLImports in the document at call (or at least\n// docume
nt 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 call callback when done\nfun
ction whenImportsReady(callback, doc) {\n doc = doc || mainDoc;\n // if docume
nt is loading, wait and try again\n whenDocumentReady(function() {\n watchIm
portsLoad(callback, doc);\n }, doc);\n}\n\n// call the callback when the docume
nt is in a ready state (has dom)\nvar requiredReadyState = HTMLImports.isIE ? 'c
omplete' : 'interactive';\nvar READY_EVENT = 'readystatechange';\nfunction isDoc
umentReady(doc) {\n return (doc.readyState === 'complete' ||\n doc.readySt
ate === requiredReadyState);\n}\n\n// call <callback> when we ensure the documen
t is in a ready state\nfunction whenDocumentReady(callback, doc) {\n if (!isDoc
umentReady(doc)) {\n var checkReady = function() {\n if (doc.readyState
=== 'complete' || \n doc.readyState === requiredReadyState) {\n
doc.removeEventListener(READY_EVENT, checkReady);\n whenDocumentReady(cal
lback, doc);\n }\n }\n doc.addEventListener(READY_EVENT, checkReady);
\n } else if (callback) {\n callback();\n }\n}\n\n// call <callback> when w
e ensure all imports have loaded\nfunction watchImportsLoad(callback, doc) {\n
var imports = doc.querySelectorAll('link[rel=import]');\n var loaded = 0, l = i
mports.length;\n function checkDone(d) { \n if (loaded == l) {\n callba
ck && 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 loadedImport.call(imp);\n
} else {\n imp.addEventListener('load', loadedImport);\n imp.add
EventListener('error', loadedImport);\n }\n }\n } else {\n checkDone
();\n }\n}\n\nfunction isImportLoaded(link) {\n return useNative ? (link.impor
t && (link.import.readyState !== 'loading')) || link.__loaded :\n link.__im
portParsed;\n}\n\n// TODO(sorvell): install a mutation observer to see if HTMLIm
ports have loaded\n// this is a workaround for https://www.w3.org/Bugs/Public/sh
ow_bug.cgi?id=25007\n// and should be removed when this bug is addressed.\nif (u
seNative) {\n new MutationObserver(function(mxns) {\n for (var i=0, l=mxns.l
ength, m; (i < l) && (m=mxns[i]); i++) {\n if (m.addedNodes) {\n han
dleImports(m.addedNodes);\n }\n }\n }).observe(document.head, {childLis
t: true});\n\n function handleImports(nodes) {\n for (var i=0, l=nodes.lengt
h, n; (i<l) && (n=nodes[i]); i++) {\n if (isImport(n)) {\n handleImp
ort(n); \n }\n }\n }\n\n function isImport(element) {\n return ele
ment.localName === 'link' && element.rel === 'import';\n }\n\n function handle
Import(element) {\n var loaded = element.import;\n if (loaded) {\n ma
rkTargetLoaded({target: element});\n } else {\n element.addEventListener
('load', markTargetLoaded);\n element.addEventListener('error', markTargetL
oaded);\n }\n }\n\n function markTargetLoaded(event) {\n event.target.__
loaded = true;\n }\n\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useN
ative = useNative;\nscope.importer = importer;\nscope.whenImportsReady = whenImp
ortsReady;\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\nscope.isImportLoaded = i
sImportLoaded;\nscope.importLoader = importLoader;\n\n})(window.HTMLImports);\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 */\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\n var importe
r = {\n documents: {},\n // nodes to load in the mian document\n docume
ntPreloadSelectors: 'link[rel=' + IMPORT_LINK_TYPE + ']',\n // nodes to load
in imports\n importsPreloadSelectors: [\n 'link[rel=' + IMPORT_LINK_TYPE
+ ']'\n ].join(','),\n loadNode: function(node) {\n importLoader.add
Node(node);\n },\n // load all loadable elements within the parent element
\n loadSubtree: function(parent) {\n var nodes = this.marshalNodes(paren
t);\n // add these nodes to loader's queue\n importLoader.addNodes(nod
es);\n },\n marshalNodes: function(parent) {\n // all preloadable nod
es in inDocument\n return parent.querySelectorAll(this.loadSelectorsForNode
(parent));\n },\n // find the proper set of load selectors for a given nod
e\n loadSelectorsForNode: function(node) {\n var doc = node.ownerDocumen
t || node;\n return doc === mainDoc ? this.documentPreloadSelectors :\n
this.importsPreloadSelectors;\n },\n loaded: function(url, elt, reso
urce) {\n flags.load && console.log('loaded', url, elt);\n // store ge
neric resource\n // TODO(sorvell): fails for nodes inside <template>.conten
t\n // see https://code.google.com/p/chromium/issues/detail?id=249381.\n
elt.__resource = resource;\n if (isDocumentLink(elt)) {\n var doc
= this.documents[url];\n // if we've never seen a document 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 because\n //
SD polyfill does not report these as mutations.\n this.bootDocument(do
c);\n // cache document\n this.documents[url] = doc;\n
}\n // don't store import record until we're actually loaded\n //
store document resource\n elt.import = doc;\n }\n parser.parseN
ext();\n },\n bootDocument: function(doc) {\n this.loadSubtree(doc);\
n this.observe(doc);\n parser.parseNext();\n },\n loadedAll: fun
ction() {\n parser.parseNext();\n }\n };\n\n // loader singleton\n va
r importLoader = new Loader(importer.loaded.bind(importer), \n importer.loa
dedAll.bind(importer));\n\n function isDocumentLink(elt) {\n return isLinkRe
l(elt, IMPORT_LINK_TYPE);\n }\n\n function isLinkRel(elt, rel) {\n return e
lt.localName === 'link' && elt.getAttribute('rel') === rel;\n }\n\n function i
sScript(elt) {\n return elt.localName === 'script';\n }\n\n function makeDo
cument(resource, url) {\n // create a new HTML document\n var doc = resour
ce;\n if (!(doc instanceof Document)) {\n doc = document.implementation.
createHTMLDocument(IMPORT_LINK_TYPE);\n }\n // cache the new document's so
urce url\n doc._URL = url;\n // establish a relative path via <base>\n
var base = doc.createElement('base');\n base.setAttribute('href', url);\n
// add baseURI support to browsers (IE) that lack it.\n if (!doc.baseURI) {\n
doc.baseURI = url;\n }\n // ensure UTF-8 charset\n var meta = doc
.createElement('meta');\n meta.setAttribute('charset', 'utf-8');\n\n doc.h
ead.appendChild(meta);\n doc.head.appendChild(base);\n // install HTML las
t as it may trigger CustomElement upgrades\n // TODO(sjmiles): problem wrt to
template boostrapping below,\n // template bootstrapping must (?) come befor
e element upgrade\n // but we cannot bootstrap templates until they are in a
document\n // which is too late\n if (!(resource instanceof Document)) {\n
// install html\n doc.body.innerHTML = resource;\n }\n // TODO(
sorvell): ideally this code is not aware of Template polyfill,\n // but for n
ow the polyfill needs help to bootstrap these templates\n if (window.HTMLTemp
lateElement && HTMLTemplateElement.bootstrap) {\n HTMLTemplateElement.boots
trap(doc);\n }\n return doc;\n }\n} else {\n // do nothing if using nati
ve imports\n var importer = {};\n}\n\n// NOTE: We cannot polyfill document.curr
entScript because it's not possible\n// both to override and maintain the abilit
y to capture the native value;\n// therefore we choose to expose _currentScript
both when native imports\n// and the polyfill are in use.\nvar currentScriptDesc
riptor = {\n get: function() {\n return HTMLImports.currentScript || documen
t.currentScript;\n },\n configurable: true\n};\n\nObject.defineProperty(docume
nt, '_currentScript', currentScriptDescriptor);\nObject.defineProperty(mainDoc,
'_currentScript', currentScriptDescriptor);\n\n// Polyfill 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, 'baseURI', baseURIDescriptor);
\n Object.defineProperty(mainDoc, 'baseURI', baseURIDescriptor);\n}\n\n// call
a callback when all HTMLImports in the document at call (or at least\n// docume
nt 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 call callback when done\nfun
ction whenImportsReady(callback, doc) {\n doc = doc || mainDoc;\n // if docume
nt is loading, wait and try again\n whenDocumentReady(function() {\n watchIm
portsLoad(callback, doc);\n }, doc);\n}\n\n// call the callback when the docume
nt is in a ready state (has dom)\nvar requiredReadyState = HTMLImports.isIE ? 'c
omplete' : 'interactive';\nvar READY_EVENT = 'readystatechange';\nfunction isDoc
umentReady(doc) {\n return (doc.readyState === 'complete' ||\n doc.readySt
ate === requiredReadyState);\n}\n\n// call <callback> when we ensure the documen
t is in a ready state\nfunction whenDocumentReady(callback, doc) {\n if (!isDoc
umentReady(doc)) {\n var checkReady = function() {\n if (doc.readyState
=== 'complete' || \n doc.readyState === requiredReadyState) {\n
doc.removeEventListener(READY_EVENT, checkReady);\n whenDocumentReady(cal
lback, doc);\n }\n }\n doc.addEventListener(READY_EVENT, checkReady);
\n } else if (callback) {\n callback();\n }\n}\n\n// call <callback> when w
e ensure all imports have loaded\nfunction watchImportsLoad(callback, doc) {\n
var imports = doc.querySelectorAll('link[rel=import]');\n var loaded = 0, l = i
mports.length;\n function checkDone(d) { \n if (loaded == l) {\n callba
ck && 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 loadedImport.call(imp);\n
} else {\n imp.addEventListener('load', loadedImport);\n imp.add
EventListener('error', loadedImport);\n }\n }\n } else {\n checkDone
();\n }\n}\n\nfunction isImportLoaded(link) {\n return useNative ? (link.impor
t && (link.import.readyState !== 'loading')) || link.__loaded :\n link.__im
portParsed;\n}\n\n// TODO(sorvell): install a mutation observer to see if HTMLIm
ports have loaded\n// this is a workaround for https://www.w3.org/Bugs/Public/sh
ow_bug.cgi?id=25007\n// and should be removed when this bug is addressed.\nif (u
seNative) {\n new MutationObserver(function(mxns) {\n for (var i=0, l=mxns.l
ength, m; (i < l) && (m=mxns[i]); i++) {\n if (m.addedNodes) {\n han
dleImports(m.addedNodes);\n }\n }\n }).observe(document.head, {childLis
t: true});\n\n function handleImports(nodes) {\n for (var i=0, l=nodes.lengt
h, n; (i<l) && (n=nodes[i]); i++) {\n if (isImport(n)) {\n handleImp
ort(n); \n }\n }\n }\n\n function isImport(element) {\n return ele
ment.localName === 'link' && element.rel === 'import';\n }\n\n function handle
Import(element) {\n var loaded = element.import;\n if (loaded) {\n ma
rkTargetLoaded({target: element});\n } else {\n element.addEventListener
('load', markTargetLoaded);\n element.addEventListener('error', markTargetL
oaded);\n }\n }\n\n function markTargetLoaded(event) {\n event.target.__
loaded = true;\n }\n\n}\n\n// exports\nscope.hasNative = hasNative;\nscope.useN
ative = useNative;\nscope.importer = importer;\nscope.IMPORT_LINK_TYPE = IMPORT_
LINK_TYPE;\nscope.isImportLoaded = isImportLoaded;\nscope.importLoader = importL
oader;\nscope.whenReady = whenImportsReady;\n\n// deprecated\nscope.whenImportsR
eady = whenImportsReady;\n\n})(window.HTMLImports);\n", |
158 " /*\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;\nvar parser = scope.parser;\n\n// we track mutations for addedNode
s, looking for imports\nfunction handler(mutations) {\n for (var i=0, l=mutatio
ns.length, m; (i<l) && (m=mutations[i]); i++) {\n if (m.type === 'childList'
&& m.addedNodes.length) {\n addedNodes(m.addedNodes);\n }\n }\n}\n\n//
find loadable elements and add them to the importer\nfunction addedNodes(nodes)
{\n var owner;\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++)
{\n owner = owner || n.ownerDocument;\n if (shouldLoadNode(n)) {\n im
porter.loadNode(n);\n }\n if (n.children && n.children.length) {\n ad
dedNodes(n.children);\n }\n }\n // TODO(sorvell): This is not the right app
roach here. We shouldn't need to\n // invalidate parsing when an element is add
ed. Disabling this code \n // until a better approach is found.\n /*\n if (ow
ner) {\n parser.invalidateParse(owner);\n }\n */\n}\n\nfunction shouldLoadN
ode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importe
r.loadSelectorsForNode(node));\n}\n\n// x-plat matches\nvar matches = HTMLElemen
t.prototype.matches || \n HTMLElement.prototype.matchesSelector || \n HTML
Element.prototype.webkitMatchesSelector ||\n HTMLElement.prototype.mozMatches
Selector ||\n HTMLElement.prototype.msMatchesSelector;\n\nvar observer = new
MutationObserver(handler);\n\n// observe the given root for loadable elements\nf
unction observe(root) {\n observer.observe(root, {childList: true, subtree: tru
e});\n}\n\n// exports\n// TODO(sorvell): factor so can put on scope\nscope.obser
ve = observe;\nimporter.observe = observe;\n\n})(HTMLImports);\n", | 160 " /*\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;\nvar parser = scope.parser;\n\n// we track mutations for addedNode
s, looking for imports\nfunction handler(mutations) {\n for (var i=0, l=mutatio
ns.length, m; (i<l) && (m=mutations[i]); i++) {\n if (m.type === 'childList'
&& m.addedNodes.length) {\n addedNodes(m.addedNodes);\n }\n }\n}\n\n//
find loadable elements and add them to the importer\nfunction addedNodes(nodes)
{\n var owner;\n for (var i=0, l=nodes.length, n; (i<l) && (n=nodes[i]); i++)
{\n owner = owner || n.ownerDocument;\n if (shouldLoadNode(n)) {\n im
porter.loadNode(n);\n }\n if (n.children && n.children.length) {\n ad
dedNodes(n.children);\n }\n }\n // TODO(sorvell): This is not the right app
roach here. We shouldn't need to\n // invalidate parsing when an element is add
ed. Disabling this code \n // until a better approach is found.\n /*\n if (ow
ner) {\n parser.invalidateParse(owner);\n }\n */\n}\n\nfunction shouldLoadN
ode(node) {\n return (node.nodeType === 1) && matches.call(node,\n importe
r.loadSelectorsForNode(node));\n}\n\n// x-plat matches\nvar matches = HTMLElemen
t.prototype.matches || \n HTMLElement.prototype.matchesSelector || \n HTML
Element.prototype.webkitMatchesSelector ||\n HTMLElement.prototype.mozMatches
Selector ||\n HTMLElement.prototype.msMatchesSelector;\n\nvar observer = new
MutationObserver(handler);\n\n// observe the given root for loadable elements\nf
unction observe(root) {\n observer.observe(root, {childList: true, subtree: tru
e});\n}\n\n// exports\n// TODO(sorvell): factor so can put on scope\nscope.obser
ve = observe;\nimporter.observe = observe;\n\n})(HTMLImports);\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 */\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", | 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(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", |
160 "/*\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:{}}
;", | 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 */\nwindow.CustomElements = window.CustomElements || {flags:{}}
;", |
161 " /*\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// TODO(sorvell): on platforms without MutationObser
ver, 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 inser
ts 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// im
mediately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObserver
||\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope.has
PolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = false;
\r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingMutat
ions.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = true;
\r\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r\n
setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction takeM
utations() {\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 (has
PolyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(elemen
t);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TO
DO(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 poss
ible we were inserted and removed in the space\r\n // of one microtask, in whic
h 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, and mu
st test 'inDocument' to determine\r\n // whether to call inserted\r\n // If we
can factor these cases into separate code paths we can have\r\n // better diag
nostics.\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 || element.
detachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.do
m && console.group('inserted:', element.localName);\r\n if (inDocument(elemen
t)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // i
f 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.__ins
erted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.localN
ame,\r\n 'insert/remove count:', element.__inserted)\r\n } else if
(element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:'
, element.localName);\r\n element.attachedCallback();\r\n }\r\n }
\r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedN
ode(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n remov
ed(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMuta
tions) {\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 _removed(e
lement) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we
can track\r\n // behavior even when callbacks not defined\r\n if (element.att
achedCallback || element.detachedCallback || (element.__upgraded__ && logFlags.d
om)) {\r\n logFlags.dom && console.group('removed:', element.localName);\r\n
if (!inDocument(element)) {\r\n element.__inserted = (element.__inserted
|| 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'r
emoved' state\r\n if (element.__inserted > 0) {\r\n element.__insert
ed = 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\
n if (element.__inserted < 0) {\r\n logFlags.dom && console.warn('re
moved:', element.localName,\r\n 'insert/remove count:', element.__ins
erted)\r\n } else if (element.detachedCallback) {\r\n element.detach
edCallback();\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 'document'
\r\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return wind
ow.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;\r\n
}\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wra
pIfNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return tru
e;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction watch
Shadow(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 whil
e (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\nfunction ha
ndler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutations[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.grou
p('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNo
des, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n // nodes a
dded may need lifecycle management\r\n addedNode(n);\r\n });\r\n
// removed nodes may need lifecycle management\r\n forEach(mx.removedNode
s, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n removedNode(
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 Mutatio
nObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): ask R
af 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.obser
ve(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDocume
nt(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n lo
gFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').pop())
;\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\nfunc
tion upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n //console.log
('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade conta
ined imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IM
PORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=impor
ts[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n upgradeDocum
entTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// exp
orts\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = watchS
hadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAll =
addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = inse
rtedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocume
nt = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.C
ustomElements);\r\n", | 163 " /*\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// TODO(sorvell): on platforms without MutationObser
ver, 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 inser
ts 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// im
mediately added to dom.\r\nvar hasPolyfillMutations = (!window.MutationObserver
||\r\n (window.MutationObserver === window.JsMutationObserver));\r\nscope.has
PolyfillMutations = hasPolyfillMutations;\r\n\r\nvar isPendingMutations = false;
\r\nvar pendingMutations = [];\r\nfunction deferMutation(fn) {\r\n pendingMutat
ions.push(fn);\r\n if (!isPendingMutations) {\r\n isPendingMutations = true;
\r\n var async = (window.Platform && window.Platform.endOfMicrotask) ||\r\n
setTimeout;\r\n async(takeMutations);\r\n }\r\n}\r\n\r\nfunction takeM
utations() {\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 (has
PolyfillMutations) {\r\n deferMutation(function() {\r\n _inserted(elemen
t);\r\n });\r\n } else {\r\n _inserted(element);\r\n }\r\n}\r\n\r\n// TO
DO(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 poss
ible we were inserted and removed in the space\r\n // of one microtask, in whic
h 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, and mu
st test 'inDocument' to determine\r\n // whether to call inserted\r\n // If we
can factor these cases into separate code paths we can have\r\n // better diag
nostics.\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 || element.
detachedCallback || (element.__upgraded__ && logFlags.dom)) {\r\n logFlags.do
m && console.group('inserted:', element.localName);\r\n if (inDocument(elemen
t)) {\r\n element.__inserted = (element.__inserted || 0) + 1;\r\n // i
f 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.__ins
erted > 1) {\r\n logFlags.dom && console.warn('inserted:', element.localN
ame,\r\n 'insert/remove count:', element.__inserted)\r\n } else if
(element.attachedCallback) {\r\n logFlags.dom && console.log('inserted:'
, element.localName);\r\n element.attachedCallback();\r\n }\r\n }
\r\n logFlags.dom && console.groupEnd();\r\n }\r\n}\r\n\r\nfunction removedN
ode(node) {\r\n removed(node);\r\n forSubtree(node, function(e) {\r\n remov
ed(e);\r\n });\r\n}\r\n\r\nfunction removed(element) {\r\n if (hasPolyfillMuta
tions) {\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 _removed(e
lement) {\r\n // TODO(sjmiles): temporary: do work on all custom elements so we
can track\r\n // behavior even when callbacks not defined\r\n if (element.att
achedCallback || element.detachedCallback || (element.__upgraded__ && logFlags.d
om)) {\r\n logFlags.dom && console.group('removed:', element.localName);\r\n
if (!inDocument(element)) {\r\n element.__inserted = (element.__inserted
|| 0) - 1;\r\n // if we are in a 'inserted' state, bluntly adjust to an 'r
emoved' state\r\n if (element.__inserted > 0) {\r\n element.__insert
ed = 0;\r\n }\r\n // if we are 'over removed', squelch the callback\r\
n if (element.__inserted < 0) {\r\n logFlags.dom && console.warn('re
moved:', element.localName,\r\n 'insert/remove count:', element.__ins
erted)\r\n } else if (element.detachedCallback) {\r\n element.detach
edCallback();\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 'document'
\r\n// is not entirely wrapped\r\nfunction wrapIfNeeded(node) {\r\n return wind
ow.ShadowDOMPolyfill ? ShadowDOMPolyfill.wrapIfNeeded(node)\r\n : node;\r\n
}\r\n\r\nfunction inDocument(element) {\r\n var p = element;\r\n var doc = wra
pIfNeeded(document);\r\n while (p) {\r\n if (p == doc) {\r\n return tru
e;\r\n }\r\n p = p.parentNode || p.host;\r\n }\r\n}\r\n\r\nfunction watch
Shadow(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 whil
e (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\nfunction ha
ndler(mutations) {\r\n //\r\n if (logFlags.dom) {\r\n var mx = mutations[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.grou
p('mutation');\r\n if (mx.type === 'childList') {\r\n forEach(mx.addedNo
des, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n // nodes a
dded may need lifecycle management\r\n addedNode(n);\r\n });\r\n
// removed nodes may need lifecycle management\r\n forEach(mx.removedNode
s, function(n) {\r\n //logFlags.dom && console.log(n.localName);\r\n
if (!n.localName) {\r\n return;\r\n }\r\n removedNode(
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 Mutatio
nObserver(handler);\r\n\r\nfunction takeRecords() {\r\n // TODO(sjmiles): ask R
af 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.obser
ve(inRoot, {childList: true, subtree: true});\r\n}\r\n\r\nfunction observeDocume
nt(doc) {\r\n observe(doc);\r\n}\r\n\r\nfunction upgradeDocument(doc) {\r\n lo
gFlags.dom && console.group('upgradeDocument: ', (doc.baseURI).split('/').pop())
;\r\n addedNode(doc);\r\n logFlags.dom && console.groupEnd();\r\n}\r\n\r\nfunc
tion upgradeDocumentTree(doc) {\r\n doc = wrapIfNeeded(doc);\r\n //console.log
('upgradeDocumentTree: ', (doc.baseURI).split('/').pop());\r\n // upgrade conta
ined imported documents\r\n var imports = doc.querySelectorAll('link[rel=' + IM
PORT_LINK_TYPE + ']');\r\n for (var i=0, l=imports.length, n; (i<l) && (n=impor
ts[i]); i++) {\r\n if (n.import && n.import.__parsed) {\r\n upgradeDocum
entTree(n.import);\r\n }\r\n }\r\n upgradeDocument(doc);\r\n}\r\n\r\n// exp
orts\r\nscope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE;\r\nscope.watchShadow = watchS
hadow;\r\nscope.upgradeDocumentTree = upgradeDocumentTree;\r\nscope.upgradeAll =
addedNode;\r\nscope.upgradeSubtree = addedSubtree;\r\nscope.insertedNode = inse
rtedNode;\r\n\r\nscope.observeDocument = observeDocument;\r\nscope.upgradeDocume
nt = upgradeDocument;\r\n\r\nscope.takeRecords = takeRecords;\r\n\r\n})(window.C
ustomElements);\r\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/**\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/
/ For consistent timing, use native custom elements only when not polyfilling\n/
/ other key related web components features.\nvar useNative = !flags.register &&
hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || HTMLImports.u
seNative);\n\nif (useNative) {\n\n // stub\n var nop = function() {};\n\n //
exports\n scope.registry = {};\n scope.upgradeElement = nop;\n\n scope.watchS
hadow = nop;\n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgrade
Subtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n
scope.upgradeDocumentTree = nop;\n scope.takeRecords = nop;\n scope.reserved
TagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the do
cument.\n *\n * When a registered element is created, a `readyCallback` meth
od is called\n * in the scope of the element. The `readyCallback` method can b
e specified on\n * either `options.prototype` or `options.lifecycle` with the
latter taking\n * precedence.\n *\n * @method register\n * @param {Strin
g} name The tag name to register. Must include a dash ('-'),\n * for exampl
e 'x-component'.\n * @param {Object} options\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 polyfill because the extendee is difficult
to infer.\n * Remember that the input prototype must chain to the extend
ed element's\n * prototype (or HTMLElement.prototype) regardless of the v
alue of\n * `extends`.\n * @param {Object} options.prototype The pro
totype to use for the new\n * element. The prototype must inherit from HT
MLElement.\n * @param {Object} [options.lifecycle]\n * Callbacks tha
t fire at important phases in the life of the custom\n * element.\n *\n
* @example\n * FancyButton = document.registerElement(\"fancy-button\"
, {\n * extends: 'button',\n * prototype: Object.create(HTMLBu
ttonElement.prototype, {\n * readyCallback: {\n * value:
function() {\n * console.log(\"a fancy-button was created\",\n
* }\n * }\n * })\n * });\n * @return {F
unction} Constructor for the newly registered type.\n */\n function register(
name, options) {\n //console.warn('document.registerElement(\"' + name + '\",
', options, ')');\n // construct a defintion out of options\n // TODO(sjm
iles): probably should clone options instead of mutating it\n var definition
= options || {};\n if (!name) {\n // TODO(sjmiles): replace with more ap
propriate error (EricB can probably\n // offer guidance)\n throw new E
rror('document.registerElement: first argument `name` must not be empty');\n
}\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more a
ppropriate error (EricB can probably\n // offer guidance)\n throw new
Error('document.registerElement: first argument (\\'name\\') must contain a dash
(\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n //
prevent registering reserved names\n if (isReservedTag(name)) {\n throw
new Error('Failed to execute \\'registerElement\\' on \\'Document\\': Registrati
on failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n
}\n // elements may only be registered once\n if (getRegisteredDefinition
(name)) {\n throw new Error('DuplicateDefinitionError: a type with name \\'
' + String(name) + '\\' is already registered');\n }\n // must have a prot
otype, default to an extension of HTMLElement\n // TODO(sjmiles): probably sh
ould throw if no prototype, check spec\n if (!definition.prototype) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('Options missing required prototype p
roperty');\n }\n // record name\n definition.__name = name.toLowerCase(
);\n // ensure a lifecycle object so we don't have to null test it\n defin
ition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral
custom elements (for native base detection)\n // TODO(sjmiles): we used to ne
ed to store this, but current code only\n // uses it in 'resolveTagName': it
should probably be inlined\n definition.ancestry = ancestry(definition.extend
s);\n // extensions of native specializations of HTMLElement require localNam
e\n // to remain native, and use secondary 'is' specifier for extension type\
n resolveTagName(definition);\n // some platforms require modifications to
the user-supplied prototype\n // chain\n resolvePrototypeChain(definition
);\n // overrides to implement attributeChanged callback\n overrideAttribu
teApi(definition.prototype);\n // 7.1.5: Register the DEFINITION with DOCUMEN
T\n registerDefinition(definition.__name, definition);\n // 7.1.7. Run cus
tom element constructor generation algorithm with PROTOTYPE\n // 7.1.8. Retur
n the output of the previous step.\n definition.ctor = generateConstructor(de
finition);\n definition.ctor.prototype = definition.prototype;\n // force
our .constructor to be our actual constructor\n definition.prototype.construc
tor = definition.ctor;\n // if initial parsing is complete\n if (scope.rea
dy) {\n // upgrade any pre-existing nodes of this type\n scope.upgrade
DocumentTree(document);\n }\n return definition.ctor;\n }\n\n function i
sReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n
if (name === reservedTagList[i]) {\n return true;\n }\n }\n
}\n\n var reservedTagList = [\n 'annotation-xml', 'color-profile', 'font-fac
e', 'font-face-src',\n 'font-face-uri', 'font-face-format', 'font-face-name',
'missing-glyph'\n ];\n\n function ancestry(extnds) {\n var extendee = getR
egisteredDefinition(extnds);\n if (extendee) {\n return ancestry(extende
e.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolve
TagName(definition) {\n // if we are explicitly extending something, that thi
ng is our\n // baseTag, unless it represents a custom component\n var base
Tag = definition.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=defini
tion.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag
is our baseTag, 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 secondary 'is' specifier\n definition.is = definition.__name;\n
}\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't su
pport __proto__ we need to locate the native level\n // prototype for precise
mixing in\n if (!Object.__proto__) {\n // default prototype\n var
nativePrototype = HTMLElement.prototype;\n // work out prototype when using
type-extension\n if (definition.is) {\n var inst = document.createE
lement(definition.tag);\n var expectedPrototype = Object.getPrototypeOf(i
nst);\n // only set nativePrototype if it will actually appear in the def
inition's chain\n if (expectedPrototype === definition.prototype) {\n
nativePrototype = expectedPrototype;\n }\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 instea
d\n // of prototype swizzling. In this case, this generated __proto__ provi
des\n // limited support for prototype traversal.\n var proto = defini
tion.prototype, ancestor;\n while (proto && (proto !== nativePrototype)) {\
n ancestor = Object.getPrototypeOf(proto);\n proto.__proto__ = anc
estor;\n proto = ancestor;\n }\n // cache this in case of mixin
\n definition.native = nativePrototype;\n }\n }\n\n // SECTION 4\n\n
function instantiate(definition) {\n // 4.a.1. Create a new object that imple
ments PROTOTYPE\n // 4.a.2. Let ELEMENT by this new object\n //\n // th
e custom element instantiation algorithm must also ensure that the\n // outpu
t is a valid DOM element with the proper wrapper in place.\n //\n return u
pgrade(domCreateElement(definition.tag), definition);\n }\n\n function upgrade
(element, definition) {\n // some definitions specify an 'is' attribute\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 definition.prot
otype\n implement(element, definition);\n // flag as upgraded\n element
.__upgraded__ = true;\n // lifecycle management\n created(element);\n /
/ attachedCallback fires in tree order, call before recursing\n scope.inserte
dNode(element);\n // there should never be a shadow root on element at this p
oint\n scope.upgradeSubtree(element);\n // OUTPUT\n return element;\n
}\n\n function implement(element, definition) {\n // prototype swizzling is
best\n if (Object.__proto__) {\n element.__proto__ = definition.prototyp
e;\n } else {\n // where above we can re-acquire inPrototype via\n
// getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we i
nstall a magic reference\n customMixin(element, definition.prototype, defin
ition.native);\n element.__proto__ = definition.prototype;\n }\n }\n\n
function customMixin(inTarget, 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 //
The default is HTMLElement.prototype, so we add a test to avoid mixing in\n
// native prototypes\n while (p !== inNative && p !== HTMLElement.prototype)
{\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=key
s[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTarget,
k,\n Object.getOwnPropertyDescriptor(p, k));\n used[k] =
1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n fun
ction created(element) {\n // invoke createdCallback\n if (element.created
Callback) {\n element.createdCallback();\n }\n }\n\n // attribute watc
hing\n\n function overrideAttributeApi(prototype) {\n // overrides to implem
ent callbacks\n // TODO(sjmiles): should support access via .attributes Named
NodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if
(prototype.setAttribute._polyfilled) {\n return;\n }\n var setAttribu
te = prototype.setAttribute;\n prototype.setAttribute = function(name, value)
{\n changeAttribute.call(this, name, value, setAttribute);\n }\n var
removeAttribute = prototype.removeAttribute;\n prototype.removeAttribute = f
unction(name) {\n changeAttribute.call(this, name, null, removeAttribute);\
n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https://dvcs
.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-attribut
e-changed-callback\n function changeAttribute(name, value, operation) {\n na
me = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n opera
tion.apply(this, arguments);\n var newValue = this.getAttribute(name);\n i
f (this.attributeChangedCallback\n && (newValue !== oldValue)) {\n t
his.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // elem
ent registry (maps tag names to definitions)\n\n var registry = {};\n\n functi
on getRegisteredDefinition(name) {\n if (name) {\n return registry[name.
toLowerCase()];\n }\n }\n\n function registerDefinition(name, definition) {
\n registry[name] = definition;\n }\n\n function generateConstructor(defini
tion) {\n return function() {\n return instantiate(definition);\n };\
n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function creat
eElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-
HTML elements,\n // just call createElementNS for non HTML Elements\n if (
namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtension);
\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n
function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignore 'ta
g' when using 'typeExtension', we could\n // error check it, or perhaps there
should only ever be one argument\n var definition = getRegisteredDefinition(
typeExtension || tag);\n if (definition) {\n if (tag == definition.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 elemen
t = domCreateElement(tag);\n // Custom tags should be HTMLElements even if no
t upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTMLElem
ent);\n }\n return element;\n }\n\n function upgradeElement(element) {\n
if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n
var is = element.getAttribute('is');\n var definition = getRegisteredDe
finition(is || element.localName);\n if (definition) {\n if (is && d
efinition.tag == element.localName) {\n return upgrade(element, definit
ion);\n } else if (!is && !definition.extends) {\n return upgrad
e(element, definition);\n }\n }\n }\n }\n\n function 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 over
ride it\n\n var domCreateElement = document.createElement.bind(document);\n va
r domCreateElementNS = document.createElementNS.bind(document);\n\n // capture
native cloneNode before we override it\n\n var domCloneNode = Node.prototype.cl
oneNode;\n\n // exports\n\n document.registerElement = register;\n document.c
reateElement = createElement; // override\n document.createElementNS = createEl
ementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n\n s
cope.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` a
ttribute\n * to be attached (as needed), and invocation of the `readyCallback`
.\n * `upgrade` does nothing if the element is already upgraded, or\n * if i
t matches no registered custom tag name.\n *\n * @method ugprade\n * @para
m {Element} element The element to upgrade.\n * @return {Element} The upgraded
element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custom 'in
stanceof'. This is necessary when CustomElements\n// are implemented via a mixin
strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !u
seNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n while (
p) {\n // NOTE: this is not technically correct since we're not checking if
\n // an object is an instance of a constructor; however, this should\n
// be good enough for the mixin strategy.\n if (p === ctor.prototype) {\n
return true;\n }\n p = p.__proto__;\n }\n return false;\
n }\n} else {\n isInstance = function(obj, base) {\n return obj instanceof
base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reservedTagLi
st = reservedTagList;\n\n// bc\ndocument.register = document.registerElement;\n\
nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomE
lements);\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\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/
/ For consistent timing, use native custom elements only when not polyfilling\n/
/ other key related web components features.\nvar useNative = !flags.register &&
hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || HTMLImports.u
seNative);\n\nif (useNative) {\n\n // stub\n var nop = function() {};\n\n //
exports\n scope.registry = {};\n scope.upgradeElement = nop;\n\n scope.watchS
hadow = nop;\n scope.upgrade = nop;\n scope.upgradeAll = nop;\n scope.upgrade
Subtree = nop;\n scope.observeDocument = nop;\n scope.upgradeDocument = nop;\n
scope.upgradeDocumentTree = nop;\n scope.takeRecords = nop;\n scope.reserved
TagList = [];\n\n} else {\n\n /**\n * Registers a custom tag name with the do
cument.\n *\n * When a registered element is created, a `readyCallback` meth
od is called\n * in the scope of the element. The `readyCallback` method can b
e specified on\n * either `options.prototype` or `options.lifecycle` with the
latter taking\n * precedence.\n *\n * @method register\n * @param {Strin
g} name The tag name to register. Must include a dash ('-'),\n * for exampl
e 'x-component'.\n * @param {Object} options\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 polyfill because the extendee is difficult
to infer.\n * Remember that the input prototype must chain to the extend
ed element's\n * prototype (or HTMLElement.prototype) regardless of the v
alue of\n * `extends`.\n * @param {Object} options.prototype The pro
totype to use for the new\n * element. The prototype must inherit from HT
MLElement.\n * @param {Object} [options.lifecycle]\n * Callbacks tha
t fire at important phases in the life of the custom\n * element.\n *\n
* @example\n * FancyButton = document.registerElement(\"fancy-button\"
, {\n * extends: 'button',\n * prototype: Object.create(HTMLBu
ttonElement.prototype, {\n * readyCallback: {\n * value:
function() {\n * console.log(\"a fancy-button was created\",\n
* }\n * }\n * })\n * });\n * @return {F
unction} Constructor for the newly registered type.\n */\n function register(
name, options) {\n //console.warn('document.registerElement(\"' + name + '\",
', options, ')');\n // construct a defintion out of options\n // TODO(sjm
iles): probably should clone options instead of mutating it\n var definition
= options || {};\n if (!name) {\n // TODO(sjmiles): replace with more ap
propriate error (EricB can probably\n // offer guidance)\n throw new E
rror('document.registerElement: first argument `name` must not be empty');\n
}\n if (name.indexOf('-') < 0) {\n // TODO(sjmiles): replace with more a
ppropriate error (EricB can probably\n // offer guidance)\n throw new
Error('document.registerElement: first argument (\\'name\\') must contain a dash
(\\'-\\'). Argument provided was \\'' + String(name) + '\\'.');\n }\n //
prevent registering reserved names\n if (isReservedTag(name)) {\n throw
new Error('Failed to execute \\'registerElement\\' on \\'Document\\': Registrati
on failed for type \\'' + String(name) + '\\'. The type name is invalid.');\n
}\n // elements may only be registered once\n if (getRegisteredDefinition
(name)) {\n throw new Error('DuplicateDefinitionError: a type with name \\'
' + String(name) + '\\' is already registered');\n }\n // must have a prot
otype, default to an extension of HTMLElement\n // TODO(sjmiles): probably sh
ould throw if no prototype, check spec\n if (!definition.prototype) {\n
// TODO(sjmiles): replace with more appropriate error (EricB can probably\n
// offer guidance)\n throw new Error('Options missing required prototype p
roperty');\n }\n // record name\n definition.__name = name.toLowerCase(
);\n // ensure a lifecycle object so we don't have to null test it\n defin
ition.lifecycle = definition.lifecycle || {};\n // build a list of ancestral
custom elements (for native base detection)\n // TODO(sjmiles): we used to ne
ed to store this, but current code only\n // uses it in 'resolveTagName': it
should probably be inlined\n definition.ancestry = ancestry(definition.extend
s);\n // extensions of native specializations of HTMLElement require localNam
e\n // to remain native, and use secondary 'is' specifier for extension type\
n resolveTagName(definition);\n // some platforms require modifications to
the user-supplied prototype\n // chain\n resolvePrototypeChain(definition
);\n // overrides to implement attributeChanged callback\n overrideAttribu
teApi(definition.prototype);\n // 7.1.5: Register the DEFINITION with DOCUMEN
T\n registerDefinition(definition.__name, definition);\n // 7.1.7. Run cus
tom element constructor generation algorithm with PROTOTYPE\n // 7.1.8. Retur
n the output of the previous step.\n definition.ctor = generateConstructor(de
finition);\n definition.ctor.prototype = definition.prototype;\n // force
our .constructor to be our actual constructor\n definition.prototype.construc
tor = definition.ctor;\n // if initial parsing is complete\n if (scope.rea
dy) {\n // upgrade any pre-existing nodes of this type\n scope.upgrade
DocumentTree(document);\n }\n return definition.ctor;\n }\n\n function i
sReservedTag(name) {\n for (var i = 0; i < reservedTagList.length; i++) {\n
if (name === reservedTagList[i]) {\n return true;\n }\n }\n
}\n\n var reservedTagList = [\n 'annotation-xml', 'color-profile', 'font-fac
e', 'font-face-src',\n 'font-face-uri', 'font-face-format', 'font-face-name',
'missing-glyph'\n ];\n\n function ancestry(extnds) {\n var extendee = getR
egisteredDefinition(extnds);\n if (extendee) {\n return ancestry(extende
e.extends).concat([extendee]);\n }\n return [];\n }\n\n function resolve
TagName(definition) {\n // if we are explicitly extending something, that thi
ng is our\n // baseTag, unless it represents a custom component\n var base
Tag = definition.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=defini
tion.ancestry[i]); i++) {\n baseTag = a.is && a.tag;\n }\n // our tag
is our baseTag, 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 secondary 'is' specifier\n definition.is = definition.__name;\n
}\n }\n\n function resolvePrototypeChain(definition) {\n // if we don't su
pport __proto__ we need to locate the native level\n // prototype for precise
mixing in\n if (!Object.__proto__) {\n // default prototype\n var
nativePrototype = HTMLElement.prototype;\n // work out prototype when using
type-extension\n if (definition.is) {\n var inst = document.createE
lement(definition.tag);\n var expectedPrototype = Object.getPrototypeOf(i
nst);\n // only set nativePrototype if it will actually appear in the def
inition's chain\n if (expectedPrototype === definition.prototype) {\n
nativePrototype = expectedPrototype;\n }\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 instea
d\n // of prototype swizzling. In this case, this generated __proto__ provi
des\n // limited support for prototype traversal.\n var proto = defini
tion.prototype, ancestor;\n while (proto && (proto !== nativePrototype)) {\
n ancestor = Object.getPrototypeOf(proto);\n proto.__proto__ = anc
estor;\n proto = ancestor;\n }\n // cache this in case of mixin
\n definition.native = nativePrototype;\n }\n }\n\n // SECTION 4\n\n
function instantiate(definition) {\n // 4.a.1. Create a new object that imple
ments PROTOTYPE\n // 4.a.2. Let ELEMENT by this new object\n //\n // th
e custom element instantiation algorithm must also ensure that the\n // outpu
t is a valid DOM element with the proper wrapper in place.\n //\n return u
pgrade(domCreateElement(definition.tag), definition);\n }\n\n function upgrade
(element, definition) {\n // some definitions specify an 'is' attribute\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 definition.prot
otype\n implement(element, definition);\n // flag as upgraded\n element
.__upgraded__ = true;\n // lifecycle management\n created(element);\n /
/ attachedCallback fires in tree order, call before recursing\n scope.inserte
dNode(element);\n // there should never be a shadow root on element at this p
oint\n scope.upgradeSubtree(element);\n // OUTPUT\n return element;\n
}\n\n function implement(element, definition) {\n // prototype swizzling is
best\n if (Object.__proto__) {\n element.__proto__ = definition.prototyp
e;\n } else {\n // where above we can re-acquire inPrototype via\n
// getPrototypeOf(Element), we cannot do so when\n // we use mixin, so we i
nstall a magic reference\n customMixin(element, definition.prototype, defin
ition.native);\n element.__proto__ = definition.prototype;\n }\n }\n\n
function customMixin(inTarget, 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 //
The default is HTMLElement.prototype, so we add a test to avoid mixing in\n
// native prototypes\n while (p !== inNative && p !== HTMLElement.prototype)
{\n var keys = Object.getOwnPropertyNames(p);\n for (var i=0, k; k=key
s[i]; i++) {\n if (!used[k]) {\n Object.defineProperty(inTarget,
k,\n Object.getOwnPropertyDescriptor(p, k));\n used[k] =
1;\n }\n }\n p = Object.getPrototypeOf(p);\n }\n }\n\n fun
ction created(element) {\n // invoke createdCallback\n if (element.created
Callback) {\n element.createdCallback();\n }\n }\n\n // attribute watc
hing\n\n function overrideAttributeApi(prototype) {\n // overrides to implem
ent callbacks\n // TODO(sjmiles): should support access via .attributes Named
NodeMap\n // TODO(sjmiles): preserves user defined overrides, if any\n if
(prototype.setAttribute._polyfilled) {\n return;\n }\n var setAttribu
te = prototype.setAttribute;\n prototype.setAttribute = function(name, value)
{\n changeAttribute.call(this, name, value, setAttribute);\n }\n var
removeAttribute = prototype.removeAttribute;\n prototype.removeAttribute = f
unction(name) {\n changeAttribute.call(this, name, null, removeAttribute);\
n }\n prototype.setAttribute._polyfilled = true;\n }\n\n // https://dvcs
.w3.org/hg/webcomponents/raw-file/tip/spec/custom/\n // index.html#dfn-attribut
e-changed-callback\n function changeAttribute(name, value, operation) {\n na
me = name.toLowerCase();\n var oldValue = this.getAttribute(name);\n opera
tion.apply(this, arguments);\n var newValue = this.getAttribute(name);\n i
f (this.attributeChangedCallback\n && (newValue !== oldValue)) {\n t
his.attributeChangedCallback(name, oldValue, newValue);\n }\n }\n\n // elem
ent registry (maps tag names to definitions)\n\n var registry = {};\n\n functi
on getRegisteredDefinition(name) {\n if (name) {\n return registry[name.
toLowerCase()];\n }\n }\n\n function registerDefinition(name, definition) {
\n registry[name] = definition;\n }\n\n function generateConstructor(defini
tion) {\n return function() {\n return instantiate(definition);\n };\
n }\n\n var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n function creat
eElementNS(namespace, tag, typeExtension) {\n // NOTE: we do not support non-
HTML elements,\n // just call createElementNS for non HTML Elements\n if (
namespace === HTML_NAMESPACE) {\n return createElement(tag, typeExtension);
\n } else {\n return domCreateElementNS(namespace, tag);\n }\n }\n\n
function createElement(tag, typeExtension) {\n // TODO(sjmiles): ignore 'ta
g' when using 'typeExtension', we could\n // error check it, or perhaps there
should only ever be one argument\n var definition = getRegisteredDefinition(
typeExtension || tag);\n if (definition) {\n if (tag == definition.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 elemen
t = domCreateElement(tag);\n // Custom tags should be HTMLElements even if no
t upgraded.\n if (tag.indexOf('-') >= 0) {\n implement(element, HTMLElem
ent);\n }\n return element;\n }\n\n function upgradeElement(element) {\n
if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {\n
var is = element.getAttribute('is');\n var definition = getRegisteredDe
finition(is || element.localName);\n if (definition) {\n if (is && d
efinition.tag == element.localName) {\n return upgrade(element, definit
ion);\n } else if (!is && !definition.extends) {\n return upgrad
e(element, definition);\n }\n }\n }\n }\n\n function 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 over
ride it\n\n var domCreateElement = document.createElement.bind(document);\n va
r domCreateElementNS = document.createElementNS.bind(document);\n\n // capture
native cloneNode before we override it\n\n var domCloneNode = Node.prototype.cl
oneNode;\n\n // exports\n\n document.registerElement = register;\n document.c
reateElement = createElement; // override\n document.createElementNS = createEl
ementNS; // override\n Node.prototype.cloneNode = cloneNode; // override\n\n s
cope.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` a
ttribute\n * to be attached (as needed), and invocation of the `readyCallback`
.\n * `upgrade` does nothing if the element is already upgraded, or\n * if i
t matches no registered custom tag name.\n *\n * @method ugprade\n * @para
m {Element} element The element to upgrade.\n * @return {Element} The upgraded
element.\n */\n scope.upgrade = upgradeElement;\n}\n\n// Create a custom 'in
stanceof'. This is necessary when CustomElements\n// are implemented via a mixin
strategy, as for example on IE10.\nvar isInstance;\nif (!Object.__proto__ && !u
seNative) {\n isInstance = function(obj, ctor) {\n var p = obj;\n while (
p) {\n // NOTE: this is not technically correct since we're not checking if
\n // an object is an instance of a constructor; however, this should\n
// be good enough for the mixin strategy.\n if (p === ctor.prototype) {\n
return true;\n }\n p = p.__proto__;\n }\n return false;\
n }\n} else {\n isInstance = function(obj, base) {\n return obj instanceof
base;\n }\n}\n\n// exports\nscope.instanceof = isInstance;\nscope.reservedTagLi
st = reservedTagList;\n\n// bc\ndocument.register = document.registerElement;\n\
nscope.hasNative = hasNative;\nscope.useNative = useNative;\n\n})(window.CustomE
lements);\n", |
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\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);", | 165 "/*\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);", |
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(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", | 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(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", |
165 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind
ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var
fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume
nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn)
{\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach
(function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi
nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n", | 167 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function() {\n\nif (wind
ow.ShadowDOMPolyfill) {\n\n // ensure wrapped inputs for these functions\n var
fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',\n 'upgradeDocume
nt'];\n\n // cache originals\n var original = {};\n fns.forEach(function(fn)
{\n original[fn] = CustomElements[fn];\n });\n\n // override\n fns.forEach
(function(fn) {\n CustomElements[fn] = function(inNode) {\n return origi
nal[fn](wrap(inNode));\n };\n });\n\n}\n\n})();\n", |
166 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var
endOfMicrotask = scope.endOfMicrotask;\n\n // Generic url loader\n function L
oader(regex) {\n this.cache = Object.create(null);\n this.map = Object.cre
ate(null);\n this.requests = 0;\n this.regex = regex;\n }\n Loader.proto
type = {\n\n // TODO(dfreedm): there may be a better factoring here\n // e
xtract absolute urls from the text (full of relative urls)\n extractUrls: fun
ction(text, base) {\n var matches = [];\n var matched, u;\n while
((matched = this.regex.exec(text))) {\n u = new URL(matched[1], base);\n
matches.push({matched: matched[0], url: u.href});\n }\n return
matches;\n },\n // take a text blob, a root url, and a callback and load
all the urls found within the text\n // returns a map of absolute url to text
\n process: function(text, root, callback) {\n var matches = this.extrac
tUrls(text, root);\n\n // every call to process returns all the text this l
oader has ever received\n var done = callback.bind(null, this.map);\n
this.fetch(matches, done);\n },\n // build a mapping of url -> text from m
atches\n fetch: function(matches, callback) {\n var inflight = matches.l
ength;\n\n // return early if there is no fetching to be done\n if (!i
nflight) {\n return callback();\n }\n\n // wait for all subrequ
ests to return\n var done = function() {\n if (--inflight === 0) {\n
callback();\n }\n };\n\n // start fetching all subreq
uests\n var m, req, url;\n for (var i = 0; i < inflight; i++) {\n
m = matches[i];\n url = m.url;\n req = this.cache[url];\n
// if this url has already been requested, skip requesting it again\n i
f (!req) {\n req = this.xhr(url);\n req.match = m;\n
this.cache[url] = req;\n }\n // wait for the request to process it
s subrequests\n req.wait(done);\n }\n },\n handleXhr: function
(request) {\n var match = request.match;\n var url = match.url;\n\n
// handle errors with an empty string\n var response = request.response
|| request.responseText || '';\n this.map[url] = response;\n this.fetc
h(this.extractUrls(response, url), request.resolve);\n },\n xhr: function(
url) {\n this.requests++;\n var request = new XMLHttpRequest();\n
request.open('GET', url, true);\n request.send();\n request.onerror =
request.onload = this.handleXhr.bind(this, request);\n\n // queue of tasks
to run after XHR returns\n request.pending = [];\n request.resolve =
function() {\n var pending = request.pending;\n for(var i = 0; i <
pending.length; i++) {\n pending[i]();\n }\n request.pen
ding = null;\n };\n\n // if we have already resolved, pending is null,
async call the callback\n request.wait = function(fn) {\n if (reque
st.pending) {\n request.pending.push(fn);\n } else {\n
endOfMicrotask(fn);\n }\n };\n\n return request;\n }\n };\n
\n scope.Loader = Loader;\n})(window.Platform);\n", | 168 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n var
endOfMicrotask = scope.endOfMicrotask;\n\n // Generic url loader\n function L
oader(regex) {\n this.cache = Object.create(null);\n this.map = Object.cre
ate(null);\n this.requests = 0;\n this.regex = regex;\n }\n Loader.proto
type = {\n\n // TODO(dfreedm): there may be a better factoring here\n // e
xtract absolute urls from the text (full of relative urls)\n extractUrls: fun
ction(text, base) {\n var matches = [];\n var matched, u;\n while
((matched = this.regex.exec(text))) {\n u = new URL(matched[1], base);\n
matches.push({matched: matched[0], url: u.href});\n }\n return
matches;\n },\n // take a text blob, a root url, and a callback and load
all the urls found within the text\n // returns a map of absolute url to text
\n process: function(text, root, callback) {\n var matches = this.extrac
tUrls(text, root);\n\n // every call to process returns all the text this l
oader has ever received\n var done = callback.bind(null, this.map);\n
this.fetch(matches, done);\n },\n // build a mapping of url -> text from m
atches\n fetch: function(matches, callback) {\n var inflight = matches.l
ength;\n\n // return early if there is no fetching to be done\n if (!i
nflight) {\n return callback();\n }\n\n // wait for all subrequ
ests to return\n var done = function() {\n if (--inflight === 0) {\n
callback();\n }\n };\n\n // start fetching all subreq
uests\n var m, req, url;\n for (var i = 0; i < inflight; i++) {\n
m = matches[i];\n url = m.url;\n req = this.cache[url];\n
// if this url has already been requested, skip requesting it again\n i
f (!req) {\n req = this.xhr(url);\n req.match = m;\n
this.cache[url] = req;\n }\n // wait for the request to process it
s subrequests\n req.wait(done);\n }\n },\n handleXhr: function
(request) {\n var match = request.match;\n var url = match.url;\n\n
// handle errors with an empty string\n var response = request.response
|| request.responseText || '';\n this.map[url] = response;\n this.fetc
h(this.extractUrls(response, url), request.resolve);\n },\n xhr: function(
url) {\n this.requests++;\n var request = new XMLHttpRequest();\n
request.open('GET', url, true);\n request.send();\n request.onerror =
request.onload = this.handleXhr.bind(this, request);\n\n // queue of tasks
to run after XHR returns\n request.pending = [];\n request.resolve =
function() {\n var pending = request.pending;\n for(var i = 0; i <
pending.length; i++) {\n pending[i]();\n }\n request.pen
ding = null;\n };\n\n // if we have already resolved, pending is null,
async call the callback\n request.wait = function(fn) {\n if (reque
st.pending) {\n request.pending.push(fn);\n } else {\n
endOfMicrotask(fn);\n }\n };\n\n return request;\n }\n };\n
\n scope.Loader = Loader;\n})(window.Platform);\n", |
167 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
urlResolver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction StyleR
esolver() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.prototype
= {\n regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n // Recu
rsively replace @imports with the text at that url\n resolve: function(text, ur
l, callback) {\n var done = function(map) {\n callback(this.flatten(text
, url, map));\n }.bind(this);\n this.loader.process(text, url, done);\n }
,\n // resolve the textContent of a style node\n resolveNode: function(style,
url, callback) {\n var text = style.textContent;\n var done = function(tex
t) {\n style.textContent = text;\n callback(style);\n };\n this.
resolve(text, url, done);\n },\n // flatten all the @imports to text\n flatte
n: function(text, base, map) {\n var matches = this.loader.extractUrls(text,
base);\n var match, url, intermediate;\n for (var i = 0; i < matches.lengt
h; i++) {\n match = matches[i];\n url = match.url;\n // resolve a
ny css text to be relative to the importer, keep absolute url\n intermediat
e = urlResolver.resolveCssText(map[url], url, true);\n // flatten intermedi
ate @imports\n intermediate = this.flatten(intermediate, base, map);\n
text = text.replace(match.matched, intermediate);\n }\n return text;\n }
,\n loadStyles: function(styles, base, callback) {\n var loaded=0, l = style
s.length;\n // called in the context of the style\n function loadedStyle(s
tyle) {\n loaded++;\n if (loaded === l && callback) {\n callbac
k();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n
this.resolveNode(s, base, loadedStyle);\n }\n }\n};\n\nvar styleResolver =
new StyleResolver();\n\n// exports\nscope.styleResolver = styleResolver;\n\n})(w
indow.Platform);\n", | 169 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\nvar
urlResolver = scope.urlResolver;\nvar Loader = scope.Loader;\n\nfunction StyleR
esolver() {\n this.loader = new Loader(this.regex);\n}\nStyleResolver.prototype
= {\n regex: /@import\\s+(?:url)?[\"'\\(]*([^'\"\\)]*)['\"\\)]*;/g,\n // Recu
rsively replace @imports with the text at that url\n resolve: function(text, ur
l, callback) {\n var done = function(map) {\n callback(this.flatten(text
, url, map));\n }.bind(this);\n this.loader.process(text, url, done);\n }
,\n // resolve the textContent of a style node\n resolveNode: function(style,
url, callback) {\n var text = style.textContent;\n var done = function(tex
t) {\n style.textContent = text;\n callback(style);\n };\n this.
resolve(text, url, done);\n },\n // flatten all the @imports to text\n flatte
n: function(text, base, map) {\n var matches = this.loader.extractUrls(text,
base);\n var match, url, intermediate;\n for (var i = 0; i < matches.lengt
h; i++) {\n match = matches[i];\n url = match.url;\n // resolve a
ny css text to be relative to the importer, keep absolute url\n intermediat
e = urlResolver.resolveCssText(map[url], url, true);\n // flatten intermedi
ate @imports\n intermediate = this.flatten(intermediate, base, map);\n
text = text.replace(match.matched, intermediate);\n }\n return text;\n }
,\n loadStyles: function(styles, base, callback) {\n var loaded=0, l = style
s.length;\n // called in the context of the style\n function loadedStyle(s
tyle) {\n loaded++;\n if (loaded === l && callback) {\n callbac
k();\n }\n }\n for (var i=0, s; (i<l) && (s=styles[i]); i++) {\n
this.resolveNode(s, base, loadedStyle);\n }\n }\n};\n\nvar styleResolver =
new StyleResolver();\n\n// exports\nscope.styleResolver = styleResolver;\n\n})(w
indow.Platform);\n", |
168 "// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n//
This code may only be used under the BSD style license found at http://polymer.
github.io/LICENSE.txt\n// The complete set of authors may be found at http://pol
ymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google as part
of the polymer project is also\n// subject to an additional IP rights grant fou
nd at http://polymer.github.io/PATENTS.txt\n\n(function(global) {\n 'use strict
';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n
\n function getTreeScope(node) {\n while (node.parentNode) {\n node = n
ode.parentNode;\n }\n\n return typeof node.getElementById === 'function' ?
node : null;\n }\n\n Node.prototype.bind = function(name, observable) {\n
console.error('Unhandled binding to Node: ', this, name, observable);\n };\n\n
Node.prototype.bindFinished = function() {};\n\n function updateBindings(node,
name, binding) {\n var bindings = node.bindings_;\n if (!bindings)\n
bindings = node.bindings_ = {};\n\n if (bindings[name])\n binding[name]
.close();\n\n return bindings[name] = binding;\n }\n\n function returnBindi
ng(node, name, binding) {\n return binding;\n }\n\n function sanitizeValue(
value) {\n return value == null ? '' : value;\n }\n\n function updateText(n
ode, value) {\n node.data = sanitizeValue(value);\n }\n\n function textBind
ing(node) {\n return function(value) {\n return updateText(node, value);
\n };\n }\n\n var maybeUpdateBindings = returnBinding;\n\n Object.definePr
operty(Platform, 'enableBindingsReflection', {\n get: function() {\n ret
urn maybeUpdateBindings === updateBindings;\n },\n set: function(enable) {
\n maybeUpdateBindings = enable ? updateBindings : returnBinding;\n re
turn enable;\n },\n configurable: true\n });\n\n Text.prototype.bind = f
unction(name, value, oneTime) {\n if (name !== 'textContent')\n return N
ode.prototype.bind.call(this, name, value, oneTime);\n\n if (oneTime)\n
return updateText(this, value);\n\n var observable = value;\n updateText(t
his, observable.open(textBinding(this)));\n return maybeUpdateBindings(this,
name, observable);\n }\n\n function updateAttribute(el, name, conditional, val
ue) {\n if (conditional) {\n if (value)\n el.setAttribute(name, '
');\n else\n el.removeAttribute(name);\n return;\n }\n\n
el.setAttribute(name, sanitizeValue(value));\n }\n\n function attributeBinding
(el, name, conditional) {\n return function(value) {\n updateAttribute(e
l, name, conditional, value);\n };\n }\n\n Element.prototype.bind = functio
n(name, value, oneTime) {\n var conditional = name[name.length - 1] == '?';\n
if (conditional) {\n this.removeAttribute(name);\n name = name.sli
ce(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(this, name,
conditional, value);\n\n\n var observable = value;\n updateAttribute(this,
name, conditional,\n observable.open(attributeBinding(this, name, condit
ional)));\n\n return maybeUpdateBindings(this, name, observable);\n };\n\n
var checkboxEventType;\n (function() {\n // Attempt to feature-detect which
event (change or click) is fired first\n // for checkboxes.\n var div = do
cument.createElement('div');\n var checkbox = div.appendChild(document.create
Element('input'));\n checkbox.setAttribute('type', 'checkbox');\n var firs
t;\n var count = 0;\n checkbox.addEventListener('click', function(e) {\n
count++;\n first = first || 'click';\n });\n checkbox.addEventLis
tener('change', function() {\n count++;\n first = first || 'change';\n
});\n\n var event = document.createEvent('MouseEvent');\n event.initMo
useEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false,\n false, fa
lse, false, 0, null);\n checkbox.dispatchEvent(event);\n // WebKit/Blink d
on't fire the change event if the element is outside the\n // document, so as
sume 'change' for that case.\n checkboxEventType = count == 1 ? 'change' : fi
rst;\n })();\n\n function getEventForInputType(element) {\n switch (element
.type) {\n case 'checkbox':\n return checkboxEventType;\n case
'radio':\n case 'select-multiple':\n case 'select-one':\n retur
n 'change';\n case 'range':\n if (/Trident|MSIE/.test(navigator.user
Agent))\n return 'change';\n default:\n return 'input';\n
}\n }\n\n function updateInput(input, property, value, santizeFn) {\n inp
ut[property] = (santizeFn || sanitizeValue)(value);\n }\n\n function inputBind
ing(input, property, santizeFn) {\n return function(value) {\n return up
dateInput(input, property, value, santizeFn);\n }\n }\n\n function noop() {
}\n\n function bindInputEvent(input, property, observable, postEventFn) {\n
var eventType = getEventForInputType(input);\n\n function eventHandler() {\n
observable.setValue(input[property]);\n observable.discardChanges();\n
(postEventFn || noop)(input);\n Platform.performMicrotaskCheckpoint()
;\n }\n input.addEventListener(eventType, eventHandler);\n\n return {\n
close: function() {\n input.removeEventListener(eventType, eventHan
dler);\n observable.close();\n },\n\n observable_: observable\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 // have 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
implementation is based upon the HTML spec definition of a\n // \"radio button
group\":\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/nu
mber-state.html#radio-button-group\n //\n function getAssociatedRadioButtons(e
lement) {\n if (element.form) {\n return filter(element.form.elements, f
unction(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 (
!treeScope)\n return [];\n var radios = treeScope.querySelectorAll(\
n 'input[type=\"radio\"][name=\"' + element.name + '\"]');\n retur
n 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
associated radio buttons and update their\n // check binding manually.\n
if (input.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAs
sociatedRadioButtons(input).forEach(function(radio) {\n var checkedBindin
g = radio.bindings_.checked;\n if (checkedBinding) {\n // Set th
e value directly to avoid an infinite call stack.\n checkedBinding.obse
rvable_.setValue(false);\n }\n });\n }\n }\n\n HTMLInputElement
.prototype.bind = function(name, value, oneTime) {\n if (name !== 'value' &&
name !== 'checked')\n return HTMLElement.prototype.bind.call(this, name, va
lue, oneTime);\n\n this.removeAttribute(name);\n var sanitizeFn = name ==
'checked' ? booleanSanitize : sanitizeValue;\n var postEventFn = name == 'che
cked' ? checkedPostEvent : noop;\n\n if (oneTime)\n return updateInput(t
his, name, value, sanitizeFn);\n\n\n var observable = value;\n var binding
= bindInputEvent(this, name, observable, postEventFn);\n updateInput(this, n
ame,\n observable.open(inputBinding(this, name, sanitizeFn)),\n
sanitizeFn);\n\n // Checkboxes may need to update bindings of o
ther checkboxes.\n return updateBindings(this, name, binding);\n }\n\n HTML
TextAreaElement.prototype.bind = function(name, value, oneTime) {\n if (name
!== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, on
eTime);\n\n this.removeAttribute('value');\n\n if (oneTime)\n return
updateInput(this, 'value', value);\n\n var observable = value;\n var bindi
ng = bindInputEvent(this, 'value', observable);\n updateInput(this, 'value',\
n observable.open(inputBinding(this, 'value', sanitizeValue)));\n
return maybeUpdateBindings(this, name, binding);\n }\n\n function updateOp
tion(option, value) {\n var parentNode = option.parentNode;;\n var select;
\n var selectBinding;\n var oldValue;\n if (parentNode instanceof HTMLS
electElement &&\n parentNode.bindings_ &&\n parentNode.bindings_.v
alue) {\n select = parentNode;\n selectBinding = select.bindings_.valu
e;\n oldValue = select.value;\n }\n\n option.value = sanitizeValue(va
lue);\n\n if (select && select.value != oldValue) {\n selectBinding.obse
rvable_.setValue(select.value);\n selectBinding.observable_.discardChanges(
);\n Platform.performMicrotaskCheckpoint();\n }\n }\n\n function optio
nBinding(option) {\n return function(value) {\n updateOption(option, val
ue);\n }\n }\n\n HTMLOptionElement.prototype.bind = function(name, value, o
neTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.ca
ll(this, name, value, oneTime);\n\n this.removeAttribute('value');\n\n if
(oneTime)\n return updateOption(this, value);\n\n var observable = value
;\n var binding = bindInputEvent(this, 'value', observable);\n updateOptio
n(this, observable.open(optionBinding(this)));\n return maybeUpdateBindings(t
his, name, binding);\n }\n\n HTMLSelectElement.prototype.bind = function(name,
value, oneTime) {\n if (name === 'selectedindex')\n name = 'selectedInd
ex';\n\n if (name !== 'selectedIndex' && name !== 'value')\n return HTML
Element.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttri
bute(name);\n\n if (oneTime)\n return updateInput(this, name, value);\n\
n var observable = value;\n var binding = bindInputEvent(this, name, obser
vable);\n updateInput(this, name,\n observable.open(inputBindi
ng(this, name)));\n\n // Option update events may need to access select bindi
ngs.\n return updateBindings(this, name, binding);\n }\n})(this);\n", | 170 "// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n//
This code may only be used under the BSD style license found at http://polymer.
github.io/LICENSE.txt\n// The complete set of authors may be found at http://pol
ymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google as part
of the polymer project is also\n// subject to an additional IP rights grant fou
nd at http://polymer.github.io/PATENTS.txt\n\n(function(global) {\n 'use strict
';\n\n var filter = Array.prototype.filter.call.bind(Array.prototype.filter);\n
\n function getTreeScope(node) {\n while (node.parentNode) {\n node = n
ode.parentNode;\n }\n\n return typeof node.getElementById === 'function' ?
node : null;\n }\n\n Node.prototype.bind = function(name, observable) {\n
console.error('Unhandled binding to Node: ', this, name, observable);\n };\n\n
Node.prototype.bindFinished = function() {};\n\n function updateBindings(node,
name, binding) {\n var bindings = node.bindings_;\n if (!bindings)\n
bindings = node.bindings_ = {};\n\n if (bindings[name])\n binding[name]
.close();\n\n return bindings[name] = binding;\n }\n\n function returnBindi
ng(node, name, binding) {\n return binding;\n }\n\n function sanitizeValue(
value) {\n return value == null ? '' : value;\n }\n\n function updateText(n
ode, value) {\n node.data = sanitizeValue(value);\n }\n\n function textBind
ing(node) {\n return function(value) {\n return updateText(node, value);
\n };\n }\n\n var maybeUpdateBindings = returnBinding;\n\n Object.definePr
operty(Platform, 'enableBindingsReflection', {\n get: function() {\n ret
urn maybeUpdateBindings === updateBindings;\n },\n set: function(enable) {
\n maybeUpdateBindings = enable ? updateBindings : returnBinding;\n re
turn enable;\n },\n configurable: true\n });\n\n Text.prototype.bind = f
unction(name, value, oneTime) {\n if (name !== 'textContent')\n return N
ode.prototype.bind.call(this, name, value, oneTime);\n\n if (oneTime)\n
return updateText(this, value);\n\n var observable = value;\n updateText(t
his, observable.open(textBinding(this)));\n return maybeUpdateBindings(this,
name, observable);\n }\n\n function updateAttribute(el, name, conditional, val
ue) {\n if (conditional) {\n if (value)\n el.setAttribute(name, '
');\n else\n el.removeAttribute(name);\n return;\n }\n\n
el.setAttribute(name, sanitizeValue(value));\n }\n\n function attributeBinding
(el, name, conditional) {\n return function(value) {\n updateAttribute(e
l, name, conditional, value);\n };\n }\n\n Element.prototype.bind = functio
n(name, value, oneTime) {\n var conditional = name[name.length - 1] == '?';\n
if (conditional) {\n this.removeAttribute(name);\n name = name.sli
ce(0, -1);\n }\n\n if (oneTime)\n return updateAttribute(this, name,
conditional, value);\n\n\n var observable = value;\n updateAttribute(this,
name, conditional,\n observable.open(attributeBinding(this, name, condit
ional)));\n\n return maybeUpdateBindings(this, name, observable);\n };\n\n
var checkboxEventType;\n (function() {\n // Attempt to feature-detect which
event (change or click) is fired first\n // for checkboxes.\n var div = do
cument.createElement('div');\n var checkbox = div.appendChild(document.create
Element('input'));\n checkbox.setAttribute('type', 'checkbox');\n var firs
t;\n var count = 0;\n checkbox.addEventListener('click', function(e) {\n
count++;\n first = first || 'click';\n });\n checkbox.addEventLis
tener('change', function() {\n count++;\n first = first || 'change';\n
});\n\n var event = document.createEvent('MouseEvent');\n event.initMo
useEvent(\"click\", true, true, window, 0, 0, 0, 0, 0, false,\n false, fa
lse, false, 0, null);\n checkbox.dispatchEvent(event);\n // WebKit/Blink d
on't fire the change event if the element is outside the\n // document, so as
sume 'change' for that case.\n checkboxEventType = count == 1 ? 'change' : fi
rst;\n })();\n\n function getEventForInputType(element) {\n switch (element
.type) {\n case 'checkbox':\n return checkboxEventType;\n case
'radio':\n case 'select-multiple':\n case 'select-one':\n retur
n 'change';\n case 'range':\n if (/Trident|MSIE/.test(navigator.user
Agent))\n return 'change';\n default:\n return 'input';\n
}\n }\n\n function updateInput(input, property, value, santizeFn) {\n inp
ut[property] = (santizeFn || sanitizeValue)(value);\n }\n\n function inputBind
ing(input, property, santizeFn) {\n return function(value) {\n return up
dateInput(input, property, value, santizeFn);\n }\n }\n\n function noop() {
}\n\n function bindInputEvent(input, property, observable, postEventFn) {\n
var eventType = getEventForInputType(input);\n\n function eventHandler() {\n
observable.setValue(input[property]);\n observable.discardChanges();\n
(postEventFn || noop)(input);\n Platform.performMicrotaskCheckpoint()
;\n }\n input.addEventListener(eventType, eventHandler);\n\n return {\n
close: function() {\n input.removeEventListener(eventType, eventHan
dler);\n observable.close();\n },\n\n observable_: observable\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 // have 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
implementation is based upon the HTML spec definition of a\n // \"radio button
group\":\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/nu
mber-state.html#radio-button-group\n //\n function getAssociatedRadioButtons(e
lement) {\n if (element.form) {\n return filter(element.form.elements, f
unction(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 (
!treeScope)\n return [];\n var radios = treeScope.querySelectorAll(\
n 'input[type=\"radio\"][name=\"' + element.name + '\"]');\n retur
n 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
associated radio buttons and update their\n // check binding manually.\n
if (input.tagName === 'INPUT' &&\n input.type === 'radio') {\n getAs
sociatedRadioButtons(input).forEach(function(radio) {\n var checkedBindin
g = radio.bindings_.checked;\n if (checkedBinding) {\n // Set th
e value directly to avoid an infinite call stack.\n checkedBinding.obse
rvable_.setValue(false);\n }\n });\n }\n }\n\n HTMLInputElement
.prototype.bind = function(name, value, oneTime) {\n if (name !== 'value' &&
name !== 'checked')\n return HTMLElement.prototype.bind.call(this, name, va
lue, oneTime);\n\n this.removeAttribute(name);\n var sanitizeFn = name ==
'checked' ? booleanSanitize : sanitizeValue;\n var postEventFn = name == 'che
cked' ? checkedPostEvent : noop;\n\n if (oneTime)\n return updateInput(t
his, name, value, sanitizeFn);\n\n\n var observable = value;\n var binding
= bindInputEvent(this, name, observable, postEventFn);\n updateInput(this, n
ame,\n observable.open(inputBinding(this, name, sanitizeFn)),\n
sanitizeFn);\n\n // Checkboxes may need to update bindings of o
ther checkboxes.\n return updateBindings(this, name, binding);\n }\n\n HTML
TextAreaElement.prototype.bind = function(name, value, oneTime) {\n if (name
!== 'value')\n return HTMLElement.prototype.bind.call(this, name, value, on
eTime);\n\n this.removeAttribute('value');\n\n if (oneTime)\n return
updateInput(this, 'value', value);\n\n var observable = value;\n var bindi
ng = bindInputEvent(this, 'value', observable);\n updateInput(this, 'value',\
n observable.open(inputBinding(this, 'value', sanitizeValue)));\n
return maybeUpdateBindings(this, name, binding);\n }\n\n function updateOp
tion(option, value) {\n var parentNode = option.parentNode;;\n var select;
\n var selectBinding;\n var oldValue;\n if (parentNode instanceof HTMLS
electElement &&\n parentNode.bindings_ &&\n parentNode.bindings_.v
alue) {\n select = parentNode;\n selectBinding = select.bindings_.valu
e;\n oldValue = select.value;\n }\n\n option.value = sanitizeValue(va
lue);\n\n if (select && select.value != oldValue) {\n selectBinding.obse
rvable_.setValue(select.value);\n selectBinding.observable_.discardChanges(
);\n Platform.performMicrotaskCheckpoint();\n }\n }\n\n function optio
nBinding(option) {\n return function(value) {\n updateOption(option, val
ue);\n }\n }\n\n HTMLOptionElement.prototype.bind = function(name, value, o
neTime) {\n if (name !== 'value')\n return HTMLElement.prototype.bind.ca
ll(this, name, value, oneTime);\n\n this.removeAttribute('value');\n\n if
(oneTime)\n return updateOption(this, value);\n\n var observable = value
;\n var binding = bindInputEvent(this, 'value', observable);\n updateOptio
n(this, observable.open(optionBinding(this)));\n return maybeUpdateBindings(t
his, name, binding);\n }\n\n HTMLSelectElement.prototype.bind = function(name,
value, oneTime) {\n if (name === 'selectedindex')\n name = 'selectedInd
ex';\n\n if (name !== 'selectedIndex' && name !== 'value')\n return HTML
Element.prototype.bind.call(this, name, value, oneTime);\n\n this.removeAttri
bute(name);\n\n if (oneTime)\n return updateInput(this, name, value);\n\
n var observable = value;\n var binding = bindInputEvent(this, name, obser
vable);\n updateInput(this, name,\n observable.open(inputBindi
ng(this, name)));\n\n // Option update events may need to access select bindi
ngs.\n return updateBindings(this, name, binding);\n }\n})(this);\n", |
169 "// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n//
This code may only be used under the BSD style license found at http://polymer.
github.io/LICENSE.txt\n// The complete set of authors may be found at http://pol
ymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google as part
of the polymer project is also\n// subject to an additional IP rights grant fou
nd at http://polymer.github.io/PATENTS.txt\n\n(function(global) {\n 'use strict
';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertion fail
ed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.
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 function se
archRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n var sele
ctor = '#' + id;\n while (!ref) {\n node = getFragmentRoot(node);\n\n
if (node.protoContent_)\n ref = node.protoContent_.querySelector(selec
tor);\n else if (node.getElementById)\n ref = node.getElementById(id
);\n\n if (ref || !node.templateCreator_)\n break\n\n node = no
de.templateCreator_;\n }\n\n return ref;\n }\n\n function getInstanceRoo
t(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 = global.
Map;\n } else {\n Map = function() {\n this.keys = [];\n this.valu
es = [];\n };\n\n Map.prototype = {\n set: function(key, value) {\n
var index = this.keys.indexOf(key);\n if (index < 0) {\n t
his.keys.push(key);\n this.values.push(value);\n } else {\n
this.values[index] = value;\n }\n },\n\n get: function(key
) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n
return;\n\n return this.values[index];\n },\n\n delete: fun
ction(key, value) {\n var index = this.keys.indexOf(key);\n if (in
dex < 0)\n return false;\n\n this.keys.splice(index, 1);\n
this.values.splice(index, 1);\n return true;\n },\n\n forEach
: 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 literal
s with\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__' i
n {}) ?\n function(obj) { return obj; } :\n function(obj) {\n v
ar proto = obj.__proto__;\n if (!proto)\n return obj;\n v
ar newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).fo
rEach(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n }
);\n return newObject;\n };\n\n // IE does not support have Documen
t.prototype.contains.\n if (typeof document.contains != 'function') {\n Docu
ment.prototype.contains = function(node) {\n if (node === this || node.pare
ntNode === this)\n return true;\n return this.documentElement.contai
ns(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repeat';\n var I
F = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\n '
repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semanticTempla
teElements = {\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 if (h
asTemplateElement) {\n // TODO(rafaelw): Remove when fix for\n // https://
codereview.chromium.org/164803002/\n // makes it to Chrome release.\n (fun
ction() {\n var t = document.createElement('template');\n var d = t.co
ntent.ownerDocument;\n var html = d.appendChild(d.createElement('html'));\n
var head = html.appendChild(d.createElement('head'));\n var base = d.
createElement('base');\n base.href = document.baseURI;\n head.appendCh
ild(base);\n })();\n }\n\n var allTemplatesSelectors = 'template, ' +\n
Object.keys(semanticTemplateElements).map(function(tagName) {\n return
tagName.toLowerCase() + '[template]';\n }).join(', ');\n\n function isSVGT
emplate(el) {\n return el.tagName == 'template' &&\n el.namespaceUR
I == 'http://www.w3.org/2000/svg';\n }\n\n function isHTMLTemplate(el) {\n
return el.tagName == 'TEMPLATE' &&\n el.namespaceURI == 'http://www.w3
.org/1999/xhtml';\n }\n\n function isAttributeTemplate(el) {\n return Boole
an(semanticTemplateElements[el.tagName] &&\n el.hasAttribute('
template'));\n }\n\n function isTemplate(el) {\n if (el.isTemplate_ === und
efined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttributeTemplate(
el);\n\n return el.isTemplate_;\n }\n\n // FIXME: Observe templates being a
dded/removed from documents\n // FIXME: Expose imperative API to decorate and o
bserve templates in\n // \"disconnected tress\" (e.g. ShadowRoot)\n document.a
ddEventListener('DOMContentLoaded', function(e) {\n bootstrapTemplatesRecursi
velyFrom(document);\n // FIXME: Is this needed? Seems like it shouldn't be.\n
Platform.performMicrotaskCheckpoint();\n }, false);\n\n function forAllTem
platesFrom(node, fn) {\n var subTemplates = node.querySelectorAll(allTemplate
sSelectors);\n\n if (isTemplate(node))\n fn(node)\n forEach(subTempla
tes, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node) {\n func
tion bootstrap(template) {\n if (!HTMLTemplateElement.decorate(template))\n
bootstrapTemplatesRecursivelyFrom(template.content);\n }\n\n forAl
lTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTemplateElement) {\n /**\n
* This represents a <template> element.\n * @constructor\n * @exten
ds {HTMLElement}\n */\n global.HTMLTemplateElement = function() {\n
throw TypeError('Illegal constructor');\n };\n }\n\n var hasProto = '__prot
o__' in {};\n\n function mixin(to, from) {\n Object.getOwnPropertyNames(from
).forEach(function(name) {\n Object.defineProperty(to, name,\n
Object.getOwnPropertyDescriptor(from, name));\n });\n }\n\n
// http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#df
n-template-contents-owner\n function getOrCreateTemplateContentsOwner(template)
{\n var doc = template.ownerDocument\n if (!doc.defaultView)\n retur
n doc;\n var d = doc.templateContentsOwner_;\n if (!d) {\n // TODO(ar
v): This should either be a Document or HTMLDocument depending\n // on doc.
\n d = doc.implementation.createHTMLDocument('');\n while (d.lastChild
) {\n d.removeChild(d.lastChild);\n }\n doc.templateContentsOwn
er_ = d;\n }\n return d;\n }\n\n function getTemplateStagingDocument(tem
plate) {\n if (!template.stagingDocument_) {\n var owner = template.owne
rDocument;\n if (!owner.stagingDocument_) {\n owner.stagingDocument_
= owner.implementation.createHTMLDocument('');\n owner.stagingDocument_.
isStagingDocument = true;\n // TODO(rafaelw): Remove when fix for\n
// https://codereview.chromium.org/164803002/\n // makes it to Chrome r
elease.\n var base = owner.stagingDocument_.createElement('base');\n
base.href = document.baseURI;\n owner.stagingDocument_.head.appendChil
d(base);\n\n owner.stagingDocument_.stagingDocument_ = owner.stagingDocum
ent_;\n }\n\n template.stagingDocument_ = owner.stagingDocument_;\n
}\n\n return template.stagingDocument_;\n }\n\n // For non-template browse
rs, the parser will disallow <template> in certain\n // locations, so we allow
\"attribute templates\" which combine the template\n // element with the top-le
vel container node of the content, e.g.\n //\n // <tr template repeat=\"{{ f
oo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n // <tem
plate repeat=\"{{ foo }}\">\n // + #document-fragment\n // + <tr class=\
"bar\">\n // + <td>Bar</td>\n //\n function extractTemplateFromAttribut
eTemplate(el) {\n var template = el.ownerDocument.createElement('template');\
n el.parentNode.insertBefore(template, el);\n\n var attribs = el.attribute
s;\n var count = attribs.length;\n while (count-- > 0) {\n var attrib
= attribs[count];\n if (templateAttributeDirectives[attrib.name]) {\n
if (attrib.name !== 'template')\n template.setAttribute(attrib.name,
attrib.value);\n el.removeAttribute(attrib.name);\n }\n }\n\n
return template;\n }\n\n function extractTemplateFromSVGTemplate(el) {\n v
ar template = el.ownerDocument.createElement('template');\n el.parentNode.ins
ertBefore(template, el);\n\n var attribs = el.attributes;\n var count = at
tribs.length;\n while (count-- > 0) {\n var attrib = attribs[count];\n
template.setAttribute(attrib.name, attrib.value);\n el.removeAttribute(
attrib.name);\n }\n\n el.parentNode.removeChild(el);\n return template;
\n }\n\n function liftNonNativeTemplateChildrenIntoContent(template, el, useRo
ot) {\n var content = template.content;\n if (useRoot) {\n content.ap
pendChild(el);\n return;\n }\n\n var child;\n while (child = el.fi
rstChild) {\n content.appendChild(child);\n }\n }\n\n var templateObse
rver;\n if (typeof MutationObserver == 'function') {\n templateObserver = ne
w MutationObserver(function(records) {\n for (var i = 0; i < records.length
; i++) {\n records[i].target.refChanged_();\n }\n });\n }\n\n /
**\n * Ensures proper API and content model for template elements.\n * @para
m {HTMLTemplateElement} opt_instanceRef The template element which\n * |el
| template element will return as the value of its ref(), and whose\n * co
ntent will be used as source when createInstance() is invoked.\n */\n HTMLTem
plateElement.decorate = function(el, opt_instanceRef) {\n if (el.templateIsDe
corated_)\n return false;\n\n var templateElement = el;\n templateEle
ment.templateIsDecorated_ = true;\n\n var isNativeHTMLTemplate = isHTMLTempla
te(templateElement) &&\n hasTemplateElement;\n
var bootstrapContents = isNativeHTMLTemplate;\n var liftContents = !isNativeH
TMLTemplate;\n var liftRoot = false;\n\n if (!isNativeHTMLTemplate) {\n
if (isAttributeTemplate(templateElement)) {\n assert(!opt_instanceRef)
;\n templateElement = extractTemplateFromAttributeTemplate(el);\n
templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = has
TemplateElement;\n liftRoot = true;\n } else if (isSVGTemplate(templ
ateElement)) {\n templateElement = extractTemplateFromSVGTemplate(el);\n
templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplat
e = hasTemplateElement;\n }\n }\n\n if (!isNativeHTMLTemplate) {\n
fixTemplateElementPrototype(templateElement);\n var doc = getOrCreateTem
plateContentsOwner(templateElement);\n templateElement.content_ = doc.creat
eDocumentFragment();\n }\n\n if (opt_instanceRef) {\n // template is
contained within an instance, its direct content must be\n // empty\n
templateElement.instanceRef_ = opt_instanceRef;\n } else if (liftContents) {\
n liftNonNativeTemplateChildrenIntoContent(templateElement,\n
el,\n
liftRoot);\n } else if (bootstrapContents) {\n bootstrapTemplatesRe
cursivelyFrom(templateElement.content);\n }\n\n return true;\n };\n\n //
TODO(rafaelw): This used to decorate recursively all templates from a given\n
// node. This happens by default on 'DOMContentLoaded', but may be needed\n //
in subtrees not descendent from document (e.g. ShadowRoot).\n // Review whether
this is the right public API.\n HTMLTemplateElement.bootstrap = bootstrapTempl
atesRecursivelyFrom;\n\n var htmlElement = global.HTMLUnknownElement || HTMLEle
ment;\n\n var contentDescriptor = {\n get: function() {\n return this.c
ontent_;\n },\n enumerable: true,\n configurable: true\n };\n\n if (!
hasTemplateElement) {\n // Gecko is more picky with the prototype than WebKit
. Make sure to use the\n // same prototype as created in the constructor.\n
HTMLTemplateElement.prototype = Object.create(htmlElement.prototype);\n\n O
bject.defineProperty(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 ensureS
etModelScheduled(template) {\n if (!template.setModelFn_) {\n template.s
etModelFn_ = function() {\n template.setModelFnScheduled_ = false;\n
var map = getBindings(template,\n template.delegate_ && template.d
elegate_.prepareBinding);\n processBindings(template, map, template.model
_);\n };\n }\n\n if (!template.setModelFnScheduled_) {\n templat
e.setModelFnScheduled_ = true;\n Observer.runEOM_(template.setModelFn_);\n
}\n }\n\n mixin(HTMLTemplateElement.prototype, {\n bind: function(name,
value, oneTime) {\n if (name != 'ref')\n return Element.prototype.bi
nd.call(this, name, value, oneTime);\n\n var self = this;\n var ref =
oneTime ? value : value.open(function(ref) {\n self.setAttribute('ref', r
ef);\n self.refChanged_();\n });\n\n this.setAttribute('ref', r
ef);\n this.refChanged_();\n if (oneTime)\n return;\n\n if
(!this.bindings_) {\n this.bindings_ = { ref: value };\n } else {\n
this.bindings_.ref = value;\n }\n\n return value;\n },\n\n
processBindingDirectives_: function(directives) {\n if (this.iterator_)\
n this.iterator_.closeDeps();\n\n if (!directives.if && !directives.
bind && !directives.repeat) {\n if (this.iterator_) {\n this.ite
rator_.close();\n this.iterator_ = undefined;\n }\n\n ret
urn;\n }\n\n if (!this.iterator_) {\n this.iterator_ = new Temp
lateIterator(this);\n }\n\n this.iterator_.updateDependencies(directiv
es, this.model_);\n\n if (templateObserver) {\n templateObserver.obs
erve(this, { attributes: true,\n attribu
teFilter: ['ref'] });\n }\n\n return this.iterator_;\n },\n\n cr
eateInstance: function(model, bindingDelegate, delegate_) {\n if (bindingDe
legate)\n delegate_ = this.newDelegate_(bindingDelegate);\n else if
(!delegate_)\n delegate_ = this.delegate_;\n\n if (!this.refContent_
)\n this.refContent_ = this.ref_.content;\n var content = this.refCo
ntent_;\n if (content.firstChild === null)\n return emptyInstance;\n
\n var map = getInstanceBindingMap(content, delegate_);\n var stagingD
ocument = getTemplateStagingDocument(this);\n var instance = stagingDocumen
t.createDocumentFragment();\n instance.templateCreator_ = this;\n inst
ance.protoContent_ = content;\n instance.bindings_ = [];\n instance.te
rminator_ = null;\n var instanceRecord = instance.templateInstance_ = {\n
firstNode: null,\n lastNode: null,\n model: model\n };\
n\n var i = 0;\n var collectTerminator = false;\n for (var child
= content.firstChild; child; child = child.nextSibling) {\n // The termin
ator of the instance is the clone of the last child of the\n // content.
If the last child is an active template, it may produce\n // instances as
a result of production, so simply collecting the last\n // child of the
instance after it has finished producing may be wrong.\n if (child.nextSi
bling === null)\n collectTerminator = true;\n\n var clone = clon
eAndBindInstance(child, instance, stagingDocument,\n
map.children[i++],\n model,
\n delegate_,\n
instance.bindings_);\n clone.templateInstance_ = instance
Record;\n if (collectTerminator)\n instance.terminator_ = clone;
\n }\n\n instanceRecord.firstNode = instance.firstChild;\n instan
ceRecord.lastNode = instance.lastChild;\n instance.templateCreator_ = undef
ined;\n instance.protoContent_ = undefined;\n return instance;\n },
\n\n get model() {\n return 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 refChanged_: function() {\n if (!this.iterator_ || this.refC
ontent_ === this.ref_.content)\n return;\n\n this.refContent_ = unde
fined;\n this.iterator_.valueChanged();\n this.iterator_.updateIterate
dValue();\n },\n\n clear: function() {\n this.model_ = undefined;\n
this.delegate_ = undefined;\n if (this.bindings_ && this.bindings_.ref)
\n this.bindings_.ref.close()\n this.refContent_ = undefined;\n
if (!this.iterator_)\n return;\n this.iterator_.valueChanged();\n
this.iterator_.close()\n this.iterator_ = undefined;\n },\n\n set
Delegate_: function(delegate) {\n this.delegate_ = delegate;\n this.bi
ndingMap_ = undefined;\n if (this.iterator_) {\n this.iterator_.inst
ancePositionChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = u
ndefined;\n }\n },\n\n newDelegate_: function(bindingDelegate) {\n
if (!bindingDelegate)\n return;\n\n function delegateFn(name) {\n
var fn = bindingDelegate && bindingDelegate[name];\n if (typeof f
n != 'function')\n return;\n\n return function() {\n re
turn fn.apply(bindingDelegate, arguments);\n };\n }\n\n return
{\n bindingMaps: {},\n raw: bindingDelegate,\n prepareBindi
ng: delegateFn('prepareBinding'),\n prepareInstanceModel: delegateFn('pre
pareInstanceModel'),\n prepareInstancePositionChanged:\n deleg
ateFn('prepareInstancePositionChanged')\n };\n },\n\n set bindingDele
gate(bindingDelegate) {\n if (this.delegate_) {\n throw Error('Templ
ate must be cleared before a new bindingDelegate ' +\n 'can b
e assigned');\n }\n\n this.setDelegate_(this.newDelegate_(bindingDeleg
ate));\n },\n\n get ref_() {\n var ref = searchRefId(this, this.getAt
tribute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n\n if
(!ref)\n return this;\n\n var nextRef = ref.ref_;\n return next
Ref ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefined if there
are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if t
here is at least one mustache.\n function parseMustaches(s, name, node, prepare
BindingFn) {\n if (!s || !s.length)\n return;\n\n var tokens;\n va
r 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.indexOf('[[', lastInde
x);\n var oneTime = false;\n var terminator = '}}';\n\n if (oneTi
meStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startIndex)) {\n
startIndex = oneTimeStart;\n oneTime = true;\n terminator = '
]]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, st
artIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n ret
urn;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n break;\n
}\n\n tokens = tokens || [];\n tokens.push(s.slice(lastIndex, startInd
ex)); // TEXT\n var pathString = s.slice(startIndex + 2, endIndex).trim();\
n tokens.push(oneTime); // ONE_TIME?\n onlyOneTime = onlyOneTime && on
eTime;\n var delegateFn = prepareBindingFn &&\n prepa
reBindingFn(pathString, name, node);\n // Don't try to parse the expression
if there's a prepareBinding function\n if (delegateFn == null) {\n
tokens.push(Path.get(pathString)); // PATH\n } else {\n tokens.push(
null);\n }\n tokens.push(delegateFn); // DELEGATE_FN\n lastIndex
= endIndex + 2;\n }\n\n if (lastIndex === length)\n tokens.push('');
// TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.isSimplePath
= tokens.hasOnePath &&\n tokens[0] == '' &&\n
tokens[4] == '';\n tokens.onlyOneTime = onlyOneTime;\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 = tokens.hasOne
Path ? values : values[(i - 1) / 4];\n if (value !== undefined)\n
newValue += value;\n newValue += tokens[i + 3];\n }\n\n retur
n newValue;\n }\n\n return tokens;\n };\n\n function processOneTimeBindi
ng(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n var delegat
eFn = tokens[3];\n var value = delegateFn ? delegateFn(model, node, true) :
\n tokens[2].getValueFrom(model);\n return to
kens.isSimplePath ? value : tokens.combinator(value);\n }\n\n var values =
[];\n for (var i = 1; i < tokens.length; i += 4) {\n var delegateFn = t
okens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(model, node)
:\n tokens[i + 1].getValueFrom(model);\n }\n\n return tokens.comb
inator(values);\n }\n\n function processSinglePathBinding(name, tokens, node,
model) {\n var delegateFn = tokens[3];\n var observer = delegateFn ? deleg
ateFn(model, node, false) :\n new PathObserver(model, tokens[2]);\n\n
return tokens.isSimplePath ? observer :\n new ObserverTransform(observer,
tokens.combinator);\n }\n\n function processBinding(name, tokens, node, model
) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding(name, token
s, node, model);\n\n if (tokens.hasOnePath)\n return processSinglePathBi
nding(name, tokens, node, model);\n\n var observer = new CompoundObserver();\
n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTime = tokens[
i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {\n v
ar value = delegateFn(model, node, oneTime);\n if (oneTime)\n ob
server.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(observer, toke
ns.combinator);\n }\n\n function processBindings(node, bindings, model, instan
ceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n var nam
e = bindings[i]\n var tokens = bindings[i + 1];\n var value = processB
inding(name, tokens, node, model);\n var binding = node.bind(name, value, t
okens.onlyOneTime);\n if (binding && instanceBindings)\n instanceBin
dings.push(binding);\n }\n\n node.bindFinished();\n if (!bindings.isTem
plate)\n return;\n\n node.model_ = model;\n var iter = node.processBi
ndingDirectives_(bindings);\n if (instanceBindings && iter)\n instanceBi
ndings.push(iter);\n }\n\n function parseWithDefault(el, name, prepareBindingF
n) {\n var v = el.getAttribute(name);\n return parseMustaches(v == '' ? '{
{}}' : v, name, el, prepareBindingFn);\n }\n\n function parseAttributeBindings
(element, prepareBindingFn) {\n assert(element);\n\n var bindings = [];\n
var ifFound = false;\n var bindFound = false;\n\n for (var i = 0; i < e
lement.attributes.length; i++) {\n var attr = element.attributes[i];\n
var name = attr.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> w
here certain attributes might trigger side-effects -- and\n // for IE which
sanitizes certain attributes, disallowing mustache\n // replacements in th
eir text.\n while (name[0] === '_') {\n name = name.substring(1);\n
}\n\n if (isTemplate(element) &&\n (name === IF || name === B
IND || name === REPEAT)) {\n continue;\n }\n\n var tokens = par
seMustaches(value, name, element,\n prepareBind
ingFn);\n if (!tokens)\n continue;\n\n bindings.push(name, toke
ns);\n }\n\n if (isTemplate(element)) {\n bindings.isTemplate = true;
\n bindings.if = parseWithDefault(element, IF, prepareBindingFn);\n bi
ndings.bind = parseWithDefault(element, BIND, prepareBindingFn);\n bindings
.repeat = parseWithDefault(element, REPEAT, prepareBindingFn);\n\n if (bind
ings.if && !bindings.bind && !bindings.repeat)\n bindings.bind = parseMus
taches('{{}}', BIND, element, prepareBindingFn);\n }\n\n return bindings;\
n }\n\n function getBindings(node, prepareBindingFn) {\n if (node.nodeType
=== Node.ELEMENT_NODE)\n return parseAttributeBindings(node, prepareBinding
Fn);\n\n if (node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMus
taches(node.data, 'textContent', node,\n prepar
eBindingFn);\n if (tokens)\n return ['textContent', tokens];\n }\
n\n return [];\n }\n\n function cloneAndBindInstance(node, parent, stagingD
ocument, bindings, model,\n delegate,\n
instanceBindings,\n instanc
eRecord) {\n var clone = parent.appendChild(stagingDocument.importNode(node,
false));\n\n var i = 0;\n for (var child = node.firstChild; child; child =
child.nextSibling) {\n cloneAndBindInstance(child, clone, stagingDocument,
\n bindings.children[i++],\n
model,\n delegate,\n in
stanceBindings);\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateEle
ment.decorate(clone, node);\n if (delegate)\n clone.setDelegate_(del
egate);\n }\n\n processBindings(clone, bindings, model, instanceBindings);
\n return clone;\n }\n\n function createInstanceBindingMap(node, prepareBin
dingFn) {\n var map = getBindings(node, prepareBindingFn);\n map.children
= {};\n var index = 0;\n for (var child = node.firstChild; child; child =
child.nextSibling) {\n map.children[index++] = createInstanceBindingMap(chi
ld, prepareBindingFn);\n }\n\n return map;\n }\n\n var contentUidCounter
= 1;\n\n // TODO(rafaelw): Setup a MutationObserver on content which clears th
e id\n // so that bindingMaps regenerate when the template.content changes.\n
function getContentUid(content) {\n var id = content.id_;\n if (!id)\n
id = content.id_ = contentUidCounter++;\n return id;\n }\n\n // Each dele
gate is associated with a set of bindingMaps, one for each\n // content which m
ay be used by a template. The intent is that each binding\n // delegate gets th
e opportunity to prepare the instance (via the prepare*\n // delegate calls) on
ce across all uses.\n // TODO(rafaelw): Separate out the parse map from the bin
ding map. In the\n // current implementation, if two delegates need a binding m
ap for the same\n // content, the second will have to reparse.\n function getI
nstanceBindingMap(content, delegate_) {\n var contentId = getContentUid(conte
nt);\n if (delegate_) {\n var map = delegate_.bindingMaps[contentId];\n
if (!map) {\n map = delegate_.bindingMaps[contentId] =\n
createInstanceBindingMap(content, delegate_.prepareBinding) || [];\n }\n
return map;\n }\n\n var map = content.bindingMap_;\n if (!map) {\n
map = content.bindingMap_ =\n createInstanceBindingMap(content, und
efined) || [];\n }\n return map;\n }\n\n Object.defineProperty(Node.prot
otype, 'templateInstance', {\n get: function() {\n var instance = this.t
emplateInstance_;\n return instance ? instance :\n (this.parentNod
e ? this.parentNode.templateInstance : undefined);\n }\n });\n\n var emptyI
nstance = document.createDocumentFragment();\n emptyInstance.bindings_ = [];\n
emptyInstance.terminator_ = null;\n\n function TemplateIterator(templateElemen
t) {\n this.closed = false;\n this.templateElement_ = templateElement;\n
this.instances = [];\n this.deps = undefined;\n this.iteratedValue = [];
\n this.presentValue = undefined;\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.val
ue.close();\n }\n },\n\n updateDependencies: function(directives, mod
el) {\n this.closeDeps();\n\n var deps = this.deps = {};\n var te
mplate = this.templateElement_;\n\n if (directives.if) {\n deps.hasI
f = true;\n deps.ifOneTime = directives.if.onlyOneTime;\n deps.ifV
alue = processBinding(IF, directives.if, template, model);\n\n // oneTime
if & predicate is false. nothing else to do.\n if (deps.ifOneTime && !de
ps.ifValue) {\n this.updateIteratedValue();\n return;\n
}\n\n if (!deps.ifOneTime)\n deps.ifValue.open(this.updateItera
tedValue, this);\n }\n\n if (directives.repeat) {\n deps.repeat
= true;\n deps.oneTime = directives.repeat.onlyOneTime;\n deps.va
lue = processBinding(REPEAT, directives.repeat, template, model);\n } else
{\n deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneT
ime;\n deps.value = processBinding(BIND, directives.bind, template, model
);\n }\n\n if (!deps.oneTime)\n deps.value.open(this.updateIter
atedValue, this);\n\n this.updateIteratedValue();\n },\n\n updateIter
atedValue: function() {\n if (this.deps.hasIf) {\n var ifValue = thi
s.deps.ifValue;\n if (!this.deps.ifOneTime)\n ifValue = ifValue.
discardChanges();\n if (!ifValue) {\n this.valueChanged();\n
return;\n }\n }\n\n var value = this.deps.value;\n i
f (!this.deps.oneTime)\n value = value.discardChanges();\n if (!this
.deps.repeat)\n value = [value];\n var observe = this.deps.repeat &&
\n !this.deps.oneTime &&\n Array.isArray(v
alue);\n this.valueChanged(value, observe);\n },\n\n valueChanged: fu
nction(value, observeValue) {\n if (!Array.isArray(value))\n value =
[];\n\n if (value === this.iteratedValue)\n return;\n\n this.u
nobserve();\n this.presentValue = value;\n if (observeValue) {\n
this.arrayObserver = new ArrayObserver(this.presentValue);\n this.array
Observer.open(this.handleSplices, this);\n }\n\n this.handleSplices(Ar
rayObserver.calculateSplices(this.presentValue,\n
this.iteratedValue));\n },\n\n getLastInstanceNod
e: function(index) {\n if (index == -1)\n return this.templateElemen
t_;\n var instance = this.instances[index];\n var terminator = instanc
e.terminator_;\n if (!terminator)\n return this.getLastInstanceNode(
index - 1);\n\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n
this.templateElement_ === terminator) {\n return terminator;\n }\n\
n var subtemplateIterator = terminator.iterator_;\n if (!subtemplateIt
erator)\n return terminator;\n\n return subtemplateIterator.getLastT
emplateNode();\n },\n\n getLastTemplateNode: function() {\n return th
is.getLastInstanceNode(this.instances.length - 1);\n },\n\n insertInstance
At: function(index, fragment) {\n var previousInstanceLast = this.getLastIn
stanceNode(index - 1);\n var parent = this.templateElement_.parentNode;\n
this.instances.splice(index, 0, fragment);\n\n parent.insertBefore(frag
ment, previousInstanceLast.nextSibling);\n },\n\n extractInstanceAt: funct
ion(index) {\n var previousInstanceLast = this.getLastInstanceNode(index -
1);\n var lastNode = this.getLastInstanceNode(index);\n var parent = t
his.templateElement_.parentNode;\n var instance = this.instances.splice(ind
ex, 1)[0];\n\n while (lastNode !== previousInstanceLast) {\n var nod
e = previousInstanceLast.nextSibling;\n if (node == lastNode)\n
lastNode = previousInstanceLast;\n\n instance.appendChild(parent.removeCh
ild(node));\n }\n\n return instance;\n },\n\n getDelegateFn: fun
ction(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.templateElement_;\n\n if (!template.parentNode) {\n this.clo
se();\n return;\n }\n\n ArrayObserver.applySplices(this.iterate
dValue, this.presentValue,\n splices);\n\n
var delegate = template.delegate_;\n if (this.instanceModelFn_ === undefine
d) {\n this.instanceModelFn_ =\n this.getDelegateFn(delegate &
& delegate.prepareInstanceModel);\n }\n\n if (this.instancePositionCha
ngedFn_ === undefined) {\n this.instancePositionChangedFn_ =\n
this.getDelegateFn(delegate &&\n delegate.prepare
InstancePositionChanged);\n }\n\n // Instance Removals\n var inst
anceCache = new Map;\n var removeDelta = 0;\n for (var i = 0; i < spli
ces.length; i++) {\n var splice = splices[i];\n var removed = spli
ce.removed;\n for (var j = 0; j < removed.length; j++) {\n var m
odel = removed[j];\n var instance = this.extractInstanceAt(splice.index
+ removeDelta);\n if (instance !== emptyInstance) {\n insta
nceCache.set(model, instance);\n }\n }\n\n removeDelta -=
splice.addedCount;\n }\n\n // Instance Insertions\n for (var i =
0; i < splices.length; i++) {\n var splice = splices[i];\n var ad
dIndex = splice.index;\n for (; addIndex < splice.index + splice.addedCou
nt; addIndex++) {\n var model = this.iteratedValue[addIndex];\n
var instance = instanceCache.get(model);\n if (instance) {\n
instanceCache.delete(model);\n } else {\n if (this.instan
ceModelFn_) {\n model = this.instanceModelFn_(model);\n
}\n\n if (model === undefined) {\n instance = emptyInsta
nce;\n } else {\n instance = template.createInstance(mod
el, undefined, delegate);\n }\n }\n\n this.insertIn
stanceAt(addIndex, instance);\n }\n }\n\n instanceCache.forEach
(function(instance) {\n this.closeInstanceBindings(instance);\n }, t
his);\n\n if (this.instancePositionChangedFn_)\n this.reportInstance
sMoved(splices);\n },\n\n reportInstanceMoved: function(index) {\n va
r instance = this.instances[index];\n if (instance === emptyInstance)\n
return;\n\n this.instancePositionChangedFn_(instance.templateInstance_,
index);\n },\n\n reportInstancesMoved: function(splices) {\n var ind
ex = 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 < splice.index + splice.addedCount) {\n
this.reportInstanceMoved(index);\n index++;\n }\n\n offs
et += splice.addedCount - splice.removed.length;\n }\n\n if (offset ==
0)\n return;\n\n var length = this.instances.length;\n while (
index < length) {\n this.reportInstanceMoved(index);\n index++;\n
}\n },\n\n closeInstanceBindings: function(instance) {\n var bin
dings = instance.bindings_;\n for (var i = 0; i < bindings.length; i++) {\n
bindings[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 this.unobserve();\n for (var i
= 0; i < this.instances.length; i++) {\n this.closeInstanceBindings(this
.instances[i]);\n }\n\n this.instances.length = 0;\n this.closeDe
ps();\n this.templateElement_.iterator_ = undefined;\n this.closed = t
rue;\n }\n };\n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTe
mplatesFrom_ = forAllTemplatesFrom;\n})(this);\n", | 171 "// Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n//
This code may only be used under the BSD style license found at http://polymer.
github.io/LICENSE.txt\n// The complete set of authors may be found at http://pol
ymer.github.io/AUTHORS.txt\n// The complete set of contributors may be found at
http://polymer.github.io/CONTRIBUTORS.txt\n// Code distributed by Google as part
of the polymer project is also\n// subject to an additional IP rights grant fou
nd at http://polymer.github.io/PATENTS.txt\n\n(function(global) {\n 'use strict
';\n\n function assert(v) {\n if (!v)\n throw new Error('Assertion fail
ed');\n }\n\n var forEach = Array.prototype.forEach.call.bind(Array.prototype.
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 function se
archRefId(node, id) {\n if (!id)\n return;\n\n var ref;\n var sele
ctor = '#' + id;\n while (!ref) {\n node = getFragmentRoot(node);\n\n
if (node.protoContent_)\n ref = node.protoContent_.querySelector(selec
tor);\n else if (node.getElementById)\n ref = node.getElementById(id
);\n\n if (ref || !node.templateCreator_)\n break\n\n node = no
de.templateCreator_;\n }\n\n return ref;\n }\n\n function getInstanceRoo
t(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 = global.
Map;\n } else {\n Map = function() {\n this.keys = [];\n this.valu
es = [];\n };\n\n Map.prototype = {\n set: function(key, value) {\n
var index = this.keys.indexOf(key);\n if (index < 0) {\n t
his.keys.push(key);\n this.values.push(value);\n } else {\n
this.values[index] = value;\n }\n },\n\n get: function(key
) {\n var index = this.keys.indexOf(key);\n if (index < 0)\n
return;\n\n return this.values[index];\n },\n\n delete: fun
ction(key, value) {\n var index = this.keys.indexOf(key);\n if (in
dex < 0)\n return false;\n\n this.keys.splice(index, 1);\n
this.values.splice(index, 1);\n return true;\n },\n\n forEach
: 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 literal
s with\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__' i
n {}) ?\n function(obj) { return obj; } :\n function(obj) {\n v
ar proto = obj.__proto__;\n if (!proto)\n return obj;\n v
ar newObject = Object.create(proto);\n Object.getOwnPropertyNames(obj).fo
rEach(function(name) {\n Object.defineProperty(newObject, name,\n
Object.getOwnPropertyDescriptor(obj, name));\n }
);\n return newObject;\n };\n\n // IE does not support have Documen
t.prototype.contains.\n if (typeof document.contains != 'function') {\n Docu
ment.prototype.contains = function(node) {\n if (node === this || node.pare
ntNode === this)\n return true;\n return this.documentElement.contai
ns(node);\n }\n }\n\n var BIND = 'bind';\n var REPEAT = 'repeat';\n var I
F = 'if';\n\n var templateAttributeDirectives = {\n 'template': true,\n '
repeat': true,\n 'bind': true,\n 'ref': true\n };\n\n var semanticTempla
teElements = {\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 if (h
asTemplateElement) {\n // TODO(rafaelw): Remove when fix for\n // https://
codereview.chromium.org/164803002/\n // makes it to Chrome release.\n (fun
ction() {\n var t = document.createElement('template');\n var d = t.co
ntent.ownerDocument;\n var html = d.appendChild(d.createElement('html'));\n
var head = html.appendChild(d.createElement('head'));\n var base = d.
createElement('base');\n base.href = document.baseURI;\n head.appendCh
ild(base);\n })();\n }\n\n var allTemplatesSelectors = 'template, ' +\n
Object.keys(semanticTemplateElements).map(function(tagName) {\n return
tagName.toLowerCase() + '[template]';\n }).join(', ');\n\n function isSVGT
emplate(el) {\n return el.tagName == 'template' &&\n el.namespaceUR
I == 'http://www.w3.org/2000/svg';\n }\n\n function isHTMLTemplate(el) {\n
return el.tagName == 'TEMPLATE' &&\n el.namespaceURI == 'http://www.w3
.org/1999/xhtml';\n }\n\n function isAttributeTemplate(el) {\n return Boole
an(semanticTemplateElements[el.tagName] &&\n el.hasAttribute('
template'));\n }\n\n function isTemplate(el) {\n if (el.isTemplate_ === und
efined)\n el.isTemplate_ = el.tagName == 'TEMPLATE' || isAttributeTemplate(
el);\n\n return el.isTemplate_;\n }\n\n // FIXME: Observe templates being a
dded/removed from documents\n // FIXME: Expose imperative API to decorate and o
bserve templates in\n // \"disconnected tress\" (e.g. ShadowRoot)\n document.a
ddEventListener('DOMContentLoaded', function(e) {\n bootstrapTemplatesRecursi
velyFrom(document);\n // FIXME: Is this needed? Seems like it shouldn't be.\n
Platform.performMicrotaskCheckpoint();\n }, false);\n\n function forAllTem
platesFrom(node, fn) {\n var subTemplates = node.querySelectorAll(allTemplate
sSelectors);\n\n if (isTemplate(node))\n fn(node)\n forEach(subTempla
tes, fn);\n }\n\n function bootstrapTemplatesRecursivelyFrom(node) {\n func
tion bootstrap(template) {\n if (!HTMLTemplateElement.decorate(template))\n
bootstrapTemplatesRecursivelyFrom(template.content);\n }\n\n forAl
lTemplatesFrom(node, bootstrap);\n }\n\n if (!hasTemplateElement) {\n /**\n
* This represents a <template> element.\n * @constructor\n * @exten
ds {HTMLElement}\n */\n global.HTMLTemplateElement = function() {\n
throw TypeError('Illegal constructor');\n };\n }\n\n var hasProto = '__prot
o__' in {};\n\n function mixin(to, from) {\n Object.getOwnPropertyNames(from
).forEach(function(name) {\n Object.defineProperty(to, name,\n
Object.getOwnPropertyDescriptor(from, name));\n });\n }\n\n
// http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#df
n-template-contents-owner\n function getOrCreateTemplateContentsOwner(template)
{\n var doc = template.ownerDocument\n if (!doc.defaultView)\n retur
n doc;\n var d = doc.templateContentsOwner_;\n if (!d) {\n // TODO(ar
v): This should either be a Document or HTMLDocument depending\n // on doc.
\n d = doc.implementation.createHTMLDocument('');\n while (d.lastChild
) {\n d.removeChild(d.lastChild);\n }\n doc.templateContentsOwn
er_ = d;\n }\n return d;\n }\n\n function getTemplateStagingDocument(tem
plate) {\n if (!template.stagingDocument_) {\n var owner = template.owne
rDocument;\n if (!owner.stagingDocument_) {\n owner.stagingDocument_
= owner.implementation.createHTMLDocument('');\n owner.stagingDocument_.
isStagingDocument = true;\n // TODO(rafaelw): Remove when fix for\n
// https://codereview.chromium.org/164803002/\n // makes it to Chrome r
elease.\n var base = owner.stagingDocument_.createElement('base');\n
base.href = document.baseURI;\n owner.stagingDocument_.head.appendChil
d(base);\n\n owner.stagingDocument_.stagingDocument_ = owner.stagingDocum
ent_;\n }\n\n template.stagingDocument_ = owner.stagingDocument_;\n
}\n\n return template.stagingDocument_;\n }\n\n // For non-template browse
rs, the parser will disallow <template> in certain\n // locations, so we allow
\"attribute templates\" which combine the template\n // element with the top-le
vel container node of the content, e.g.\n //\n // <tr template repeat=\"{{ f
oo }}\"\" class=\"bar\"><td>Bar</td></tr>\n //\n // becomes\n //\n // <tem
plate repeat=\"{{ foo }}\">\n // + #document-fragment\n // + <tr class=\
"bar\">\n // + <td>Bar</td>\n //\n function extractTemplateFromAttribut
eTemplate(el) {\n var template = el.ownerDocument.createElement('template');\
n el.parentNode.insertBefore(template, el);\n\n var attribs = el.attribute
s;\n var count = attribs.length;\n while (count-- > 0) {\n var attrib
= attribs[count];\n if (templateAttributeDirectives[attrib.name]) {\n
if (attrib.name !== 'template')\n template.setAttribute(attrib.name,
attrib.value);\n el.removeAttribute(attrib.name);\n }\n }\n\n
return template;\n }\n\n function extractTemplateFromSVGTemplate(el) {\n v
ar template = el.ownerDocument.createElement('template');\n el.parentNode.ins
ertBefore(template, el);\n\n var attribs = el.attributes;\n var count = at
tribs.length;\n while (count-- > 0) {\n var attrib = attribs[count];\n
template.setAttribute(attrib.name, attrib.value);\n el.removeAttribute(
attrib.name);\n }\n\n el.parentNode.removeChild(el);\n return template;
\n }\n\n function liftNonNativeTemplateChildrenIntoContent(template, el, useRo
ot) {\n var content = template.content;\n if (useRoot) {\n content.ap
pendChild(el);\n return;\n }\n\n var child;\n while (child = el.fi
rstChild) {\n content.appendChild(child);\n }\n }\n\n var templateObse
rver;\n if (typeof MutationObserver == 'function') {\n templateObserver = ne
w MutationObserver(function(records) {\n for (var i = 0; i < records.length
; i++) {\n records[i].target.refChanged_();\n }\n });\n }\n\n /
**\n * Ensures proper API and content model for template elements.\n * @para
m {HTMLTemplateElement} opt_instanceRef The template element which\n * |el
| template element will return as the value of its ref(), and whose\n * co
ntent will be used as source when createInstance() is invoked.\n */\n HTMLTem
plateElement.decorate = function(el, opt_instanceRef) {\n if (el.templateIsDe
corated_)\n return false;\n\n var templateElement = el;\n templateEle
ment.templateIsDecorated_ = true;\n\n var isNativeHTMLTemplate = isHTMLTempla
te(templateElement) &&\n hasTemplateElement;\n
var bootstrapContents = isNativeHTMLTemplate;\n var liftContents = !isNativeH
TMLTemplate;\n var liftRoot = false;\n\n if (!isNativeHTMLTemplate) {\n
if (isAttributeTemplate(templateElement)) {\n assert(!opt_instanceRef)
;\n templateElement = extractTemplateFromAttributeTemplate(el);\n
templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplate = has
TemplateElement;\n liftRoot = true;\n } else if (isSVGTemplate(templ
ateElement)) {\n templateElement = extractTemplateFromSVGTemplate(el);\n
templateElement.templateIsDecorated_ = true;\n isNativeHTMLTemplat
e = hasTemplateElement;\n }\n }\n\n if (!isNativeHTMLTemplate) {\n
fixTemplateElementPrototype(templateElement);\n var doc = getOrCreateTem
plateContentsOwner(templateElement);\n templateElement.content_ = doc.creat
eDocumentFragment();\n }\n\n if (opt_instanceRef) {\n // template is
contained within an instance, its direct content must be\n // empty\n
templateElement.instanceRef_ = opt_instanceRef;\n } else if (liftContents) {\
n liftNonNativeTemplateChildrenIntoContent(templateElement,\n
el,\n
liftRoot);\n } else if (bootstrapContents) {\n bootstrapTemplatesRe
cursivelyFrom(templateElement.content);\n }\n\n return true;\n };\n\n //
TODO(rafaelw): This used to decorate recursively all templates from a given\n
// node. This happens by default on 'DOMContentLoaded', but may be needed\n //
in subtrees not descendent from document (e.g. ShadowRoot).\n // Review whether
this is the right public API.\n HTMLTemplateElement.bootstrap = bootstrapTempl
atesRecursivelyFrom;\n\n var htmlElement = global.HTMLUnknownElement || HTMLEle
ment;\n\n var contentDescriptor = {\n get: function() {\n return this.c
ontent_;\n },\n enumerable: true,\n configurable: true\n };\n\n if (!
hasTemplateElement) {\n // Gecko is more picky with the prototype than WebKit
. Make sure to use the\n // same prototype as created in the constructor.\n
HTMLTemplateElement.prototype = Object.create(htmlElement.prototype);\n\n O
bject.defineProperty(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 ensureS
etModelScheduled(template) {\n if (!template.setModelFn_) {\n template.s
etModelFn_ = function() {\n template.setModelFnScheduled_ = false;\n
var map = getBindings(template,\n template.delegate_ && template.d
elegate_.prepareBinding);\n processBindings(template, map, template.model
_);\n };\n }\n\n if (!template.setModelFnScheduled_) {\n templat
e.setModelFnScheduled_ = true;\n Observer.runEOM_(template.setModelFn_);\n
}\n }\n\n mixin(HTMLTemplateElement.prototype, {\n bind: function(name,
value, oneTime) {\n if (name != 'ref')\n return Element.prototype.bi
nd.call(this, name, value, oneTime);\n\n var self = this;\n var ref =
oneTime ? value : value.open(function(ref) {\n self.setAttribute('ref', r
ef);\n self.refChanged_();\n });\n\n this.setAttribute('ref', r
ef);\n this.refChanged_();\n if (oneTime)\n return;\n\n if
(!this.bindings_) {\n this.bindings_ = { ref: value };\n } else {\n
this.bindings_.ref = value;\n }\n\n return value;\n },\n\n
processBindingDirectives_: function(directives) {\n if (this.iterator_)\
n this.iterator_.closeDeps();\n\n if (!directives.if && !directives.
bind && !directives.repeat) {\n if (this.iterator_) {\n this.ite
rator_.close();\n this.iterator_ = undefined;\n }\n\n ret
urn;\n }\n\n if (!this.iterator_) {\n this.iterator_ = new Temp
lateIterator(this);\n }\n\n this.iterator_.updateDependencies(directiv
es, this.model_);\n\n if (templateObserver) {\n templateObserver.obs
erve(this, { attributes: true,\n attribu
teFilter: ['ref'] });\n }\n\n return this.iterator_;\n },\n\n cr
eateInstance: function(model, bindingDelegate, delegate_) {\n if (bindingDe
legate)\n delegate_ = this.newDelegate_(bindingDelegate);\n else if
(!delegate_)\n delegate_ = this.delegate_;\n\n if (!this.refContent_
)\n this.refContent_ = this.ref_.content;\n var content = this.refCo
ntent_;\n if (content.firstChild === null)\n return emptyInstance;\n
\n var map = getInstanceBindingMap(content, delegate_);\n var stagingD
ocument = getTemplateStagingDocument(this);\n var instance = stagingDocumen
t.createDocumentFragment();\n instance.templateCreator_ = this;\n inst
ance.protoContent_ = content;\n instance.bindings_ = [];\n instance.te
rminator_ = null;\n var instanceRecord = instance.templateInstance_ = {\n
firstNode: null,\n lastNode: null,\n model: model\n };\
n\n var i = 0;\n var collectTerminator = false;\n for (var child
= content.firstChild; child; child = child.nextSibling) {\n // The termin
ator of the instance is the clone of the last child of the\n // content.
If the last child is an active template, it may produce\n // instances as
a result of production, so simply collecting the last\n // child of the
instance after it has finished producing may be wrong.\n if (child.nextSi
bling === null)\n collectTerminator = true;\n\n var clone = clon
eAndBindInstance(child, instance, stagingDocument,\n
map.children[i++],\n model,
\n delegate_,\n
instance.bindings_);\n clone.templateInstance_ = instance
Record;\n if (collectTerminator)\n instance.terminator_ = clone;
\n }\n\n instanceRecord.firstNode = instance.firstChild;\n instan
ceRecord.lastNode = instance.lastChild;\n instance.templateCreator_ = undef
ined;\n instance.protoContent_ = undefined;\n return instance;\n },
\n\n get model() {\n return 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 refChanged_: function() {\n if (!this.iterator_ || this.refC
ontent_ === this.ref_.content)\n return;\n\n this.refContent_ = unde
fined;\n this.iterator_.valueChanged();\n this.iterator_.updateIterate
dValue();\n },\n\n clear: function() {\n this.model_ = undefined;\n
this.delegate_ = undefined;\n if (this.bindings_ && this.bindings_.ref)
\n this.bindings_.ref.close()\n this.refContent_ = undefined;\n
if (!this.iterator_)\n return;\n this.iterator_.valueChanged();\n
this.iterator_.close()\n this.iterator_ = undefined;\n },\n\n set
Delegate_: function(delegate) {\n this.delegate_ = delegate;\n this.bi
ndingMap_ = undefined;\n if (this.iterator_) {\n this.iterator_.inst
ancePositionChangedFn_ = undefined;\n this.iterator_.instanceModelFn_ = u
ndefined;\n }\n },\n\n newDelegate_: function(bindingDelegate) {\n
if (!bindingDelegate)\n return;\n\n function delegateFn(name) {\n
var fn = bindingDelegate && bindingDelegate[name];\n if (typeof f
n != 'function')\n return;\n\n return function() {\n re
turn fn.apply(bindingDelegate, arguments);\n };\n }\n\n return
{\n bindingMaps: {},\n raw: bindingDelegate,\n prepareBindi
ng: delegateFn('prepareBinding'),\n prepareInstanceModel: delegateFn('pre
pareInstanceModel'),\n prepareInstancePositionChanged:\n deleg
ateFn('prepareInstancePositionChanged')\n };\n },\n\n set bindingDele
gate(bindingDelegate) {\n if (this.delegate_) {\n throw Error('Templ
ate must be cleared before a new bindingDelegate ' +\n 'can b
e assigned');\n }\n\n this.setDelegate_(this.newDelegate_(bindingDeleg
ate));\n },\n\n get ref_() {\n var ref = searchRefId(this, this.getAt
tribute('ref'));\n if (!ref)\n ref = this.instanceRef_;\n\n if
(!ref)\n return this;\n\n var nextRef = ref.ref_;\n return next
Ref ? nextRef : ref;\n }\n });\n\n // Returns\n // a) undefined if there
are no mustaches.\n // b) [TEXT, (ONE_TIME?, PATH, DELEGATE_FN, TEXT)+] if t
here is at least one mustache.\n function parseMustaches(s, name, node, prepare
BindingFn) {\n if (!s || !s.length)\n return;\n\n var tokens;\n va
r 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.indexOf('[[', lastInde
x);\n var oneTime = false;\n var terminator = '}}';\n\n if (oneTi
meStart >= 0 &&\n (startIndex < 0 || oneTimeStart < startIndex)) {\n
startIndex = oneTimeStart;\n oneTime = true;\n terminator = '
]]';\n }\n\n endIndex = startIndex < 0 ? -1 : s.indexOf(terminator, st
artIndex + 2);\n\n if (endIndex < 0) {\n if (!tokens)\n ret
urn;\n\n tokens.push(s.slice(lastIndex)); // TEXT\n break;\n
}\n\n tokens = tokens || [];\n tokens.push(s.slice(lastIndex, startInd
ex)); // TEXT\n var pathString = s.slice(startIndex + 2, endIndex).trim();\
n tokens.push(oneTime); // ONE_TIME?\n onlyOneTime = onlyOneTime && on
eTime;\n var delegateFn = prepareBindingFn &&\n prepa
reBindingFn(pathString, name, node);\n // Don't try to parse the expression
if there's a prepareBinding function\n if (delegateFn == null) {\n
tokens.push(Path.get(pathString)); // PATH\n } else {\n tokens.push(
null);\n }\n tokens.push(delegateFn); // DELEGATE_FN\n lastIndex
= endIndex + 2;\n }\n\n if (lastIndex === length)\n tokens.push('');
// TEXT\n\n tokens.hasOnePath = tokens.length === 5;\n tokens.isSimplePath
= tokens.hasOnePath &&\n tokens[0] == '' &&\n
tokens[4] == '';\n tokens.onlyOneTime = onlyOneTime;\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 = tokens.hasOne
Path ? values : values[(i - 1) / 4];\n if (value !== undefined)\n
newValue += value;\n newValue += tokens[i + 3];\n }\n\n retur
n newValue;\n }\n\n return tokens;\n };\n\n function processOneTimeBindi
ng(name, tokens, node, model) {\n if (tokens.hasOnePath) {\n var delegat
eFn = tokens[3];\n var value = delegateFn ? delegateFn(model, node, true) :
\n tokens[2].getValueFrom(model);\n return to
kens.isSimplePath ? value : tokens.combinator(value);\n }\n\n var values =
[];\n for (var i = 1; i < tokens.length; i += 4) {\n var delegateFn = t
okens[i + 2];\n values[(i - 1) / 4] = delegateFn ? delegateFn(model, node)
:\n tokens[i + 1].getValueFrom(model);\n }\n\n return tokens.comb
inator(values);\n }\n\n function processSinglePathBinding(name, tokens, node,
model) {\n var delegateFn = tokens[3];\n var observer = delegateFn ? deleg
ateFn(model, node, false) :\n new PathObserver(model, tokens[2]);\n\n
return tokens.isSimplePath ? observer :\n new ObserverTransform(observer,
tokens.combinator);\n }\n\n function processBinding(name, tokens, node, model
) {\n if (tokens.onlyOneTime)\n return processOneTimeBinding(name, token
s, node, model);\n\n if (tokens.hasOnePath)\n return processSinglePathBi
nding(name, tokens, node, model);\n\n var observer = new CompoundObserver();\
n\n for (var i = 1; i < tokens.length; i += 4) {\n var oneTime = tokens[
i];\n var delegateFn = tokens[i + 2];\n\n if (delegateFn) {\n v
ar value = delegateFn(model, node, oneTime);\n if (oneTime)\n ob
server.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(observer, toke
ns.combinator);\n }\n\n function processBindings(node, bindings, model, instan
ceBindings) {\n for (var i = 0; i < bindings.length; i += 2) {\n var nam
e = bindings[i]\n var tokens = bindings[i + 1];\n var value = processB
inding(name, tokens, node, model);\n var binding = node.bind(name, value, t
okens.onlyOneTime);\n if (binding && instanceBindings)\n instanceBin
dings.push(binding);\n }\n\n node.bindFinished();\n if (!bindings.isTem
plate)\n return;\n\n node.model_ = model;\n var iter = node.processBi
ndingDirectives_(bindings);\n if (instanceBindings && iter)\n instanceBi
ndings.push(iter);\n }\n\n function parseWithDefault(el, name, prepareBindingF
n) {\n var v = el.getAttribute(name);\n return parseMustaches(v == '' ? '{
{}}' : v, name, el, prepareBindingFn);\n }\n\n function parseAttributeBindings
(element, prepareBindingFn) {\n assert(element);\n\n var bindings = [];\n
var ifFound = false;\n var bindFound = false;\n\n for (var i = 0; i < e
lement.attributes.length; i++) {\n var attr = element.attributes[i];\n
var name = attr.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> w
here certain attributes might trigger side-effects -- and\n // for IE which
sanitizes certain attributes, disallowing mustache\n // replacements in th
eir text.\n while (name[0] === '_') {\n name = name.substring(1);\n
}\n\n if (isTemplate(element) &&\n (name === IF || name === B
IND || name === REPEAT)) {\n continue;\n }\n\n var tokens = par
seMustaches(value, name, element,\n prepareBind
ingFn);\n if (!tokens)\n continue;\n\n bindings.push(name, toke
ns);\n }\n\n if (isTemplate(element)) {\n bindings.isTemplate = true;
\n bindings.if = parseWithDefault(element, IF, prepareBindingFn);\n bi
ndings.bind = parseWithDefault(element, BIND, prepareBindingFn);\n bindings
.repeat = parseWithDefault(element, REPEAT, prepareBindingFn);\n\n if (bind
ings.if && !bindings.bind && !bindings.repeat)\n bindings.bind = parseMus
taches('{{}}', BIND, element, prepareBindingFn);\n }\n\n return bindings;\
n }\n\n function getBindings(node, prepareBindingFn) {\n if (node.nodeType
=== Node.ELEMENT_NODE)\n return parseAttributeBindings(node, prepareBinding
Fn);\n\n if (node.nodeType === Node.TEXT_NODE) {\n var tokens = parseMus
taches(node.data, 'textContent', node,\n prepar
eBindingFn);\n if (tokens)\n return ['textContent', tokens];\n }\
n\n return [];\n }\n\n function cloneAndBindInstance(node, parent, stagingD
ocument, bindings, model,\n delegate,\n
instanceBindings,\n instanc
eRecord) {\n var clone = parent.appendChild(stagingDocument.importNode(node,
false));\n\n var i = 0;\n for (var child = node.firstChild; child; child =
child.nextSibling) {\n cloneAndBindInstance(child, clone, stagingDocument,
\n bindings.children[i++],\n
model,\n delegate,\n in
stanceBindings);\n }\n\n if (bindings.isTemplate) {\n HTMLTemplateEle
ment.decorate(clone, node);\n if (delegate)\n clone.setDelegate_(del
egate);\n }\n\n processBindings(clone, bindings, model, instanceBindings);
\n return clone;\n }\n\n function createInstanceBindingMap(node, prepareBin
dingFn) {\n var map = getBindings(node, prepareBindingFn);\n map.children
= {};\n var index = 0;\n for (var child = node.firstChild; child; child =
child.nextSibling) {\n map.children[index++] = createInstanceBindingMap(chi
ld, prepareBindingFn);\n }\n\n return map;\n }\n\n var contentUidCounter
= 1;\n\n // TODO(rafaelw): Setup a MutationObserver on content which clears th
e id\n // so that bindingMaps regenerate when the template.content changes.\n
function getContentUid(content) {\n var id = content.id_;\n if (!id)\n
id = content.id_ = contentUidCounter++;\n return id;\n }\n\n // Each dele
gate is associated with a set of bindingMaps, one for each\n // content which m
ay be used by a template. The intent is that each binding\n // delegate gets th
e opportunity to prepare the instance (via the prepare*\n // delegate calls) on
ce across all uses.\n // TODO(rafaelw): Separate out the parse map from the bin
ding map. In the\n // current implementation, if two delegates need a binding m
ap for the same\n // content, the second will have to reparse.\n function getI
nstanceBindingMap(content, delegate_) {\n var contentId = getContentUid(conte
nt);\n if (delegate_) {\n var map = delegate_.bindingMaps[contentId];\n
if (!map) {\n map = delegate_.bindingMaps[contentId] =\n
createInstanceBindingMap(content, delegate_.prepareBinding) || [];\n }\n
return map;\n }\n\n var map = content.bindingMap_;\n if (!map) {\n
map = content.bindingMap_ =\n createInstanceBindingMap(content, und
efined) || [];\n }\n return map;\n }\n\n Object.defineProperty(Node.prot
otype, 'templateInstance', {\n get: function() {\n var instance = this.t
emplateInstance_;\n return instance ? instance :\n (this.parentNod
e ? this.parentNode.templateInstance : undefined);\n }\n });\n\n var emptyI
nstance = document.createDocumentFragment();\n emptyInstance.bindings_ = [];\n
emptyInstance.terminator_ = null;\n\n function TemplateIterator(templateElemen
t) {\n this.closed = false;\n this.templateElement_ = templateElement;\n
this.instances = [];\n this.deps = undefined;\n this.iteratedValue = [];
\n this.presentValue = undefined;\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.val
ue.close();\n }\n },\n\n updateDependencies: function(directives, mod
el) {\n this.closeDeps();\n\n var deps = this.deps = {};\n var te
mplate = this.templateElement_;\n\n if (directives.if) {\n deps.hasI
f = true;\n deps.ifOneTime = directives.if.onlyOneTime;\n deps.ifV
alue = processBinding(IF, directives.if, template, model);\n\n // oneTime
if & predicate is false. nothing else to do.\n if (deps.ifOneTime && !de
ps.ifValue) {\n this.updateIteratedValue();\n return;\n
}\n\n if (!deps.ifOneTime)\n deps.ifValue.open(this.updateItera
tedValue, this);\n }\n\n if (directives.repeat) {\n deps.repeat
= true;\n deps.oneTime = directives.repeat.onlyOneTime;\n deps.va
lue = processBinding(REPEAT, directives.repeat, template, model);\n } else
{\n deps.repeat = false;\n deps.oneTime = directives.bind.onlyOneT
ime;\n deps.value = processBinding(BIND, directives.bind, template, model
);\n }\n\n if (!deps.oneTime)\n deps.value.open(this.updateIter
atedValue, this);\n\n this.updateIteratedValue();\n },\n\n updateIter
atedValue: function() {\n if (this.deps.hasIf) {\n var ifValue = thi
s.deps.ifValue;\n if (!this.deps.ifOneTime)\n ifValue = ifValue.
discardChanges();\n if (!ifValue) {\n this.valueChanged();\n
return;\n }\n }\n\n var value = this.deps.value;\n i
f (!this.deps.oneTime)\n value = value.discardChanges();\n if (!this
.deps.repeat)\n value = [value];\n var observe = this.deps.repeat &&
\n !this.deps.oneTime &&\n Array.isArray(v
alue);\n this.valueChanged(value, observe);\n },\n\n valueChanged: fu
nction(value, observeValue) {\n if (!Array.isArray(value))\n value =
[];\n\n if (value === this.iteratedValue)\n return;\n\n this.u
nobserve();\n this.presentValue = value;\n if (observeValue) {\n
this.arrayObserver = new ArrayObserver(this.presentValue);\n this.array
Observer.open(this.handleSplices, this);\n }\n\n this.handleSplices(Ar
rayObserver.calculateSplices(this.presentValue,\n
this.iteratedValue));\n },\n\n getLastInstanceNod
e: function(index) {\n if (index == -1)\n return this.templateElemen
t_;\n var instance = this.instances[index];\n var terminator = instanc
e.terminator_;\n if (!terminator)\n return this.getLastInstanceNode(
index - 1);\n\n if (terminator.nodeType !== Node.ELEMENT_NODE ||\n
this.templateElement_ === terminator) {\n return terminator;\n }\n\
n var subtemplateIterator = terminator.iterator_;\n if (!subtemplateIt
erator)\n return terminator;\n\n return subtemplateIterator.getLastT
emplateNode();\n },\n\n getLastTemplateNode: function() {\n return th
is.getLastInstanceNode(this.instances.length - 1);\n },\n\n insertInstance
At: function(index, fragment) {\n var previousInstanceLast = this.getLastIn
stanceNode(index - 1);\n var parent = this.templateElement_.parentNode;\n
this.instances.splice(index, 0, fragment);\n\n parent.insertBefore(frag
ment, previousInstanceLast.nextSibling);\n },\n\n extractInstanceAt: funct
ion(index) {\n var previousInstanceLast = this.getLastInstanceNode(index -
1);\n var lastNode = this.getLastInstanceNode(index);\n var parent = t
his.templateElement_.parentNode;\n var instance = this.instances.splice(ind
ex, 1)[0];\n\n while (lastNode !== previousInstanceLast) {\n var nod
e = previousInstanceLast.nextSibling;\n if (node == lastNode)\n
lastNode = previousInstanceLast;\n\n instance.appendChild(parent.removeCh
ild(node));\n }\n\n return instance;\n },\n\n getDelegateFn: fun
ction(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.templateElement_;\n\n if (!template.parentNode) {\n this.clo
se();\n return;\n }\n\n ArrayObserver.applySplices(this.iterate
dValue, this.presentValue,\n splices);\n\n
var delegate = template.delegate_;\n if (this.instanceModelFn_ === undefine
d) {\n this.instanceModelFn_ =\n this.getDelegateFn(delegate &
& delegate.prepareInstanceModel);\n }\n\n if (this.instancePositionCha
ngedFn_ === undefined) {\n this.instancePositionChangedFn_ =\n
this.getDelegateFn(delegate &&\n delegate.prepare
InstancePositionChanged);\n }\n\n // Instance Removals\n var inst
anceCache = new Map;\n var removeDelta = 0;\n for (var i = 0; i < spli
ces.length; i++) {\n var splice = splices[i];\n var removed = spli
ce.removed;\n for (var j = 0; j < removed.length; j++) {\n var m
odel = removed[j];\n var instance = this.extractInstanceAt(splice.index
+ removeDelta);\n if (instance !== emptyInstance) {\n insta
nceCache.set(model, instance);\n }\n }\n\n removeDelta -=
splice.addedCount;\n }\n\n // Instance Insertions\n for (var i =
0; i < splices.length; i++) {\n var splice = splices[i];\n var ad
dIndex = splice.index;\n for (; addIndex < splice.index + splice.addedCou
nt; addIndex++) {\n var model = this.iteratedValue[addIndex];\n
var instance = instanceCache.get(model);\n if (instance) {\n
instanceCache.delete(model);\n } else {\n if (this.instan
ceModelFn_) {\n model = this.instanceModelFn_(model);\n
}\n\n if (model === undefined) {\n instance = emptyInsta
nce;\n } else {\n instance = template.createInstance(mod
el, undefined, delegate);\n }\n }\n\n this.insertIn
stanceAt(addIndex, instance);\n }\n }\n\n instanceCache.forEach
(function(instance) {\n this.closeInstanceBindings(instance);\n }, t
his);\n\n if (this.instancePositionChangedFn_)\n this.reportInstance
sMoved(splices);\n },\n\n reportInstanceMoved: function(index) {\n va
r instance = this.instances[index];\n if (instance === emptyInstance)\n
return;\n\n this.instancePositionChangedFn_(instance.templateInstance_,
index);\n },\n\n reportInstancesMoved: function(splices) {\n var ind
ex = 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 < splice.index + splice.addedCount) {\n
this.reportInstanceMoved(index);\n index++;\n }\n\n offs
et += splice.addedCount - splice.removed.length;\n }\n\n if (offset ==
0)\n return;\n\n var length = this.instances.length;\n while (
index < length) {\n this.reportInstanceMoved(index);\n index++;\n
}\n },\n\n closeInstanceBindings: function(instance) {\n var bin
dings = instance.bindings_;\n for (var i = 0; i < bindings.length; i++) {\n
bindings[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 this.unobserve();\n for (var i
= 0; i < this.instances.length; i++) {\n this.closeInstanceBindings(this
.instances[i]);\n }\n\n this.instances.length = 0;\n this.closeDe
ps();\n this.templateElement_.iterator_ = undefined;\n this.closed = t
rue;\n }\n };\n\n // Polyfill-specific API.\n HTMLTemplateElement.forAllTe
mplatesFrom_ = forAllTemplatesFrom;\n})(this);\n", |
170 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n//
inject style sheet\nvar style = document.createElement('style');\nstyle.textCont
ent = 'template {display: none !important;} /* injected by platform.js */';\nvar
head = document.querySelector('head');\nhead.insertBefore(style, head.firstChil
d);\n\n// flush (with logging)\nvar flushing;\nfunction flush() {\n if (!flushi
ng) {\n flushing = true;\n scope.endOfMicrotask(function() {\n flushi
ng = false;\n logFlags.data && console.group('Platform.flush()');\n sc
ope.performMicrotaskCheckpoint();\n logFlags.data && console.groupEnd();\n
});\n }\n};\n\n// polling dirty checker\n// flush periodically if platform d
oes not have object observe.\nif (!Observer.hasObjectObserve) {\n var FLUSH_POL
L_INTERVAL = 125;\n window.addEventListener('WebComponentsReady', function() {\
n flush();\n scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n
});\n} else {\n // make flush a no-op when we have Object.observe\n flush = f
unction() {};\n}\n\nif (window.CustomElements && !CustomElements.useNative) {\n
var originalImportNode = Document.prototype.importNode;\n Document.prototype.i
mportNode = function(node, deep) {\n var imported = originalImportNode.call(t
his, node, deep);\n CustomElements.upgradeAll(imported);\n return imported
;\n }\n}\n\n// exports\nscope.flush = flush;\n\n})(window.Platform);\n\n" | 172 "/*\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
\n * This code may only be used under the BSD style license found at http://poly
mer.github.io/LICENSE.txt\n * The complete set of authors may be found at http:/
/polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found
at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as
part of the polymer project is also\n * subject to an additional IP rights grant
found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n//
inject style sheet\nvar style = document.createElement('style');\nstyle.textCont
ent = 'template {display: none !important;} /* injected by platform.js */';\nvar
head = document.querySelector('head');\nhead.insertBefore(style, head.firstChil
d);\n\n// flush (with logging)\nvar flushing;\nfunction flush() {\n if (!flushi
ng) {\n flushing = true;\n scope.endOfMicrotask(function() {\n flushi
ng = false;\n logFlags.data && console.group('Platform.flush()');\n sc
ope.performMicrotaskCheckpoint();\n logFlags.data && console.groupEnd();\n
});\n }\n};\n\n// polling dirty checker\n// flush periodically if platform d
oes not have object observe.\nif (!Observer.hasObjectObserve) {\n var FLUSH_POL
L_INTERVAL = 125;\n window.addEventListener('WebComponentsReady', function() {\
n flush();\n scope.flushPoll = setInterval(flush, FLUSH_POLL_INTERVAL);\n
});\n} else {\n // make flush a no-op when we have Object.observe\n flush = f
unction() {};\n}\n\nif (window.CustomElements && !CustomElements.useNative) {\n
var originalImportNode = Document.prototype.importNode;\n Document.prototype.i
mportNode = function(node, deep) {\n var imported = originalImportNode.call(t
his, node, deep);\n CustomElements.upgradeAll(imported);\n return imported
;\n }\n}\n\n// exports\nscope.flush = flush;\n\n})(window.Platform);\n\n" |
171 ] | 173 ] |
172 } | 174 } |
OLD | NEW |