Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1263)

Side by Side Diff: pkg/web_components/lib/platform.concat.js.map

Issue 420673002: Roll polymer packages to version 0.3.4 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | pkg/web_components/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 '&amp ;';\n case '<':\n return '&lt;';\n case '>':\n return '& gt;';\n case '\"':\n return '&quot;'\n case '\\u00A0':\n return '&nbsp;';\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 '&amp ;';\n case '<':\n return '&lt;';\n case '>':\n return '& gt;';\n case '\"':\n return '&quot;'\n case '\\u00A0':\n return '&nbsp;';\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 + '&nbsp;&nbsp;';\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>&lt;/' + name + '&gt;</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>' + '&lt;';\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 += '&gt;'+ '</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 + '&nbsp;&nbsp;';\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>&lt;/' + name + '&gt;</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>' + '&lt;';\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 += '&gt;'+ '</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 }
OLDNEW
« no previous file with comments | « pkg/web_components/lib/platform.concat.js ('k') | pkg/web_components/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698