{
  "lighthouseVersion": "13.0.3",
  "requestedUrl": "https://cincinnati.com/",
  "mainDocumentUrl": "https://eu.cincinnati.com/",
  "finalDisplayedUrl": "https://eu.cincinnati.com/",
  "finalUrl": "https://eu.cincinnati.com/",
  "fetchTime": "2026-04-22T21:41:11.005Z",
  "gatherMode": "navigation",
  "runWarnings": [
    "The page may not be loading as expected because your test URL (https://cincinnati.com/) was redirected to https://eu.cincinnati.com/. Try testing the second URL directly."
  ],
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.0.0 Safari/537.36",
  "environment": {
    "networkUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Mobile Safari/537.36",
    "hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/147.0.0.0 Safari/537.36",
    "benchmarkIndex": 2561.5,
    "credits": {
      "axe-core": "4.11.2"
    }
  },
  "audits": {
    "is-on-https": {
      "id": "is-on-https",
      "title": "Uses HTTPS",
      "description": "All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more about HTTPS](https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Insecure URL"
          },
          {
            "key": "resolution",
            "valueType": "text",
            "label": "Request Resolution"
          }
        ],
        "items": []
      }
    },
    "redirects-http": {
      "id": "redirects-http",
      "title": "Redirects HTTP traffic to HTTPS",
      "description": "Make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. [Learn more](https://developer.chrome.com/docs/lighthouse/pwa/redirects-http/).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "first-contentful-paint": {
      "id": "first-contentful-paint",
      "title": "First Contentful Paint",
      "description": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/).",
      "score": 0.25,
      "scoreDisplayMode": "numeric",
      "numericValue": 3894.670329999999,
      "numericUnit": "millisecond",
      "displayValue": "3.9 s",
      "scoringOptions": {
        "p10": 1800,
        "median": 3000
      }
    },
    "largest-contentful-paint": {
      "id": "largest-contentful-paint",
      "title": "Largest Contentful Paint",
      "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "numericValue": 10933.635330000001,
      "numericUnit": "millisecond",
      "displayValue": "10.9 s",
      "scoringOptions": {
        "p10": 2500,
        "median": 4000
      }
    },
    "speed-index": {
      "id": "speed-index",
      "title": "Speed Index",
      "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
      "score": 0.82,
      "scoreDisplayMode": "numeric",
      "numericValue": 3894.670329999999,
      "numericUnit": "millisecond",
      "displayValue": "3.9 s",
      "scoringOptions": {
        "p10": 3387,
        "median": 5800
      }
    },
    "screenshot-thumbnails": {
      "id": "screenshot-thumbnails",
      "title": "Screenshot Thumbnails",
      "description": "This is what the load of your site looked like.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "filmstrip",
        "scale": 3000,
        "items": [
          {
            "timing": 375,
            "timestamp": 5990687146679,
            "data": "data:image/jpeg;base64,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gQvlOMNJ7Rkc+4XvUV+qqS4RU1I6BuTTPbvdgyCR7mlvY8YaORzygoTWO/GSQ09eYwH5hJqpHbR1XE5BHm8jgMHPb5Aq+sNouNJXtmrauaWFsOAx1S5+JMnPGBkY98n8AvOndTPvLnubRtigbCJN3WBIO1jsFvfB3nB/5fmsdT65EkVOX00LZJnwgMbPnyyCIg529x1hkfL8Arusd5koYo3Vj2VAhmbJKKuTEkpA2SADsMgnb2GfVeaq0X+cVLxUCNzw90bW1TvKdzS1p4HHDgcEcHhW9PrV/wADFUPihkkkpo53NEoDGkwmQtBxnJIIAP8A4WXsWpmXKslhmjipwC9seZcucWzPiwRgYJ2Z9e6C2ZZLtJZr5T1tWJqmthmiizK4xN3b9vBGW4DmtPfO3KoTWS++WKCr6cLHuLXNq5N+1wcC3JBHqCMg4x9FMkQRKust2qrRbmGRnx1M6Ul4ne0jcx7WO3cnI3NJHbg49lSksN9e5xddJvPO4yBk5bln7TaW8eUjezI7HYPvmSIMDp+3XKjr6qSuqOrDKzytMzn4d1ZDkAjA8joxx/Z+9Z5EQEREBERAREQF82j2C+og+bR7DhNrcYwMe2F9RAwPYL4GtBJAGT34X1EFnDbKSGtdVxxuE53cmRxA3EF2Gk4GcDsFdhjRjDWjHbjsvqIGB7BfNrSACBx247L6iAQCMEBfC0HuAvqIPm0ZzgZ7ZwvnTZ/Zb2x29F6RAwPZMDOcDKIg+YAOcDKbR7BfUQfNjcY2jH0TAPoF9RAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBHdfXSptenn/q3qG5VUjKWmEbA9we88uAPBLW7nc8eVQ+n1zemWZxNPC6st9rqqmtFQwh7poDt24acDdw76HhT3UV6jslJDI6CWpnqJm09PTw43SyOzgAuIA4BOSQMBYr/ACzpqepZDd6KqtjzA6ZzZwHEESNjDQGF24uLhjGcoMJNrO909/q7bJRULnU1OZHEv6Yd+xMgeMu3bA7DD5T6nI7L5pvWVwu99skMslLFTVHxUcobGMSvjEZaGOD3NPDj2cex+6RSa209G3e6u4ETZXEQvOxrnlg3eXyncC3B5zwvMWuNOSRyPZXf6oAlpgkDiS/p4a3bku3eXaMnPogitfr2+U1VW7KKhdTQSVWAQ/eWQVDYj64y4OyPbHrnijL4m1gulVSthpI4eu2KOola4Nhb1jG4yDdk4w0/u43DjGCZp/lpYN9OwV+XThhYBE/jc8xt3ceXztLecc8eqp/5YUEmmqa8UtPVTx1cwp6aDp7JJZC4tAAdgDsTknGAgiGj9b3qpq7LbqmCOc1EbZJZpCGvkDpJWksy4fYDG5Aae/OOM1dYa9uFHeLxareII+jTTiOZzCXslZB1QeXc55AG3HGcnBCljtX0FJDCb3DUWqpeXjoTs3ua1pALyY9wDPMPMTjlVqrV1ipYjLPXsYwGRpOxx5jkbG/09HvaPvQQCTXF+s/Xo5nUdbPHUsha+RvT2t+FZI3cS8cvcXAHPcOwDwFKqTU10k05qW61FLTRm3GdkFONxJMQJ85zzngcex9+Lr/LmwGqji68uHxvkdKad4bHskbGQ/Iy0hzgOe3rjIzILfX01wikko5RLHHK+FzgDjexxa4fPBBCCAya2u9Jd6elrKWlcCIi6KKOTqStexz3Sx8nyMwGng5Oe3AWBf4nXOrtlRGxtFSzuZIWVO07cfD9RjWgOPnLtzQcnlh4zwty4CYHHA4QQO+6qutotdjNJSR1lRX0e5u8HJlaGOIOPdhkP1asfTa/udRX0IbRU7aaqfE6CMtf1amKSZ7A6PnA2Ma17sg/a9O62YmAg1RTa2vhudgqaqKBlJcaQSShjT0qYOmY0PdzuJOdvoBvGeASbmya7vl2bRhtDRQvqqyOny87ujuZI5zXNa8nc3Y3vtzu7BbOTAHYIIFqHUF2tesKplOYpbc2O3sfFIDlpmmmjLmEevDSc5+yqOgdWVNdVCG9VdPE2WkpH00LgRI98jXE8k+blpHb0Ww1TlgimLDLG15Y4ObkZwR2KDWOpdX3W13rVdIGn4WCCSSmmf26jaRkgiZjs4kudk+gIHysanWV6tdxrZdz6mKOWtYI5ANkbRVU8bXntw1r3dyPmfVbgQgEchBqir1xeKmrtdK5tPQSSS0b3Nb53VDJJ3Nc5hBLdm1oz3+3398zeNTXWl1XVW23xwOL544WOqNzmMBppJScAj1YB39VPsD2RBjdNXF9307a7lJGIn1lLFUOjBzsL2BxH3ZWSREBERAREQEREBERBjr7aKe80kcNS6WN0UrZ4ZonbXxSN7OaffkjnIIJBWCrdA2yvg2V9VcKqUxlhmmmD3E9VsgdgjHDmN4xtxxhS5EEWGhrSKeaFvXayaOCN+0tb/qpTK0gBuAS4nPH4KnLoK0PeJN9W2VjpJI5GyDMb3TibcOO4eOM5GODlS1EEVh0JaIY3NY6qy8Q73GQEvdHUGoDjx3MjiT8uBhXMWkqGPT0Vn61UYIZuvTybwJIHh5c0tcB6E8ZB44OVIUQROq0Lb6yJraytuc8hY+KeWSfLp43kF0buMBp2jhobjnHc5pTeHlomqJpXz15bI98jYuqNkZfLHK7aNvq+Np5z6qYogh1z0NTPhrpLfK8VVTHVRubO7MTxUODnhwAzgEAjBB47qQadtbLJZKO3RvMggjDXSO7yO7uefmSST9VkUQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBH9ZX6SwUMNRFEyQvfsIecemVCz4oTjvR0/5ivv6QdWaTTNA8O25qcf8A+Sud6i4T8PbL5T81myYstr7pbULa2pFe8d3QU3ivNFjNHTfnKR+LLnf/AEtP+crmK73ecu2tkPHzVpRXSq3cyn8VdHS5eO+aqctOWtOs4/E1zxkU0H5iqg8SXkZFPB+Yrmu33ObgOkP4q6lu0rTgPP4rDeueLai7bSuKa7mHRbfEeQjPw0H5iq0fiFI7vTQj/qK5ujv7o3DL3fisg2/u2gh7sfVR49Rv5vYri/ToZ3iDGz7cUYP1KpP8R4R2ij/Mub7hqJ5+y534qw/XU7+Q934q3h1GvkhPpb8OmpPEyJn+5i/MVVi8Ro5G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"
          },
          {
            "timing": 750,
            "timestamp": 5990687521679,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 1125,
            "timestamp": 5990687896679,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 1500,
            "timestamp": 5990688271679,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 1875,
            "timestamp": 5990688646679,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAHAAAAQQDAQAAAAAAAAAAAAAAAAQFBgcCAwgB/8QAUxAAAQMDAwEFBAYGAwsLBQEBAQIDBAAFEQYSITEHEyJBURRhcYEVIzKRodEIFkJSscEkM5IXNlVicnSTlLPS4TRDRVNWc4KDhKLwGGOywvFUZP/EABoBAQADAQEBAAAAAAAAAAAAAAABAgMEBQb/xAAxEQACAQMDAwEGBQUBAAAAAAAAAQIDESEEEjETQVEiFDJhkaHRUnGBsfAFI0LB4fH/2gAMAwEAAhEDEQA/AOqaKKKAKKizmo76lxSU6Kuy0gkBQlw8H38vU8WOfMnx3HJ9pk2txKtqW5DrThUMfaBbUoY8uTnigHGimLV+p4WloDMiah992Q6liPHjp3OPOHolIpsa1qpxuCXLNNguSJiYam55SwoEjIKckhfwFTGLk7IrKSirsmFFM8DVFiuE4Q4N3gyJRSVBpt5JVgdePdg003zXdriWqVKs8iFdXorrbbrLcxCNm5QTkqPH51BYl1FMydUWI3JNu+loPt6nC0I/fJ37x1Tj1ryLqqwS53sca8QHZWFHukvJKvDndx7sH7qAeqKjT+udNt2qfcGrvEkMQk7ngy6lRHoAM9SeB6mtFu1rFulzsbNrbbkQ7my473/tCApooAO0o6k84OOlASyimy5X+0WyZHiXG5RI0qQQGmnXQlS8nAwD768RqKzOXZdrRdIarijO6MHk7xjkjHr7qAdKKjp1xpcJWo3+2YQner+kJ4GcevrT/HeaksNvR3EOsuJC0LQcpUD0IPmKAzooooAooooAooooAooooAooooAooooAooooAooooAooooCqZGiHlvuL/UbT69yidyr7IBPPUjuOKmWhbQuzW+QyuzwrSVu7+6iTFyUr4A3FS0JIPGMY8qklFARPtB0vJ1CxbZNsktxrra5KZUVbqSpsqHVKgOcGmmfpnVF8Fkevku1F+BdW5pRGQtKUtJBBSCclRyfPFWFRQFRQuyya2zZG3JMVpUVc/wBpeZyFqS+kpTtOOSM+de/3PL85oh3TzqrE2lvuEsSGG1pccCHN5Lhx6eQzyetW5RQFWSezec7MekpehB1eom7slfO4MpHKM4658ularb2a3KEu1OtyYLcqJcJctbyUkkpdThI6ckeYPFWxRQFO2jswvSX7m5dp0JxcyzuW4rQpa/rCoFKyFDAAA6JwB5Dzp1g6M1Ey5pyUX7UxMtEKRFSWgsoKlICW1YI56ZNWbRQFZMaN1IzqZF7dkWSdLlR2WZplMKIbU2R4mgPUAenPNIYPZlc497j75dvNsjXNdzRIS2r2txSv+bUemPU55q26KAp229lEyPHsyHl25a4kScw+cE94p7f3Z+zzt3Dr8qsnRtresmlbVbJS0OPxI6GVqRnaSBjjNPNFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAUH+vGof8JOf2U/lXo1vqA9bk7/ZT+VRUH41mFDoQfvrh3y8nVtXglH666hH/SbnzQn8qP121B/hJef8lP5VGM4PBPzr3eP2sU3y8javBJv121CDzc3P7CfyrL9ddQnpcnP7CfyqMA56c17zUb5eSdq8El/XXUOebk5/YT+VenWmocZFzc/sJ/Ko0SrPTPwrw2+bNciPxZAYitvhEhalJACD1UcnoPX31KlJ4TJUIt5JI3ri/KXsXc3QnOCpKEkj5Y5rJ7U+qYriZC7y47Fc3bAEI8iMH7OfP8KY7mbTDLbcG4e1uJO0lLBQ2VeiSetItYz47OlIM15DbwZWtkY6Akjr91bR3ZizGVsSRKH9c3tlkururgbGMnYnz49K9/Xu8l3uxdVlWCc7E4Hzx76piTfV3WEYLzbcZCQNnOenvPPP8aysV2Xb7gFvLQqMU+HKs4UkdCPmP/grX2eouWUVWD4RMu0ftM1hDi20aevbgfkOlPgbbXuGOOqSKXdm+su0GS5KVqW7OOI2juk922CDnk+FNVxqW8uS7xZZDURBS08leUI2ZRgpA9+OatfTjjciN3rCgUrSCk1tTp7cMyqSutyWCWK1ReQB/Tnv7A/Kj9aLytIKJ0gD/JT/ADFM9ovch3T6LZcYbH0iwr62QhIG854Ix7sffSmUtStuAkHA+ykDy91apJ9jJtruOQ1JeiE4nP8APmQj8q9Oo71/hBwfHb+VNWeOc14ogfs5qdq8FdzC/av1BCt0mS3cnEhlpa+UpPQE/u1z+vtx7Re8wNSvYJ//AM7P+5Vs9oMnuNH3ZfAzHUn7+P51zBGR3s1hH7ygPxrOokuDWDuda2jV2rHLLBkybu8t1xlC1/VoGSUg9Ntbk601IpYT9KOg9eEI/Ktsdho25hnCShDaUjHuGK22ayNuTh3TrjSsZ3Dkj4Va0bcFbsTxdVamQ6pDl6ku7VkYU22CfcMJrc7qTVPtDbDd4kBRUBktIzjPmNtTFESDACpBbaDiU5U4UgE++qwZvzjdwIbiqlvqWVJS3yU5PNVe1LJpGM6jtHJI09oN7jyVomBxxkKIC2SMgZ4yk/yNRu99o+rXdQsCzTVohoT4462krUvnOePs8e+l0TTNzurxcnL9hjKOe6aOXD8VdB8qSXe2MW+RLZhNbWW29vHJUojBJPn9o1XMuFY0ahS993fhff7GcfXmqndhXeHPEFuYabR0T5ElOMcHpnoead7FrfVMxTDDj+9wtBxxQa8yrAx5dOaSWXTTLlqZlzJCWYC46A33ZBUoEhRx8cn76cYs9LKHI8RlqInbu3KBCykcJyT7gr7qlQSMpVHPtZEf1ZrHX1iuhdRckOwnGSstqSgBggY5OMnJ+NN1n7TdUP3a2W65agQy44zvcU20hW9SjwM44HB/nS27MruAchy2VNqlJU2pSknLiCThSeTwQD4qQ27SsK1utypTqHFRUhCFqO1DaRwCr1OBjio3K5ooO2e5LJeq9RBTcCJfX3J7L5Ep4tIDSWscHJTyo56DpUib1bdEtpCnHVqAAKu7PJ9aqC+ar+jmUpteFuOkj2p3gcZ5SOcfE8/Co+5e2EOKTKfkGQkkOELzlXn+NZ33cI22bfex9SWZHqayChWnf91ZBY/6sGvPNrG4Kz516CCOSRWoqz1wmvAce/51Asb8j940H1BUK1Agg+Q99eABwf4vp60B5JfKI63AFLSkdB1VTBqu5zI7CTHmssRwMhKQFFZOMZB8sZqRtlsKBXjaOVA9Me+mBm0QJAlRpmUR2wVJaK9ykEHAHTgAdOfTiuvT7druslXHdL3rY+YyXlT6LPbXI05UotPAPhB2p3YKtoUfIZA6VJ1XQT9DtO3RltttExSVpWjIwQecH49fdTG1CRbW50J11x2GXA83tSFtZ2JIz6kcjp8xT0ALrpuYy62Apl1tbiCnb1BA4+JrdK/Bi7Ra3FZInuOOXINMpWxFSVq3LO1xIVwBx15/Ctz13TOtC0ststykhJbYznKVK8jnJx0pRa9NoftbL7cp/vpJVvaKgEjB8xjn86cbdbrdCubzH9LZ9mQpbinD4VgHIPvxnOKlSe665DjeGfdYgk3kPWm1tPR9kqOpGwckJ5HPpjFIdKawuNvursNL4QPEUkowFdT9ngY9/X5VJ7eiGqLIfW61CWW8YWySlZAzwD8Bgmo5rY2+RMhqtzTLRREQglvOVKAxk5HXirSzlkQxhFpQtbxnExGrg6liQhBC3gFd0vJ6cjIPh86lLN2bltJXHdadGPtNEKH8a5xfeecuE5pTgCA7kICRjjHNbIUh6FFcf9ocZeVuU0UKKSnHvFTulB25IUKM4pyvF/P6Yt9TosSnCfEOfWlKF5QN3X31RVo1ZfkW1qYu4LKCHFFLqd2Ajb6+u78KW2ztLvMqSxGDMcuOJKgVtkcDPofdU9bymR7JGXu1F9V/omfbA+GdETfVxSEfer/hVCaYYMzUMBhIyVvJH41J9d62mX23pgyG2kJDm47AoEkZHmajelJLkK8tS2SA4xlxJIzyBVZSUslVS2Pa2vz7HQsVqbCP9FfKB+4eU/dT1a9VvR3XGfZBKmlO1CWDuB+I8qrSVdZzq0e3PSHtyEKKN21PiSFYKUjyBHnXQOm7NDtFtjpTHZaeLaS5tSBlWBmpblLhWLqNGny9z+GF83n6fqRhnTt6v8n2m9zXWGD0jtK6D+AqXWyzQLUztistox1OOT8TSiVcWIwRvWlIWsISfUnoKiNzv85VzkpbbQLT7KsJeJ8S3AcEj3AffRRUc9xKrOa2rC8L+ZJLEuUefBVIYVtY3LQSogYKVFJ/EVFtUWqRedOz7bpplXtUnCVSFKIAGckZ9MDFKNE2yMqOzHlud2o+ItBQOPfUpud+h2YezW9CVuI3JVsVtQBjqo+tRvx8TNw9XwMI2mxEsaEXKb9a0yG1Ok42+HG4eVVFcbRJnqXDkzXkqDqGWHWuS4lAAKsHPU7/ADPCjUm1Fe3X1tu3CSkRkkZycA48kp8z76i7s65XqS4zZ2VMDu/61RwsjoMnyHPQVRu+GbQhjdwvP85Hi83y26did0EiS+ygJ2Be4jHAK1eXwFVrqW83XUUhthbqW0OvJbbQlW1KBjJwPmkefWpBK01ElNOxQ+6+8txPeONYCU7eTyfLpT/b9Pw7S4wEM+0zkpKkISPFz0J/d4wMn04FHFf5fIlT/B8+/wDwYpmi4sm5WqQ/KUGojAW4geHCs5wr44H39KeE6agbRi0OKHkosJyffyc/fT5a5CUhqTNbDklzJZYQMpRzgH4+88807Fm4LJUAnB5H/wAxVtt+Sjmlxkr4uHHOK87wHqKxQjHXmghPnz8K8s6zZuT6Ud5gfZFaspHTI92axClbslSR6DFAbd+8gqGB5DNbUrGenPxrSVfvKz8BXgOMFIHzqAb3Nq21IUAQoEEE9RTFapbEa7G3S1toUr+qcWR408hIc/kfhTqpxQUBtSR51XevJBauEZS45aHfKUSg/bHhJ+GRn7q3oXvdFZNWtLgsWTaV7X0pZJIRnCs8YCvsj4AjPvrDQc43S03+LIfcLsOKHnDs2rVsScBXHixt8z61GNM6v3OCDd++DDCsNSeq2+oBPqnk1Zmk2G13a5KbS0RMhuJS+3ylxPlz/wCI10Qim7omtUkoKMkvg0QlCIaQw5GcaWGhv8II8JPOR5H76W3VbrcRxUZLKnpBA5JB2Ywogj40luTEdMdlqLHUiSlexwpVgKTyo+7n7+aJkoQ7eiQ8tSmWcJUkdMZ6jzBrS2OTK7unb8mNUK1xu9loLbhcUA6revcVeXT+dNn0A1dmu/isBt3PdhKlgJGMedTmwew3EfSAbfKinu8lzhOAfdk5pZaWm0O7m0pbUHPMApI+HmPKrxVzOo7JXeXyVHqTT0tEuU8wladzpH1fizTfHh3G7vwrdBiyX3UDKkJbKsgDKiR6YFXfcI7bktxpeCvOcgcEevwplfaVZXVTIftCXyCgGMDvJ6gcepFJWUWysIOU1F/8I9PtKIpt9rkxjCU42N6XiEDarnOPfj7jTDa7Qtq8uSo232dpCmG23FbVFQGPPyyTTtqSXISqFqG7F15RAQEvAlY3EnGD04+6pBZrZEuWjbhfnHtzj5UWoaQULCRgbgen7x+Q9ahx25JTjLBVWq7HcY9wLrsVSUPkrSEkK/geuMHFbdDWeVJnPBTDiDsKQVJx7z19wNTLtL7QVXXStnscSMuGYpSVZIOdidoIOM5PNODCXraLW4zE3yVNrWsJXnweE5/EetXcXFmSaawTaPoKXcpwmrWhqKpaVpSpRyUAjHh8uK2dql6kxbcuDb5TiXVqS2FBXmVDqak0Bm4fRzbkmSTDCQkoHB3nJPPmKiV1nxbjOXaY31S+9LDjuUgNkHn4eYzjiiaawNrTI+/Pkx7nZLXeJrrjbEfe9IYCiGQVE7uhJ9AeKl13ujEK3QINmUqYd5U6tvIOD67v8oDn1NYWG2sQlPO3FhtciQjuw44N529OnOR7sfxpfcHoNsgNsTF5kLVuS0wnLzp3dB6A4HJ5xVU1F3NkpSShbPawtZQY8IMuMMblDcCkkOIB55VnGOv8ajVzv6WVrat4RKdRwVJH1SCf/wAjmtU5m9X9fsbCExmNwCo7avsj1cPmaf4NuhWNam4LKZkxWAFEDajHH39P+FUS3ZWEWlaDtLL8dv8AoyRtPOvqE/UElaW1IBCVcqPQ4SPKn0Me0xg0w17HCHGBwpaRxyfTp19K3OpS0lEi4vd8+4TsSkbiT+6hPn+AFII1zhT7g5CuEpAebT3ggJOfh3iv2j7ugqVZYiUd5eqb/nw/lhM3dIzk9FnsKEqcSR3sgDwtg9SPU48zx6eVLZSmy083YPC53gQ7LXlRV6nJ6n86RWC1KZeuc2Ss93LVn7IB28AJ+GBTTqXVDTKfoy0tJLychf7iD559T7vvp7qvIq5bsR4HW7XSJpiIhprC5e3alPVZNQtd6vbi1L8A3HOMr4z868hwVKeDshwuyHDlSlnJ/wCFSVMJW0fVo6f/ADyrmnXbfpNY0sZGs5J5Vz7hXpUUjJJxWjvSkcD5UBSs7ldfd5VyHQbgTuyr5Dris9wPAPNJ8nrgmsVEjoKAWBW3qc14p5PXP4UkS4oGvFHcrPkKkCoOJGc5z50zajjR7yyIbraW5KT3iHieiAMkgeZ9R6c0sWvarzNIJSmAXFkhDgR3pXuwpO0jBH3qralfdgpJxXIyLhKtynA0hLTq4y+8XneCoZUFEHjyxj5089h97kjU7luW8pcJbTn2eUFQHX3dDWq0vMXk707e+Uhe5P7wJ5KfdycjywMU7aGLsDV8JlKEtRXspSEpG1zwHCk8cDGPu91dUbNplZNxi4/z9PuOKHoklp76IdZlJbUsOo34V1/ZyBkU3zG5U+MEQUpey0pbsZR2kggZGSeOT+PWq8uvtMG9zwnelbLqlEtnG3xcYqbaX1c0hbYvjeF7cJlNjnBx9ofzqNyeJGkYYvSd34fP6ef3+BtakuRW1mNHcaWpYcyoA92ScEJHGc8nHTk8U9RkyodrcnXh8K24Uju0jJCuR55B56YpYqOw1pZT6HUPtNJLgeQQrdjz4xg4+BqJ3Vuaww4qM608mQnvFpfAVvVnIO7jaPEOKtUTvujhGVOd4qE8tYZMYs9dweJhoC3VDeCkYT1APn6HPnTTqOe/ZZKn1tR5wW8UoS2vCRwTkYHoOnWovZb0/aksuPjxoPdgHc2pKjtUsHcB8j51Yb8a33RbQ7ppYBS+R+4OD4ccDjGevHxq0qqhFVM3Mtm6TpoaNQwHUWZx6Q7u7pIWQ4nfyOg5+6pNomypvUKchFuckF5sOtKcSUhIKccY8IPTAz5Uj9vauE9yAYnfx0bHHC4Pq3UbhkZ65r3WPaTe4Ux7TuiIymcoRhxICu6BSDhsYASAD1OflSpHc79i8KihScLeq/0sRq7aJsCZ6IlzSqPIyNxd3BbYJ4z59T0pc/ZI8ENuolOSHAC0pLK8qQnPgB54yQCPjzUXNmvxlMfSUlEm5vMqc7xayvncPtK81cK55xUw05ZFx4gfdLj1xcb2KUk8bftYPzPX+FRKUmmksk04U4yUp+79RPbbtdXZI3S3VwXll1bT6ggNAjjaMZwDkU9NlhyU5dtsZlbgHeSXEbUgAYAGf2vP4+tIpDkcyvZ2WRd7jgpDbfLbY4+0rzwf/wC08RNOyn5zMq/upkBCCoNJ/qm+eEhP86pFtYjl/Q2nFP1T9C7eX/P5cRNSZ90cWuzpd7lIwZ0hODgDo2ny+NNN1nx9OLjgNpcuTie8ckO+JYJ93/Gps/cu8kIt9oYL723B2fZRgUyM6Zt9uuQvF8damzAfEp3lpvoQEj9tWCCBjFWlG2W7spGsn6YxtH6v7/sK9FWF2eptdwW4z3g71lZdxuyjxkJHUZKjk+dLr7Nt1vMlmyhD7URADzpOW0H/ABj+0rr4RxUU1dq1aHY8JySuO5KWlpLaR9c4kn7SgOEJ93Wo3oWTM1HOultairbtz8tL3eJUNiUJwAk8dTwSfdRXZSbjF8fp9/t/4SO/XGQw9Eh26Qpy8TSkuPqTuU2gkeFI6J4zxWGndMM2S5Sb5eH0OXCQSspJG1oHrz5+QqR6gkWnTAMmQpCnc4U4BlW48bQOvyHzqtr7d5epJASpJZhBXhb81ehUf5UlJU0ZXdRjhqPVUm5vORbUspjnhT44z7k/nTfbLcEAFKSB6kdTW2PD2s+EoR3ZxjHJp/jgtxUEFAT0OTk/dXDUqubOmFNRFFrhtszEjaklac4V6/CvFSnEqIJAwcYIpREb37XNyUOIIwB58+lOKpEXccjJz121CLEGBWTk43V7kpPJBNawtSj0wKMBXAOTVSTbvJ6mvDk9D91aVBKftEk+grAugDHQe6hBm4QgeJWVHoAawByAndx6VpUpKlZHTyrfChPznPqRtbBwpwjgfD1NaQg5OyKSkoq7NElwMgKU5tBIAzTFdH479+jpQ4lbgirQpCCCF59f/nnU9VZ4rjTcR5BdaUoglRyckYz7qhmoLIwxfGVWtgCSw33bpBwc+XHwrsjR6eWYqTq4iRhM19Fxt8eO4Wfr+Fp6oTu5x99T3SF6alalgxn3UszoskNqSoYQsZxx6Hr7qZDom+vIZlRLQ8l3v+HHVqSCgn/Gwn8aU3TSLcLWLN1nXOLH2SwtTTbu9Z8QVt8IIB58zVrd0N2Nsw1ZCMaTeG+6LqBKXktjCm09QMefrUXtjUmW60hYG1twNqJBA5wfF5gGpjqnUkcasuESWgx0laSHEncpJIz7sp56VpdtCe7cXBdS37SnJdQctOHjnP7Ks1MpbnYKDglP/wA/4McaddNPuktuKaYccW3hQy2spJBBTUntGp7XdJjLlwQITwR3e9vltQJBOR5dB+NQi+sXKVcVw5KnEojur7v1AUvOAfXkffTVNhybE8GpCVLSN3dqCeVCsKe9L+WOl1YzxXV/j3/6Xm7ESLCtK2mZTbji1960Ekbev5+lN+n7U9FlTHIClplFkgNuOlTaSrOCBjI+yfXg1VemdSz23VeyrWgISpwoJylQAz9k8GrJtOu4RVuvEB1h1xABdY4yOfI/E1p1I/5YI9mnL1Unu/f5fYVaeTd2C8XFNrXu7la9quiNwJ6cnKevup/0/bFMwmW5sl17ct0lpCjggEDafPGc8HHXNMv6y6YEZ5CZkwBxSlFPdncCoKz/APmaapGvmocT2Syt90QpQ793Bc8RJOPIdal1Idnf8hHSV370dq8vH7k21NOjW9MV2YtDPctqCYqT4l565I8uAais3UjsxLbCnXIkGQsNMx2ftucY5V5CoBquVLTd243170hRSSFAqU4VdKl2lbJc5d8gQ7jbpDDKHiogoIW4cKSRk8dT+HurNuUucI2iqVF+j1S8/b7v6E+bvVn0xZYj6eWHlJSlTaMlRUM5PyH4Uredl3NIdkKchwHHS2EqT43RwlO0ehJPPSt7PZ1bbBGfud2lIO77MeSvLTQ8sDzIHStvta9Sy0sWxLkK3R2kN98oYcWkZI2DonOevpitHJWUUc2zc5VG8X5f8yZpfYt0z2G0x+/eKULSy2o5QoAHc6seWcjHn6VjOg+wxvbrm77TMaTltA+w1joEJ+4Z60tBjWdKWbYwlbv2SAckq6kqPUngVqEfvFrfnrDrihyg8pHnj/h/GrKP4jKVW2IfPu/sUtpTSl7u2pZN2u6FR4RcWvcrhayQfs9emQc9OKmd0u9u0fYGrVZQGXVIJCY/9YokfaJyef8AGPyrRrHWWx4Q7GvvJA4W5gFDfu95/D41E4sB150vO949IcJK3FHJPzrOpVUF8SsKbkNbEKVc5LD01xxQaUVbCokev355qWxmO6QEpPJPHFESMWkgI4Kzjdnr8Kc4sVPfAEOOlH2wOMHnjJ+FcMpubydcYKPBgwkbiHVNKK/Ic8/KnFhpoHxLG0nkYzj0rBpKe7CEsJ2pJyGz/FX5Ut7naW3ZZZ55CQcnFQkWNgQpADjI2g42oAySPgPdS5qGlTaFLYTuIBPh860wlFcfvu8DLZzgIwDzxnNYhuNjmZz55WqrFSBEgdTk+7pXheOMeXpUkXabDEGZt/8AaF/9XCYK/wD3KwK0KuOmoiv6LaJM1fkZcjan+ygD+NNvxK7hg354xnNOMHT9zuTZVDt8l1PQqSg4HzpYvWUtkbbbBt1vHqxHTu/tKya1wZ13v76kTbjKcjJILm5w49wFaQgpOyKzm0rsXQNESQ6DdpMSGynqgvha1e7Cc4qRpj2WG2lCpTzqUjAQwztH3k/yqM6gvUOwRWi+latxCUoR5e/3CljcpiUxuYcQ4hQ6pINejTpqCsjhnNyyx9mtNMMLLFoaWAkEiS6XFEfAYFRjVF8vfsTUqxFth0KAkoitJQ4RkZwrG7pn306Q7s9F3JdbMhISA2CrG3GeD7uaj86a+i4GUUISlQAWhsYyB0PxFS1cRlbgq1y7XSZepqbjNefMRRUlTzhKsE5HXrTdJmJmLaEPvWu7ISfEV7lEn7+f5VaU+3WyYZDrUZtb76chaOqlbTwR5HmoJcdKPWvTgy80hxTgUkLOFfOqSTSwbQs3kz7QIke6XtyelSiHYzT42jGfBg4PyPFNVh1LKt0nuW8OMrwlbauUKPmCPL40rlwZLFqhNsKMhSo6gpSRnaAtRPXy5poscMPSlbiAEoPiPOAfME9R14PIrCXPxN4VHDC4/csuK5HlSHmmklib3xW5FfI3JVkE92rz6dP40glRu+vLTi8O7Atrunx4m+cFWPM4z0qD69uDsfWU92Ote5RQpB8uQD/OnmyaxRMjIZvbPfJA8LmcOJ8uFfyNWbawyYqE3eHPh/6f8/UkcrR4j6of9meiqL0Z0hLYG1BIwkj3nrjypnVDeZnm2pU1IuUZAShK05SsEAkg+o44qbMSGro0hUZ5MhTTWEgHa+Og5Hn+NMSLauFcJEuCttW4Fva/4SkqG8n8D0z0q6eMGbVpZw12K2fhTlzJDKFqWpLpQrHGDnHQ8geVPTGnJVqkGHc2yHXkB1KWzlW/ySfv/Gp3DsEdi3upUwhEhbY3vrV4isEknP8A4VedONm043DeVKdeLyhgrmPqIbbTkHAz1PUVWNky0m5cu/1ENn0zJna59vUtDDS3VFIUoKK8E4I+Xr6VYSLvKi6mExbZkTkpUGYgO5ePJSz0QPdTba0okvSF2pz2WM8pS1TXyO9WlOchpP7IAPWkUhfsNjkybZluZIWlCFKwpakk5+87STmoTclj5/YtNRpv18+Pu/8AXP5EpQl+8R511v7pdmxitKIyh9UyoDIwnzPI5rRY3piFPxGkhIG1Knh6AAY93n76y0yw5dIr8ia6EIL5K0pUPt4/kABn3Uan1TbbAx9epKXHMlqO2PEs+v8AxP48VdJR4OedSVT3vkOb78S029b8h1DbSASt1fHX8/Tz9+eKo1Rq2XfHFx7WXY0BXCl5IW7+Q/E+dNt0uU3UEgOTDsjJJKI6Sdqfj6n30phMIISlKNqScADz+dc1XUdomtOj3kaItvTFaSEpGcZOKdGmVpR41lOegB5PyFZR0pQ6pITuI4G3nn40tZjvhKUOLTHbHUnGT61xttnSlYyYjjchLbL5SCCd2B8aU9ytJW4CpzefEhtRwR7zXgDXgDSXJLmftKOBTk57Wv6sLbjtlIwByffUpAIqXH2gEuoZY6BttPT4k163GjRHgVr3ZBJLmDx7q1twkxwUqbW4vOclRxSphpp8ZbjpDg4IV8KsQKWt7rrIDaQyfGAR507JhNBI8CenpSdJCmWtqNuOMDyNZe1O+SAR65q6sVKpUkgY3J/tVhn3gfOsSMjgH416hhZG7Hh/ePCfvPFVSJsYKG9QSCMk4FSRqei0sohRkIW6Bla1EgFXn5Uis1uS5eISTlaVkLGBgHjPBPXkeQqWPWCEJZccd7oqPKR4lfwJH/trrowkk2jmqtN25INedPS9TyWnpEptpkI2KAbPi5ydualDVrjMMNtMo7sNpCU7TjGKkbcaPHQW2YyjngqeOCr/AMIyT8zTcpG3w4VhJKST1J6/wIrrjjDOeSurobFNutj+tCveoHIqN3m6IaUYyJUdctR4QByB76mbiAoEeRqqtYaVlQJXtVpbU80tX2ANxQf5j30qJ7fSKTjvW/gX2e9sLuvdoWpiQCMjHDo88e/rUtt/0ZdnkuzGQ6614dqwQfmAeaq+Jou9zF+2PI7t0ZW2gK24xzwegx8avHs6sIlWyNLuDiEslgl5ZGd6j02+WB6+ZHHSs91lZmkkrtx4IXqGGiwXlFsEhbiH427cGxtcQvnA5zjnPxqIuWNMRySuP3paebKSkKxknjJ684zzXQly0exdYTTKmkOOMBSojruQQk8lGfxHXqagt40xJt25SknYPIjr8PI1Kimlcpdoq3VdljSrmHg0vvC22Sd+c+Ae6mcWxmOyEBokgYyVVa0mwIfiKkJeS2W0HvEOjarcMYSB58Z+6o/KtCDDU8Fg84AHmfOrOJF2R2wNtLtt2cSlbb8KP36FJJBCt6QP4mltu1xKeQiLcmGpqTnaXeFHwlPCh1OCevrTtpyJDKbnHuD4jR5DAQt390d4k/icD50guOiW5C50mzPJchRiEqKlDxK88H48A1jKNng6oVZONpK6+P8ALkkt1/8AaVbItgTvWrOXXiU5yff/AIxqZQYDc2RHF+kpelnaWYzYKWW/QAdCcA9aqfTj0qDJLamnZD2zc0lIzznzq0bGJUuXFfmsoiKWkJUhK93RBOeTgdemaKKfLuS6zS9EVH53+pqmsOtWo2+1Nh+QhksbsdAcFWCfLPnnFN71oei2qKiS8HJSnQtzbkg7U8Af/PhxzUl1TcvoiDtipbQNmXHXFFAAycFasZ8ugyr029aqedqSZOaLDc1azuV9eG9hCVYylIzwnj4+tRUlGKyZQTfA46j1VcYZiW60yUtx2QlwoZUSCs8krz7/ACqOiFJn3lM+c6t51SSFFasnP5VugW9GcYcUc8HoPnT5EYU3lPdE+XrXFOu3wdEKSR5GQNmxLa1Y6gHAHvpwjsbEgoZBV5qcOQPlXjAk4V3bBIIxlKelb2Yrziwh95LO7yKqxNhYuPKBQe9bbbP7g4GazajtKeLSlrkugZyVYA+Wa1J7pL5YQ5ubwPErz+6lDrQjyFFpxIA2p8JxnPWpINrjx392G8lHAIpUpEuYttLSUpQnqsikK9rUdSwlJUVFJHVWM+VOEVeWUuJV3ScYSlPJHxqxBmII5W44p1eOfHilzEdptQS031wc5ztwKyKQ2jcwStpSfMZ5rKGttCcJRgq559askQbmG8FTawoY8QI6GlSXmwkDOMeVI+8QhW50KSP2uPx+FZ7Gzyk+Hy48qtcixB4doedSl1DIQ2R4XHSCD64J4PyBp3i2FpRDju99zoVZKUp9PErn7gmuj1WC0KXvVa4JX+8WE5/hWRsdqOM22EcdPqE8fhXXCnGPJzSqNlDxYbbKdqMJByk93xu8yCs8n7zTlGtb+OG0sJ9T4T+f8KudFmtiF70W+Ilf7wZSD/CvJVktcthTEq2w3mVfaQ4ylST8QRW6klwjJpvllB3LUlgtZUy26u5yx/zUcbhn3kHA+ZPwprRfZd5BQ8w3GQ2dyWk8lI+OMfdXQjWkdOMjDVhtSB6JiNj+Vb06csiPs2i3j4R0flTeRtOeUudEOYCvI+RrF9G4V0QrTlkV9q0W8/GOj8q9/V2yn/omB/q6PyqeoV6Zy7OelxmigsNzYYWHDGdJHPqCOlK5OsGdY3q22uPcmbCwhSUPx3AGyR0IB+yrjoPwrpVWmrGr7Vnt5+MdH5UhkaD0jIcK5GmLI6s/tLgtE/ftrOVpdjanKUO5AJdzlqu0K0aeYddjtne7IWD4lJ45URS8Xm13FSIDkcB51vvFIWrwpSenzx91WHAsdpt7BYgW2FGZP7DLKUJ+4CvEWC0IkiSi1wUyANodDCQoD0zjNL24K2Oe9Y2dy3XZiMtxK4b3jbSpXix6A/OtKLOy60Wjb3wlR+14scf/ANroiVp2yyyDKtMB4jp3kdCsfeK0jSenh0sVrH/pUflVt5G05vm6Qt8iLJYcjuhLyAg+M+Sgf5VrtmlIkOF7A33qIW8LWCvrjKgc+mQK6V/Vawf4Etn+qo/Ksk6ZsSfs2a3Dz4jI/Km5CzKBCYsZSxFYCWUDOUeBse8qPX481Er3rxm3XBowXBJU0CkoaG1PI8ldfurquTpmxSmi1Js1uebP7C4yFD7iKRjQmkh00xZB/wCha/3aq3j0ll8Tiy4XWffn0rmYDSTlDKOEJ58h/PrTpaogaQHQ0lXP2Rzj4iuxG9G6Zb/q9PWhPwhtj+VbDpTTxzmx2s56/wBFRz+FcsqMpO7ZuqqSskckuSSD9WgZ6cdBStuaVNgKCtw9B1rqo6S04ethtX+qN/lQNI6cHSw2r/VEflVPZ5eS3WXg5WMt7blKVJbPAPTNYIe5T4cjz3c11d+q2n9uPoS2YznHsqPyrw6T08etitZx/wD8qPyqHppeR114OaVbO7SseJkeHdjBHupRNIcYCkFe3jgtkdOK6QTpewpTtTZbaE+gjI/Ks/1bsgTt+h7ft9PZ0Y/hVvZ35I6y8HOMTJbIfJDa/dzn3VlEbcWsoYJPiGCryHrXRn6uWT/BFv8A9XR+VZI0/Z0fYtUFPwYSP5VPs78jrLwURFXt+o5yhPP/AM+dZoaQSVIUcjng9KsvtItcCFYA/EgxmXi+gFbTSUqIweMgVWoDfdJKOD7/AOFUlHa7F4y3K5ml047vaCokY+BpOW3EkpSrwjgcivFpU06FjGemDW8PnHQfd/xqpY6FooorvOIatTagt2mbUq43h5TMRK0oKktqWdyjgDCQT1phV2maWTaPpIz3fZ/ahDKRGd7wPEEhBRt3AkA+VYdsNhuOpNFuQLOyHpftDLoR3oayErBOFHocVW0ns71WuwuhMDxrvrNyTF+kt0hKEtqCyqScEqJ24PJHWgLjtOq7NdrDJvMCX3sCMF98vu1JU2UDKgUkbgQPLFMsLtP0xPizHoEqRIXFjGWpkRnEOOND9pAUBu+VNOi9J3m2dnmo7ZOZbRLuC5Lkdjvw6tIcRgBx3A3qznxGobE7MNRxYElqQldwde077DHL0pP9DfP2mkjgFB8j5fjQF5RbnEkQ0SUvIQ2pKVEOKCSjcMgKHkeelKDIZClpLzYU2NyxuGUj1PpVOyuze7PartBQloWKQiG/dUFYz38ZBAAHmFeEH4U0wuzHUjF4vLshK3XHWpwbmoltJEjvm1BKVp2bzyRwpWBjIoC37lqq22+9Wi2POKW9c+97lxspLae7SFK3HPHBGOtPK5DKAgrdbSF8JJUBu+HrVHzezCbHtGim4dghTlQGX13OK/JCEuvLbQOVc55TxjjgdBSJ/ss1MLJa48liFd3E2x2Elp+UUC3urcK0uoODu2ggcc+HjigL9L7Ie7out97jOzcN2PhTfadQWq7NS3LfOZebivKYeUDgIWngjny9/Sqfmdnmq16xtc5TUN9uFJhlU1txCHXm0ICXSvKd6jx03Yx5Hyy/uaXGPZNQ2tuxxFB25CZFkx5SGy43klKClSCCE5+yrg5PpyBdy32kNBxbqEtnGFFQAOenNYiVHUtCUvtFS+UgLGVfCqwvujb5cOxuHp9ceH9KpcaU63GKWmwA7uOOgBx1xxnpTJrjs4vUjULCtNW2BHtsIRjDcZWht1OxeVhRUkqJ5JGFAY65PFAXO5OjIQ4oPNrLaVKKUqBV4evFINMaigajs0K4wVKQ1LQXGmnsJcwCQcpBPmDVUQOza7xb8zdEQWkSzep0h14PJ3GK6ghA6+p6eWaXdj2h75pO8oevMVt9t6AlkPl5KlQ1JWolpIzylWQrI86Atz2hnvFt9833iBlSdwyB6kVgmdEUMplMEcDhwefT76pW4aB1TI7QH7uiFCajmTK+sjuNo7xlxpQTuG0KJyecqPXgDrTN/ceugtYQm0xRJ+ggznvk/wDLg8TuznrswN3TyoDogvNB1LRcQHVDIQVDJHwrFuSw6va0+0tXJwlYJ44NUtO7OdRSNVCX3cVTjsyNLTd1ST30RttICmQjHOSPXB86Rw+zK8QVRZrbTcGb39yMqYh4FSGnUENHg84JzgdKAvVuSw65sbfaWvBO1KwTgHB4pp0/qWBfJFyYid4h2BMXCcS6AkqWgAkpwTkcjmqT7B2EOdoCXYUKK3Hh2T2aRIiuKcQ68XUncokDC1AE7eoxzTmrs5v69YyZrdthsh2/m4ountX1rccHJRsH73x+I6GgLxS80pa0JcQVo+0kKGU/H0puuuobTamozk+cy0iS+mM0rdkKcPQcfx6Cqa0z2Y3+Dc7kbk24+VsS2zKbnNtpmd6DgKw2XM8g5UTgjjjisG+zG9nSzLT9ntb0iFdWpTEVxTaVvR0pAWhbiUhJKsDnHIHPNAX4khQBSQQeQR50VphJKIbCSylgpbSC0k5COPsg+g6VuoAooooCIdqQJ0yMKKT36MHGfI1TS1LHhz16gj31dnaNbZl1077Pbmu9f71KtuQOMH1Pvqsv1L1E6jx29YX/AN4jB/GuarFuWEdFJpLI1h1t5sjjenyz1pOUqyetOv6j6jSvP0a4fg4jH8a3/qbf/wDBTn9tH+9WW2Xgvuj5L1oooruOQatTagt2mrWbhdnlNsb0tpCEFalrUcBKUjkk+lV5ae0+Xcbo22hmIiG5e125JcadQ53QaC87T0XnrnA91TjW+mGdVWlqI5JdiPx5DcqPJaAKmnUHKVYPB8+DUZgdlzUeSzJfvUqVIRc1XNbjjSQXHFN7CDjAA8+B7qAV23tV0tcW31x5MkBqI5N+sjLTvbbzv2kjCiMdBWyH2o6WlQpspMx9tuKhta0ux1pWsOcI2JIyrJ44prZ7J4jdrt0IXR8ph2+ZACu6GVCQVEqPPUbulFy7I7dcWXW5U987oMaGghtPgLH2V4OQc+aTxg0A6SO1DTUeDFkuPysSH1xQ0Iy+9Q6kAlCkYyDyMcc5p11JrK0adEIXFyR30wFTLDLCnXSkDKlbUgkAA81H7R2Yw7c7ZXRMQXbbMXMy1DaYS6VICQClAAGMZzyad9XaP+nbtb7rCusq03OEhbSX2EpXubX9pJCgR8D5UAkm9p2nIcy4RXXJhdgN97I2xVkITtCgSccZBHB5zxSbU/aJFhZYtRbXMakQ0PCS2sJDcjlJBT+1j7qUq7PojzGqmpU6Q8NQJbS8valKmyhG0EEcE556YplZ7JW/r1y7/MlvvOQ3FOuMoB/o/wBkYGBgjA+XnQEib7Q9Or+k1mS+iPbt/fyVRnA1lCglQC8YJyQMdT5ZrT/dL059GqmKelJKZCIpjKirD/eLG5I7vGeQCQenFNM3skttwn3qTPuMlwXNlTSkNNNs4ysLClbQN6gUjBI+Oa8Y7KIrWnJVq+kGcyHUrW4m2RkghKSACkJ56k5znPQjmgHzVurVWzT1quluQ3smzWI+JjTiCEuKwfDjcFfEYrG19o+nbnfkWiO/IExb7sZO+OtKC439pIXjGfPr/GvJug48jSFlsHt8nurY+w+h9zC1uFs5APuP4Cklt7N40GbAkJuDqzEusi6gFsDcp1OCjr0HrQG2465ch3vVsAQUKFitwnpX3uO+JQVbSMcdMZ5qPPdrUkzrVEjWaMXpkFmYRJnpj7+8/YaKhhZHxFPuruzpu/3iZcIt5nWtc+MIc5uOlCkyGh5eIcHBxkeVJtSdl0e9R48D6ansWZplpj2EIbWkJbxgoUpOUKOOSOtAWIkkpBIwSOnpXtYtIS00htGdqQEjJzwKyoAooooDwJA6AD4V7RRQBRRRQBRRRQBRRRQBRRRQBRRRQBRRRQBRketNmohKctxjwUud7IUGitCiju0n7Stw5TxnBA4JFQl2DeJki1vTIDypMcR2nncDxlqWglfzQlSvmR7qAsmioNq9GoJr1ygxYrrsB9h1pGQ3tCu6BQoeed+RyfkODWxbuqQ4sMB5TCVK9nU420FuHLeA6APCnlzlIBwB59QJrR54qCh/VbsruiJTDK32/rQ20ooQVOBY+zjAHdHz5zyeRWmJCvr959pnJmIeU3HS4tAQlAKJJUpCSnBKNnrnIJ94oCwKKi9zXdxqWNLisvGAw4mO40Ff1iFjxOBPQ7Ts5JyAlQA8XKe6M3b6ZkqQ1KeSqZGMZTbykttsDYHMgKAJCgtRBB3AgfACYUVCITmq0uQy+t1bakpU5vabB3byFIUABgbACDkck9eBSZhWrXwy46JSHWXSpKVd2Eubo5wF4T9kO8cdAc5PBoCwKKiFpVqN2dbxOekIjkrU99S3nhLZCVHH73eDIA4++k9ygXN+NeUuIuC5pcfMdTbw7lTZbIbTsJ2kcgEEZ3c9KAm9FQV5/VjbkpURDriSpxDDTrbYSlIZQpByADnvNyRk49fWvH29Qi4ocjLmkOBhCn1x2QsN9+d4PBGQhWflnHqBO6KgzMjVPfsuKEooQI6VNlpoBzL60uknGQe62K4I56elYQzqeVLhGd7cww1KQtzYG8qQplYUkgJwQHNvGPPOTgEATyioFOi3xeiYUFLDwWuC81Ibbbb3lzbhCSD4QknOSMeXIrUG9SR/bPYUymUqW64gBlo7yI7Xdg5H/WBSfXHyNAWFRUFlydWofluQ0POpU44lpp1ttKUI7tCkkHGc7t4GSR0z6052U3xd2a9vff8AYwypWCyhIWreoJCjjOdpGcYzgcDkUBJ6KhrCtSuuwA+/LYK39soJYZKW0hLnKDgkpJDYGecH44Ro/WR12CmY3JcLJilalNNFPeDvA6oYHT7B8uvHnQE+oqBw3tYlUdEgEAKVue2IVvP1eAUhIIScue8EfaIxlRPavMPUVwl2xl9TLzjYU0lCNrgDC/Fk85CwgdQPWgJpRUGYkasKmApt0oRI2r3JbSpxshvxbtuBglzjanIHUec5oAooooAooooAooooBn1Jc5Fs+jVRmQ97RLSwtsAbikpUfCSQAcgdabEa8tKmHHgiWWWkZcWGwQhXd79p5yDjz+zkgZrX2lX9nT9tiPSrU3cWlvHPeupbQyQkneSQfeOOearaV2x6YYCxG023ISljYruyNpTjbt+x0xxyOlQ5JEXRaStYxUOhDkGejpvUUowjLgbyfFyMqHIzwfjSqZqSNEvKrc9HkhSSyFPAJ7sd7uCP2s9UEdPSqKT26WZ9exGiAtGAjcuUkAgEKxko8iAflUhR2u6fnNKlT9OBU5e1ZaQoPKIRnYSdo6FRx6Zq0YubsirqRXLLEVrmB7Kp9uHNcCSoKSgNkpwz32ft45RzwfLFbP11t+/uzHm9+FKCmghJUlKUtqKsBXIw82cDJ56cGq2i69jzXG02ns7EiO6jIdVIbbCso2qABTzhPhPu4rce0uyMS1tO6ZjB9tRW53L4WUqCQOuwZ4SkcfugeVRL08kKrF8Msa16kNxvpZZaUm3mIt9Di0gKWUubCR4j4evUA1oXrqAmMHkxJq+V7koDZKdrIeJPjx9g54Puquk9rFpi3BTrGksPPhSN6HU71oUcnI29CcnHrSuDri0SG0n9S9oWOiMKO0ju842gnjw/D3VVSTwiepHyT93WkBpL3expiVsIW68gpTlttCW1KWfFgjDqDgZPPTivF60gtuuIdizEFLjjaSoIwsoeQ0rB3cAKWnk4458qh9615pmzoQq5WNKX3vEhkIC1qUAkEK444Ske8AelQ249qtkuVvw7pJbTi1F1PdPJ3qJcSs/abxhSkgnI8qvbNiOrHyXQ/q2IxZoVyfiy22ZSilKVhCSnGeVEq2gHHHPORWtzWUFK0pRFmOFbndtbUo+tw8GSRlQwAtSRzjrmq5tXaRa1WOJHesKpCfGQ27JDpTkkkfYAxzjGMY4pReu0W3QoolM6PVMeddSrYhQCtwVu3E7eCFc/GrRpykrpEdene1ydM64t7qUZizW3XNndNLSgKc3d5jB3YGO5c6kdPPIpbN1PDiMR3VsylIdjGWrDYBaaBSCpQJBGNw4GT14qk3O2O0sr7r9RWw6AEbBKRlOFFQH2OMFSj8zWNw7fLclbKJuiVKUyMNgyAraMjgfV9OB9wqliyqxfctyPqecLK7dH4AW0q4CGyw2UpWB7R3O5Siog84Plzx05rGDrVttMhu6sOIfRIfaaLaUhLoRJDAx4jg5UjOcDknpVQz+362wLY6wdEkxwvvVMe1pCd27cVEd3wd3Px5plY/SP0666Er0IhG4qBJlJPKlBav8Am/NQCj7wDS3clST4OhZ2onG/od+LEecjy1OpdZKAl1OxClcZUAMFJ9c+Vaka4trjDj7DMx6OkAh1DYKTygHz4xvH2sDAJ8qpZj9IK2XO42+0OaIK0uuBtrdLSoJ3cEgd36E/Gp1K7QtOxJvcSLTFZlPYKkKdSk8YwTx7h9wq0YOXAlOMeScW3Uf0kxcnY8RxDUVtLjbhWhYc3NhYxtV7/XHvrXZdVsXByIyqNJQt4obDxSkILimA9gDcSPAc/LGajLetrYy2pMayNbHGw2oNuABSAMAfZ6Y4rWzqy0w+6W3p9llTagtvasDaoI2Ajw8Hb4fhxWy0tV8IxeqpLlj3K1k9Hk94u3OiG07LbeCdilkMjO9J3AAcHIPPTFPVs1DEuU1yPFbfVt34d2jYooIChnOQcnzAzg4zioM/rKzvLWt7TzS1L37iVg53jCs+HzHB9aUQNaQkPLMDT4EhacYbcAKuPPw+4fdR6Ssldr9iFrKLdlL9x/a1zAchCSYkxAU226lC+7CihYWQft4/5pfGc8V4vV6RIc3RnGojUpLJfUAsLQY/fZACgU8Y8j8OeIDbu0PS8u3291zTkZl1xCm1sFSSY4bUUqSfD0AWrHuJp0Rr3TZt4uAs7AjMy+4Ud6Nydg2ocCf2hszjHlWDVjo3Ilj2t4TQAVBnlzYXC2Et5SkN95k+PHKc+flipOy4l5lDrZyhaQpJ9xqsoOudCT2m24TMZ5wpWRHSwd4BTtV4dvGU8fCnG29oem8sMWx2GXJByllt4BSiAE9MZyAAOcdKJN8Dcif0UyWe/C5SywIxa8JVkrz0+VPdHFxdmE0+AoooqCQooooClf0plto0nae/XtbMwgp/e8CuK5iLntCQ1EUt55XJQgYCfcT5107+lKyZGk7S0hCS4uaQlauiDsVzVE6dgC2vtpWpgyD4krxkp88njgDHSqvk5qrsxfpTRdxuTjcu6qLMVJ3hvbyr4DoB8amBg21liVIksKZ2q7pklIKpBHp68fIU7oces9rfuEmWiXI7vcVpVhpoHHCUdc/HFaoSIl5nNKuSyh1lIKluq3IcTknCQnzPTFdNStTpQ2U+TljTnOV5EYusuXKYL7YTB2NEIQt7GAegBz14pojW+S2lu4zGnG0NHcVtLO5z3p+A59KkMu3Rxd5exS0zglTiEqx9WkHPO4ZBHHA499NN2urLTLvtcmTcJayklSinYoD1CegHurh25vJ5N0rC/Ssdxx4izx3JUxRK094N2EnOdxJ6++s73qabYpbjLa4peVtZdZS73isJB4yPsjnyqPMX6UwVIiERUO8rLeUkD0Bz0pMh1hLpU4gSHCc94SSAT5VSNZQ9Pclx7m1F/kyVofXFCpiftOrBcO3yAB4HxrZGtkuchCkuPNICslbx8WPIAelK4jDAdQqQdrpPhbRwAPfTwqUAdqBwOAB5V6ek0zq+qTwctWq44ibLdFYgN4aSVKJyVHkk0nvupja2sMIbekFWC2pZBPyFZtLUtWMEqPQetboojNy+9kR0rPQ5TzXqOCUdsMHKpZvIYrw7drrbmkx0Jjd6rlDDATx+8o+lMMZ6DbZCm5rLj8hoqAfXzjA/ZSeOvnVoJuNvyW0Q0hB4ySc1F71Z4a4smQoqVJWkpSpXXOcj58Y+FctTTtLcuTaFZN2ZC+7Rc7iiOtpxaZCgkoBypWemT+NL7r2KrE2abbcgsIa79tt37SvFggkcADrn3dKSWR6ZaLk089EUlSUrcDriuAraQVADzGeB8KmGkLrI1XeUPPsFCYqe5W8X1YeAzxtx/jDPlxmuBRk77kelBryb+z3s6bsTzNxuUhMyW2MNADwNjzUM9T76mj8BiQ6XnkNqUrnxIBNBUl11TjDwTHjnudv72eAR91R3W9/dsiYLLBHeTHe6Cwgq28eQ9a7KO2MbnLW3SltH15QbSA2MY6YpGuQCrK1JBPqqo47CtLxC7k/Jku/tJLiuPxApfYlaOYntBNtYkPjkJW5n7xW/tDisIwenT5YruK1i0TH4zjJW2jI3Lxz8BzVd6Z1ldLdeGmpr63WSVoU2V7cAgjO/yIPPpUg7ZYNtk2165222tQX46h3ncEgKSeOnTrVU22c5KkNJc2MKbB3eHAUnzNcOorVJyu8HTToxhHGR/vNzW28qZDJQy8sSQhKtwBJ2qGf8ofPdSj6SjNLdK5Cm5CiVNOAnopPU8Y6HHrTYJUeRbgwgAmM4pJJT9tK+n3KSKafakG3xpLkcOLQpTKiemD0H4msHlHQmSC2XJF1vQS4lplQQQp5Ustd6R0zn4dKlcDVcix2BwJcbZnkhX/KUuhlCj9oJ29ceW6qxs93h2iSk3Cyx7gwlW8B5ZCj78jqPdWq56wlzY0qJ3MYRnXN7Y7hALWOgGB6daRdkS8nRX6PXaFedRa+ctVzkR346Yi1oU23tUdu3kn510rXGX6JbEhfan7U4hRbMB5BXxjOUcV2bVc9zSNrYCiiihYKKKKArPt1t7lwsVvS3HL+yQVEBWMeEjyqqLBZBbH5EqdCbUtAIjx20FanHCDgA56DgkmugtZRDMjRUZ2gOZKueBj3VAb+79Fwn3grc68PZ2EDktpxyoEeeBnPwqLf5eDlqYkyCXbS0mZHEQSVsrCd8px17CGx1xt/+GlrVqDkH2m0PLU802VLce4S4egWE5AHTr6e/mmNxfdXm3RJSVye+cDr/AAVFDagfq8ftKJwVfdR2i3y4okLhd0mHCcKVFpBAV553Y4ycDjyrJqLd7FLkb1LeD7TgJX35Jb7zdkuDzVn068ZNNbntkpK1Ntp7hspGTjxZ6c+nupvilbi1Ovq+qCClBJzs+FKbc8JqXmApCW1Dejd1BT1z8apvcpW7FrO1zIoXtUnYShpW5bo+z8M+VazKQ8lA27SOi0cZ+/r91bJ8lTziG2FEMBI8IQcZ99KIltkrUFrRs3cl1YyfgmrQoqT9GSJTxkX29jKlKUN68ck84qQW1hMUokvxQ+2OAhfCT8aQxGe6UG0hLbQ/Z8z8acWw20x3khRfUoZS0VcJr1qU4Uo7DjqJyd0Pyr37M02v2SCww10S0Np+/k1HplwXc5m6DGUpvzPRPxpLKZM0BCnWmWv3MjHz5pfBnewp7ozIQwOU4x/Os5ajbK8eCVTTVmKUQ34rHtLrP1aPErJHFM1zlrmOhW1ISnhKQOlZTb87dG1IA2R0q9chZ9acdMWV64SEPOpLcVBBUtQwFe4V1xrejdIiFF7rEa1Fo++3CyKnRYpWwM7sKwsJHXw9Tk+npTZYLu3Y7jbYRK0Hu1bsdQpQwN33k/Or7nOJEdqKytxG85ylRPrjiqp1NaWZNwM96O0H2lfbb/bJJ8RHyrgnUbd2elGmkrIkeopKbfbbPDi4UV5lOK/fHRJP3Gob2sT0Rm7FcwMobcWUgdCspBA/CnLXD8W2ToQuVxZZS3BZbabSCpRwjJJA96qgerNWt33TESyuOMrTFke0JfRHUlZPPHJAxzRTSi0VlBuaZF9Q39cqUt5uafrRuWykEbPd1pHHuS2xvTke/NCI8BtxxZYkPOKOQVubB+Az+NK4j7rJzFgQUq8llner715rByZqorsLntR3u62J+0tRnprDqknKUKWtOD7vKmBmFdWJTSZLDrWBtw5wUj055qUNL1ZcWPZ2585EdXHdMlSEEfBAAp9012evtyGpFxLrgQQoMjCMn3k/lTc5OzDjZEYsYc/pMbAxIbJSSBnIO5OD5cildosE+VKkNM2yUth3a4knKEqVnI5PThWKuJm0FDiXkxoUfaMZ7sLWPn5fdTgYaHUYkznnU/8AVpJTn3cVqomfBCIfZBMcjufTrlqtrDiUltT0re63gYx4ftA+macIPZXouI4lyfPud4eAA7uK2GWz8zzj51MWoaENJcjwAQPCpTvOcdPTyraLgGE8qhMn1HJ/CrqC7kN24JH2SWyz2u/9zZNNsW1ruFZkKUpbqunBUauCqm7MrmiXqXuhLZdV3CztQ2R6eZq2azqJJ+k1p3tkKKKKzLhRRRQEV7Rb/B07Zm5lxfSygubE5IG5XoKpi7aw09LfL826KW2UbEswG1uLSn03AYScjOasbt0a7yx207N2ySVZ8Ph8B55qk4NxTHI7zu3gVnKQc8eWABgHOalRT5OecbybHX+6LGaQ6jT+nZyiofa9mUlalHqoqV51G73bbpe0xd0WR9WNylOPIytR9cnNP0u9sODa1bcg8DbgfypC0ltpQW9GdaQDklcgD8AK0lGn3dzOMX+EZ2tHSygJW002PfJHNOdr0cW3N7AhF5PmXd5H4GniPc7eyHEtMPFSxyN5IUfu4pRargGXMItimt3PDilZ+NTCNBZZMlNq1hE1o+4YKvbGEH/FRn+Va5OhrrJ295qBISOiS2ePxqTOXR4cpieHzxk4pGu9St5Q1FbK1dBXRu0yVlcyVOq3ewxHQEhCfrL24of4jX5msR2esHGbjMWf/CP50+N/rJOUQhkMIz12YH40vRYbo5hUy6ONk/ssgVnfTrhGvTqEbj9nsUOA+1Td3ke9SB+Ioc0RBiSD7Q09JSVeEokhS/fkDr8qmDVjjsjLy5EhfT6xw8/IVvD0G2N9662EIH2UtgZWvySPPOcfLNZuVO2EaxptcjFb7VGabQ5Ghx+7H2XF7lj7lHrT+zFewHHFLfWBkBGAlA+HrSGKEx4bbIUVYGV88FR5OPmayW4lKeqh58HAqjlcuoIc58hpOQB49vQYzUauVvSESGpJUmQhKFhOPtHPP4E05Mym23e8UM7eeDzWq6PrmzHJbnK1HOQOKSm5YIjDbkq3tOtNyvchaUQ1qkMoQlpSRkK2px194HSqale3W+WpibGXHcT1S4kiusZq9zaZCkpycbyD+1yM/A4qNX2zQtSMmNNjB1P7LoHiR7waoXZVOgmNPXN9DF3lSUS1nCUDCUK92eTVtwdPWeACIdvbJHmsbj8cmq9VoeLZJSjKlsIZzlLjzgSCPcnrmpnZdW2ruvZG3VzX2R4VFO1JArTp4u2ZdSztYk0dpahtQAlH7rSB/HyrYsMRsh5xllI5ys7l1FZOo3pZ+2hln03FOPuFYsS97ZVFYdePGVsslQ5OB41Z/hVZVaVJXbt+ZbZOfBJjdYwQRGjvyc+YGE0gkarDKzGQ3HRJ/dSoFVR6fPlRJYblxShW0Ly8verB6YHSo7I1FYUzXZ0CClmageNySresrA6BPQU629JxeA6dsNE1bnXSQ+EkOd2+didx2pyelSm39ml0fUFT58djPJQ0O8V+FUxbtX3G7PvtyFfVY3JSoBQQcjkeh+FSW9a6v88d0/dZCGQAO7YPdjGPdiqybZZI6B7P9IWzTt871uY4/PUyobXFpBA4zhAOfTrVkVzB+jvKXI7R1b1qXmG6crOT1TXT9QiwUUUVICiiigKu7ft36v23YhSle1H7Kc/sGqMiWebKeCkNPgnqrBFdIdqBQm2QlLRuIf44zg7TUBD52eEEHGTnit6dKEleUrGFSU0/SiDs6UnOApWsoT/9xVOsLRrDScyH289cgEmnxcoeoNeNl6SD3XQdSTitHChH3U2yl6svewamLPaWANsl9a0+SUU6MO22Okd1DUtQ83XP5CkfsagQVufICvJLIRHUW85HkTk1HSkvVGNiVKPDdxc7cdyThLLSfRCR/E0jFwiMZU22kKJySEjk+tMLhc3FO/I9aEsrUAnB92BXNJ3Z0JWHxy+jB2g/Pmkir4Qc8591JE25SU5eUlCf8c4rBRiNZ2tuPkeY8I/OoJNj91kuqyhv5mtCW5Tj3fLCnHR9laxwgf4o8qWRot0moQqHFQhtSVFCsAbgOuCaVt6afeObjN8OxCvCScFRHhV+6QD8KAaVOYJ759CfXxAmskFDpAY7x0Y4KUmpQnTNmgzGGX0d4Vr7tZccIKCoeBRA4xwadrCqysQnPb0xGXmHFNL9oewDg8EJHqMGiaIaZDoEV4PpWWzlKgQn7WfkKebnBvd2I9ltSlA+iA2lNP03W+nLSnaiWjd1CYrIT+JqK3TtfjnKbfbFO4z45Txx/ZFW3xXCIs+7E0jQ98cQ47Kkw4yUoOWu83KI+VQCQmVHfLEp9DTYPP1mcj1AHNPt07Ur9KbW2w6xFbUMFLDQH4nNQMlx8laydhPPPU1m2SOsy3268tmC068p3apSHCOVLA4SBnz6cmmWxxmrfd2lyi8qCHghaFHZgHBO4Dk8bvPypzl26XZ5cR11LIUpCJDJWNyVpPPn5flUdu0WdeLohKJOFPKIVlWxIJySSfIVxahVZNvdaNjak44TV2Wbb02uCwtUttpp+O+4halJAOBylQ3c9Dit7usrPbmFRWnTIQlKQCyCdykqBBzwP+FR206N9rRGevU94OPJbOxpO9agVFByo+YIx8xWy+6Tg2+wz1Md65MYb3qWs/8A3cdB0OODXzcoaKrU21Zyk2/0PVj1lFuMUiOX+7ou1xbdjsLaGxLSULVuPBOPlggfKmbU9hjRL3MYk8vMq2lSQRuOASD99O+jYZuGqbdHQjKQ6HHPTak5P8MfOl3bAtpevrgI5HhS2lzByO82jdX1lKnGlBU48I8icnNuTIewEx29jKQ2jzA868W6opTznyrwpUrjxV53Sj4Ru+6ttyKFrfozKz2lHnP9Cd/imusK5T/RojON9oxWsHb7E6OePNNdWUTuAoooqQFFFFAQntUVstMQ8/13l/kmqqckqAwraOcjAq3u0aP7TbYqSCcO54+BqBN2NBIJQSK0jByVyjaTGuBIj5/pSB0zuTzz8KXPTmEpBYQ4rHoMCnBNkJAw2rlW1ISnqfSnprRoDaHJHTqEg4x8a0U5QwV2qWWRFuaXs93HWpXr+z99bERJb48RAT/ijGPnU3RYUtt/VoSAP2nDtQPzra1Z46wVOF2TgdEfVt/fVZVpvDZaNKPJBEwGkqCSVOr/AHWxn8a3uW6Q09HLzRgRnlbQ4tGTn51M3rlbLWNhejsq/wCrioC1/NRqK6l1JHnxXI7ERRz0ddcKlD3geVYGlhExBirdYRKZf71DwS/3i8BSFcBQ+ePM1ukdzDUY7rjKWXEGKtxohvcMnaokeeQQqo7NuUl1tDaSllKG+6AaG3Izk5+eKaHd7zilKKt/UnPJ9akgfLNKXa7iqNvbdLDgdQptW9JP7QB9COPiBS+VqJ3uHXo7Dba1ugAr8WQM5BHmOTUUgPFh7djxAcfGvHypSGwpSUeAk71bRuJ5qySaKSbubbrfp7898tyVtF9OxwoITlHUA/eaik2QN6iFk89eST7+akLUK2uKKpFzjAqTgoDo4+dRm6xO6kFDa0OjyLatwI9aiaaEZXG99xSgTk81h3ZKQpaxj0NbXCWkkqHjpM67uZwMA+/+VZXuXNrj7DLeEgrX64xTauSooSd4Skc499YP5CPU/GkZCkpAUeOcUsQXtarRG1z2WwY8TCbpCC0MLVnKljlSCfRQINU9ZZf0ZqSGbinahiQlL6VpzgZwoEffVodgE+OqJdrbnu5YKZIcScrKRx4Rn9knPHUE1s7SdBK1DKfu1kSyi5jAmw1KCO9J6Ot54IV1/wCOaicVOLg+5eLcWpIjL+u4KYSI7EZbkhpOEuN+BAO/djHkPCnpTLO11c1OuGL3TYJKsFsKJJGCDny88etM1vsMuRqBq0ONqafU5sUk9U+p/jVi2rs7jxb4yiXcmXokNn2ue2EELaTjISD+1kenSvJp/wBP0dOfTUby5ydU9TXnG7eBR2F2ZHeTLk+ttyUs7QhJ5bTnJz6FRwMegNQPtC2Pa4vT7rwAMlSRjxE448vhV9NXmCyi4qi9yGY474lkDBSc4GQMEjB654+Nc0T90udIkyFBC3nFOEDkkkk/zr1kcjwjWuSy2nDTalH95ZrQiS8VlaT7sgZpQ1G3Y7torPqqnWNZpTzKnAgpIwOE461KiVJ5+jSXl9pBW8okexO9T70+VdWVzh+j5p9+BrRUxba+69lcRvUOCSU10fWlrYJQUUUUAUUUUBDu02TdI1siGzQY8x5T2FB94tpSNp54BzVcKkapWn+mXiwWpJ67Gy4oD4qUP4Vv/SwmyoWkbOYT7zKnJpSotrKSR3auDXKZmzHV4fUtYzypais/ia1hOysZTTbwdX2SdZYs0qvWtva5ZABDbndpAHltTgVKLpckSEB2wyyU7fC8l3eB8c5FcbRA4xIbd9uU0lRHCW9px68DFTHTWoJ2m53ftynF28Kw8yFDC8+ic/wpFpyuxPco2TLqb7SZFoWI2ooyHn1E7JKhnGPMo6Ee8VlP1JMuaEuLlqU0oZSltWEEH4VV3aTFE6ExqK0yw/DdwhbaTkoXj90dKbuzy7yStyIQtcfaVgH/AJsjnI9x9KiaV7oU5tqzLPVI4yDgq60ikrWk4XkA9DSMyVKI28e+lLDm7wOHe2fI9c1XBqZKCFtAoPjHUGkUqUzCbLslYSPIDqfhWq9TW7QyVunepf8AVoH7XvqBXCY7MfW7IVlRxgZwEiqyYHe4ajedURDBYb5G4/aP5VHZL7rzm5bq1q9VHNOf0QtLCJN0kJgRlDcgrBU64PLY31x71ECkEifbIyCY8EOYP9dNXuP9gEJH4/GoRUTnCh1SDXqVrQrKFkY80nikjuoo5PDkDPubbH8qETGJCSrumwT+2ycE/IcH7qklDp7ctSR3wBH72Ota3nGwCogrP7IxwKRl9TiAFEKQPDuSnGB7x/OhOV4CQcHoOtUYMHHFYwTwa0SDkI9wrYrpzWpR4Ax14q2CSYdkF1Ztet4qn1MtF1Kmm33OjSyPCf5fOuhbhBy81JjMhxtSi2lBKe8aWT4m8K4258Q9Me+uSWQUOJUkkKSoEEeVdHaJ1S1qixtbn0sXljaJTagB3xTna63/AI2OP41DLR5ELNoYXqK3yliUzMhsqjlt8DCh1Ck8c8lXrT1dYijHveSzmYuO2lHebSsYV4SfLOK8hQ0R3GfZjJfSh0le9Qw0lRVzg+u4cdaen4EdSluygCFJQklTm1KVIVuBJzwccfOvnJ1ul/V1GXEo4/Q7kt2mxymQ3UkQvaaeT7A0hoMEBLRCFNEg87Un9rH3Cq0tmmHX+W2t581AcD4mrXvV+tdstl9djqiLYaSShlx7b3wKQkHk7iODjgg+6qPu+urxcEltpxMOP5NsDH3nrX0kYruefJt8E0FvtdkbCrrMYaX5ITgqP/H5U3Su0CBbitNnt6XiUlHePj193Wq1dWpS1F1xSlq5JVyT86190tYCk548zVnLwVt5L2/R/wBUXO+dpZamSB7OmE6QygAJBynnium65L/RjZDfaYScbvYXenxTXWlQ3ctawUUUUAUUUUBDu0/Q7Gu7KzBekqjLZc71twJCgFYI5HzqnXv0bJa0rSnUccBXrFJI/wDdV6651CjS+mJl1UhDi2glLTa17AtxSglIJ8hk8n0qN2ntOiTbfZ3Po6U9JnRXpDqYpQtDHcq2uZUVDgHofPj1oRYqxv8ARsnhpltepY21B5IiKyoeh8dOg/R2xCeQq/8AePrVkKVH8KR6Y3Z/Gp9F7VrW/ItbKrZdWlz223khTaCUNrVtQtQCicE+mSBya1K7UUSVwha7JNeL1xTAcS64yhaCQo/Z35B8J4UB0+GQsQW1dgNwg22VCc1DGkMyBlSVxDgLHRQ8XBFO2muw9VkhutIu7S3VjbvDBHGc+vuqcai7QYlkvy7Sq13KW+kso3sBvbvdCtifEsHJ2K91If7rNgDsULamJYkRfag9tQQgd2pzaoBRUFYSryxx1qbsjahrR2UvJ63Rr/Qn86UI7MHUg4uTWSMf1J/OtDPa401NuBuNrltsBUZMKOlCO/WHGlOFSjv24wARgg84xmpJqDtBtVkh2eVKYlqYuSA4gpSkKaQdoytClBXVYzgHFQWK6ufYbcZ8pb7uoWMngD2ZWEj0HipVZ+xBduQ68u6RpM4f1CnYxLbR/eKd3iV6Z4HpTzbu0e9PXsMSLAoxH7uu2MFC2wpIQlRUVEucq8IPQDGcEnApZH7XLPKiqfiW26vhT7TDKUNIy+XFKSkp8WOqehweRxQFf3jsCvlxdceVqthUlw5U87FUtXy8VRiT+ird5Kip/WTCyfWGr/fq/wDUWvIVhuSocyBPUW4BuDzjaEFLLYJGFeLOdwA4zyR76a5favaITCVzIFxZcS+ph9lQa7xjAQdxG/xJw4nlOffQFG//AElXD/tbF/1JX+/SiL+irdIywUaujY90NQ//AHq8rZr03jWsG1W+G4i2uJmJXJeSB3q2FIT9XhXQEqB3D0xSRrtcsa5YjKi3Bt4LLa0qQnwFJX3gOFfsBsqOPIj1oCtYv6OdzZSA5qeMog/aERQJ/wDdS9j9H6W39q/R1AHIxGUMH+1U/Z7U7e/7O21aLuqXIeaaajbG96g62pxtf28bSlB88jzApts3a9EXaJL1zhvOSo0j2dwRUJCC4pxaW0DevrtRuJPHv8qiyBEHf0fJS1qKL9HQD5ezK/3q0D9HaZ56ij/6qr/eq3dN65h6hu6IEG33EH2ZEpx11tKUNBW4BKvFndlJHAP3VErX2rSJVpYD9vLV0U+0P6v6l1pcruco8ecj3459RSyBE2/0eZSSM6gYP/pT/vU7WjsRmWqczLiX9tuQ0rclaY5yD/aqy9Cald1NaHJkmAuAoSXmENrcSreG1lORtJ9MH3g4yMEw5ntSedt15CIiFT7bLDLq0o+pShUruUAgr3FRTk5HH8KWQWCSDS1xeaJmTIS5JBHfNsKSo88HO7PA8ulI7joSXNtbkVdzSXVNBHeKbPUHOcBQ88Uxw+1Z6NLeN7jMmKhl0oTFQe8W4JZYQkFSsYIAJzjnPPlS25dqjTrMRNkt0tT63oqX1SWgER0uv93hXiB3EJXgjI6VzV9FRrzjOosx4NYVpwTUXyQy99gdyus7v39SsqSkbGkqiklCMkhOd3lmm/8A+m6Xj++KOP8A0qv96rUu+v8A6H1NcrbIgPy0tORmY6IqU71LdbcWclSwMYb93zqW2C6sXyywrnDCxHltJdQFjCgCOh99dNjI5S132Y/qQ7b0Sp7c4ygtQKWijbt2+85+1Uccjxg0rYykEDr86vD9I/Bk2Ebc5Q//ABRVQ4SGNqQM8Ams5Sdy8Uiefo/wWmNeF1LSUrMRwZHxTXSNc/8AYchY1mSc7fZnPh1TXQFXg7oiXIUUUVYqFFFFANt/h2qVEbdviI5ixHBICpCtraFDOFHJxxk9eKZbTbdILujgtSIS5cmO66RHcKgtl1QCyMHbgqQOnpW3tC09J1FaIjUJcfv4sxqWGZIJZf2E/Vrxng59DyBxUKvmgNQ3NDzsZVotLzkBMcswFqQ2VCSXSnOzgKTwTjrnjFAT9ekbCt22uqtrPeW5CW4qgVAtpTgpTnPIBAODmtSdE6cTHdYFpY7tx9EhWSonvE/ZOc5GMnAHAyar/wDuY3dy2XBL8tC5i7UIcRTk1xfdOlbhJJCE5ASoJB25HTFYOdmN/ZVcBa7m3FTIMpKcSnTlpS21NNnjgeFYJHI35GaAs6Xpu0TLgZ0mEhyWVtOFwqVnc3u2Hr5blffTTB0Zo8yO+h22Ct2GQwopWVd2UoxtUM9QlWMHnBHuqCyezG/yIePbIzTjbUkxWkzHSmItbqFNpSvGVJSEq5I6npUksuhJEGBrSBvjx0XtxxbEphai4kLQRhSSABtJJGDzk9KAX2vSGh50KRHtcK3SWA4gu+zvlZQtAIT4grKSASOo44p3u2kbDd0Q0XG2svpiN90xuJGxPHAwenhT91QR/Q1/fsEeF7Fp+N7O61vZhOusJmoQ2pH1q0oyMEhQGD0+dJB2d6qblR0qucOSxmM688684HStqOtogDaQQSsHJOeKAsOdp/TrbDbU2LFQ25OEpvvF7cylHhSST9o+g6+lEbRmnoq1Kj2tlsqkIlYSVABxJJSoDOBgqJwOOarVPZTdEQY7a1QZPs7sGQGXpLpQtbaCl/nBKd3h5A8vKpHoGwSmNZ324u+1ItTK1s25qQhSCO8VveICuSndgJPpnFATaXZLbMlvyZcNp55+MYbpWMhbJOdhHTGTTO52faVcisxl2WMWmitSRlWcqxuJOcnO1PUnoPSpTRQDJB0pY4F5XdYdtZZuCysqeTnJ343cZxzgVgzpCwMzxNbtccSg86/v5PjdAS4cZx4gADT9RQDBbtG6ftpZMG1sMKZf9pbKc5S5tKAc58kqIA6DPArQrQemVNuoVaGNrqdixlXI3lYPXqFEkHqM8VJqKAbbVYrbaXlu26IhhxbTbClAk5QjO0cny3K++kCNF6eR3O22NDuQkN+JXh2u96PP9/xVIaKAYI+kLNFu7FxiRQxIaeekYbOEqcdGFqI948hgeda16I04px1w2tre7nvCFKG/Lve888+PxVI6KAjq9E6ccQ8hy1MKS8hTawoqOUqc7w+fHj8WRyD0rFehtNLciOLtLBciBIZUSrKdq96ec84Vk856n1NSSigGeVpqzyrkq4SILa5ilocLpUrJUhKkpPXHCVqHzpfbIEa2QGIUBoMxWEBDbYJISkeXNKaKARXG0265qbNygRJZbyEF9lK9ueuMjjoKRDSenR0sNq/1Rv8AKnqilgIYVotsF3vIVviR3MY3NMpQcemQKXUUUAUUUUAUUUUAUUnmzosFtK5j7bCFHALisAmkX6xWf/CcT/SiqucU7NkqLfCHWimk6jsw63OJ/pRWQ1FZz0uUQ/8AmCm+PkWY6UU3C+2o9LhG/wBIKPpy1/4Qjf6QVHUgu6J2S8DjRTd9O2r/AAhG/wBIK9TerYrpPjn/AMYp1YeUNkvA4UUjF0gHpLY/tivDdYA6zGP7Yqd8fI2vwLaKQm724dZscf8AjFei7W8jImMf2xTfHyRtfgW0U3rvVtQMrnRx8VitX6x2bOPpOJn/AL0U3x8jax1oprGoLQf+kov+kFbE3q2L+zOjn4LFR1IeUTtfgcKKQKvNtT9qdHHxWK0HUdmT1ukQf+aKdSPkbX4HaimpOorOv7NziH4Oitn07a8Z+kI2P+8FR1YfiXzGyXgcaKazqC0Drcoo/wDMFazqexp63aEP/NFOtT/EvmNkvA8UUzDVNiPS7Qv9KK9/Wex4z9Kw8f8AeinWp/iXzGyXgeKKaE6msivs3WGfg6Kz/WKz5x9JxP8ASCnVp/iXzGyXgdKKQw7vb5r3dRJjDzuM7ULBOKXVdSUspkNNchRRRUkBRRRQFddts4QdPwln9qRj/wBpqiXdTlCsbatf9J2SY2krYQcFUvH/ALDXODs/6kZ6isZaWnUluki6qyirIkt01eprGKTRdbOLPnUKmOqfcznisI/1auvFdK0lFR90y6s3LktaFqtxxOOc0qOqloGDj76rqJJCcc1sfmcnBrzp6KDlhHfCvaOSxmdUFRAOB86XN6k21USpitw8Rpf7asNjxeVV9hjfgKvYsiZq9bf2V4+dNzutXv3z99VxLlKX1Ua8Yc3IyTmtVooW4KPUu5PZGt3uMLP306QdVuuMA7z99Va5tI86X26d3CdpVwKvDSU12KSrSfBYkjVLhbUFZ4qJTNYuNOKSMjFIRNEl3u9wCcblHOAlI6kmodeNahl1bVnixgBkd8pvcT8M11LTUYr1I5+rO+GTZGspq1AI3DPlUotl/uRbClZ5FUq32i6kRHUwuW27HV1bcYQR0xxxxUp0p2kR3HEx7tHSxu4DqPsj4jyrknpKPKRtGrPuyyndRyiMObqi87VLrUkjJ69KU3qc2Wg4yU4IyCOcj1qC3N0qcKjzzUQ0lPwXlVZY1s1SteOBTs/qZaWvD1x61UVtmKS5jkYp3E9RPJ4pLRQ8FlqH5JdK1a6lJyMVH7hrB9ttRxmmaU/3jnXim24JDjWKotBTbyg9RK3I+wdbPrXhQp1GrXgg5FV7GYCFmlniAPWry/p1LwVWpku5MYOs3jIKSMYNPTeqnjzmqsjBSXyr308IkEJqktDT4SL0677l99hV+duWulMLPh9lcV9xTXQ9cofozuFXaUoE8exO/wAU11fXTSpqnHajCrLdK4UUUVoZhRRRQFIfpWK26Ts2Rn+mn/ZqrmNThX54HpXTX6WH96dl/wA+P+zVXMFdVJJxM5cmXHuowPdXg6UYJ4GPnWu0pcVxyVLCEJUtfokZNSCJpLUVxaDsSzzltHgL7vH8aufsrnWuPZI0eHFbQvYCpwpBUs+ZJ9asUPoUkEglB68149TXpSsonpw0Tau2ci3XTl2tQ3XK3SmE/vuNED7+lN/fcAeldfyocl2UiHAWH3FtF5xp8DahB6A+pJBx8KiF2sGmVvrj3vT0ePKX1UlPdk+8EGtlq1Bf3ImPs+92ps5qWoE58qyQvBCRV0SuyexXSSVWe6Pw05yUupDgI9x4NRvU/ZVdbGpEiG59JxCrCi0k70f5SfMe8V0Q1NGfDMp6erDlERiW8vpBV0NLPoIEDBUSeBipVA07cGmStyC+kADOU8j5daVLYEN5tTqClSVAkKGDW8IqfumcrxtuwRdGhLtc8WyEwtlMgBT8tYwlKM4CB6knqKfz2SRLFbAURUzXwCXFucE+5I6VacS5MLi97FfUpDmFJBRgNgDBA+fNNF7u09x2NGiLCkOO4XyAVDGcZPSvn6+oq1JWeLHsUqNOHGSprroRtGkX7jMtBZfSr+rSRlKM43HFUleIAgycIcC2l+JtQ8xXSmsQtdzU648pDm5IkIbeKspHkRnGPhUG1FoiFcNSoeaK2rYhlCwg9VKJJI9wro0e+c9i7mOsjGMdwl0hEdm6Xh+0lWcEJz+7k4pc7p5tZxlVSiPHaZaQ22lKEJAAA6ACtu1seYNe7HStHkuqiHJ022he4E/fW76BRjO41KiGvdWJQg9DVvZmQqiIn9Ao/wAb768Vp9tXr99SpaEDrxWKUt+oqPZWT1URQ6dbz50GwN486lmG/wB6sdrY8xU+zMr1EREaebSRjNZqsSQPDn76lYDZOABmvFJSk9AKh6Z8k9XBI/0dbYInaCXef+Ruj8U107XP3YeEDWx2kZ9lc/imuga468NkrGsJblcKKKKxLhRRRQFHfpYf3p2X/Pj/ALNVcwgZrp/9K4Z0nZv8+P8As1VzEBiuul7pnLkxFe7ffXgrM1tYqTXs1vMqNdmYTSS53hwhOefgKv8Ag3qNAaDt3faYSOe6UsFaj6BI5J91cmtOrZdQ40opWk5BBwQfWr27NbpZ7lBQ+xb4rd0ZGHSRuc/ygTk8/wAa8vU6OO/qnZR1M9nTLk0s0+GJFwmjZMnrDqkHq2gcIQfgnHzJpZqGzQtRwDFmhSSnlDrZwpB9QaY4dwdfZb8Rz0NP0NzbjJyDU4mjJXi7rkrGR2Zanjynk2+8RlRwMtKdSpKj7jj+Na2tM6/tiFOb2JQT4sNvdfgDj7qudL42jgfdWRcSRhIGawelh2R0rV1EslFw5+pbpcO4W2izvrWUuKU3hxYT1Pw99MHaxFahTovszjilONDvCpW7KgcFQPpV7TnbTe5Mu2pkN/SMceIjG9okcf8A8qtr12Z3CapqROuTEhtlX1iW2ylW3OSK6dElpqu98GWom68Nvc1WSLu0RAjKWQt1orCj7zmoFqVc6ypDrqUPNkkI9/vxVsz2mm2GUMgJ7sBKE+WB5VWuvnnX5SI6UqwkeLw9fh7q8WVXqVJT8s9R0tkEvCK4d1PJcebD7ZS4TjKcHPuPup/efflL7xJOVAZA6UnVaWYS21rQj2hfj6fZFSnTkASFAlIwTX0/9L06pU/aXy+Dw9ZWc5dIjymJYRnaqkzi308EkGrXdtKCwRs5xUEv8UR3FcYr16NdVHaxwTg4jCl5w/tGnGIlamwok9KajwoY8zUntKEqjpyPKtaloq5WKbGyRGeKSUlVIizK64Vip1GhB0eGnVqzoMflI6VyvVKLtY0VJsq8NScedeFiUBkhX3VOJVuS290GKVewtqa8SBg1b2leCekyBQm3VklRIIOK3y2F92TuVmpGqAlsrKAMZpNIj94NqRlRFOsmQ4dh5/R8Ws9oBSokj2R3+Ka6Xqguw62GJq8uqBCjGcGfmmr9rytdJSq3Xg6qCtEKKKK4zYKKKKAo/wDSu/vTs3+fH/ZqrmKunf0r/wC9Ozf58f8AZqrmHJrrpL0mcuTIUUDpXo5NblAxSu0XKXapzcuC6WnmzkehHofUGkh4NejpUNXVmFg6Y7N9WRNRRUlBDUxAw8wTyD5keoqyo6toHvrj/Qc1y3attUhtRSA+hChnqCcH+NdexyVE+HAHQVw1KapuyNlLcLSskYHU1rk3WDaGA9cpCI7KlBG9XQE+p8q2tJz1qsu3XUHslqZsUEBc6eQFJTypKM//ALdPkarCLk7IN2LLettpu22SqNFkFXiDzYG4/BQ5pHGcVbdSGC7/AMkmNBccnnC0jC0/MYP31WqbZcNCaGiT7VJdTcWVIL7S1ZZdST4goHgYHmMVNptyTf8AQTN8Qgx32W0zG/8AFWnnHwPI+BonGV9ruiHeIy6+Si1XFAU4EtvArbSo4zjqB8KrhTiri+ZjpaUzu4Kl4xUu7e7qJ0SHZYq2UvJUmQ+pYPhGDhIIHBPP3VTdslXGySEuwllSCcqQQ28PLyOD09K8+ppE3eLsd8Na1G0kPerYchqamUW1ezPJHdKA46dPwNSHQbgW2EqHNZwu0OFdbTIst0tUFMqQAhtaMowc/aIV0xkngmldls71nnqbV9ZH3lLb6Qdi8dcH8K+g0+oUtOqUuUeXUh/dc1wyYrCO56eVVZrp0e0bUCrRWR3NVPrc/wBMNaaJ/wBwzrYiRY/aBqU2k4jp+FRlptTpGwE1YelrGp+O2XRXo6majDJhSi2wt8rulAK4BqXRXm1sAjnikL+nN5ACeBT1b7OtloJIyK+fnX3TPQUEokXuwJe3AcVi4+kRRx0qSXe1ANEhPPWodcVd2ytH7Q4xXZBqaRjIbxMDhcSPWnSzRQ+rcRxUUtYcLjpVn7VT/TKU7MHrita3oWCkMslnZzEDOo9wH/MqH8KtGoDolKResjr3Sv5VPq8uo7u50xVkFFFFULBRRRQFH/pX/wB6dm/z4/7NVcw109+lf/enZv8APj/s1VzDXbQ9wzlyZDpXteDpXqetalAPNep6VlgeleUDFtuX3U+KscbXUq+4iu2YyCpKV/vAGuJIqC5JZQgEqUsAAeZzXckNBRFaCuoQn+Fceo5RenwJbzMNstsiYiO9KUynd3LAytY9BnzqhdBd7rvtFul4uaXGlRsqbZc8KkdQnjywPxNdEdSnP2fOmpyw21N0TcERkNywCN6BjIPkazhPanYu1cq/SV5jagtdxt98mpXbrVgSFycKDx5ypRPkCOPPiksnX0idf7fZIUHutPPtKSkFOHpCRwCB+znHHrUNOno0TtYnWS8PvMwpTqnGQle1Kj9pGfXz+eK1Xm5t23tLtyXZhfaYQAmQWSnYBu5IAycHkn3Up0IUsx7kSk5DR2laljah1jIMxuTDcjnuWyhe1YSPJQ8+aj76r0G99subM+Onq3IwFpHzwaUT34dzuK2LmY65C3VID+7AWkkkLSvptpsuGmpsLKocl5bI5TtAeSfmOa5pVobrN2Zoqcmr2MbpfZX1aJ8YbEKAUnhSVJ6EH76tfsv1LfW7/EsAXHl2Sdn2UzFHY3gElKVDkK933VRDqZJW59IFYPRWF4OPelXNTnREq52xt1yc26LeEtyIzz6OAsHhSD5c8YFXlLak0TTp75WOl5lnnMRXHnYwbCTgpS5vAHqDgHHxFVXqS1LlzQoK8Oea6B01fouoLRHkNFKg80CUnpk9RUD7QbALXLblxm/6I6cEDolX/Gu/S13GRz1YXRCLZp1ttKCce+p5ZYiGGQOBio6xLbaQCcfOnGFdA6nCCOD5VbUVJvkrCKXBKvAkDoaUxltlBzxTC2464jIrFUp1lHj8q8zfZnS4O2BfeFJ2qAPGKg0y2BTi15yDThdbtgZUQM+ppGi4JcaBJGPjXoUG7XRg1bkZhbg1vIAxml1mlpacKc9K0SbggtOJTimJctTJLiTzXZtc1kyuolz6BfDl8wOvcqP8KsaqR7GLwmfqUtbsqDCzj5irurz68HCVmdEJKSugooorEsFFFFAUf+lf/enZv8+P+zVXMIBrp79K7+9Ozf58f9mquYq66L9JnLk9HSvQcGvKK3KGe6jOawrIdKBk77HbKb7r22tFG5iOr2l044ATyPxxXXRVtTgnIAFU5+j1aBbNOOXGQkJenuZQSOQ0nIHyJyatkvIUCQrqa4K07yNYqyNpXlJA+IrWtZI61oW+EqAFYqVlJII5rG5JXnatpmHeokeU4pbFwQ+hqO80PEFKUAPjjr8qqbUEqJID7N6ss+BeGG1sMTo7O9LgAKUlQTyM+Y99XfqF0PXqzRc5CXHJavcEJwn/ANyx91Q7tCecRAlpSUKemuCO1lIJSFcE/JOaSrOKsWjC+Tn43W4hhIucUOMNYSG3G8DGPTqBimoyI8ia2qKxIhJUrxdw9wR/ig1dKYMN1KGXo7akJAA3DJAGPyqL3/QzNwW8uNKcjrGQEYBSfj5iuZV03Zo6Hp5JYZC7nCZakJem3h2WlSd6QtklWPj5Gl67wlEJi2x7q7NgpAX3a0bSk/ugZOceta5+mLva4DrPdOSo60KCnWBu5/Z68jHNRb6IuYDaXoTzZByFlJB+frWu6Dy+EUjGpG6S5Oiez3VrpiuQ4GGWmiEMpQSogY8/fVx2ucjUFjftV0WC/s6nr7lfKqZ7MoUW12VhLqnU7hu3toC1OE9efKrDttyMV8ezQXmgPN8HK/fVKLUXui8E1lLiSyV/f2J0GQ/FeJDrayk/f1p60REcUhJcJOTzmlOoW3n7nKfkNJ7h1QW2r0J6pPzz99PelGWwhAQnzr1a1VTppo5KcPVkk8aIlLI4ptvDSUsnFSTARH9+KhOp7gljIKsDNeUzqXggGqUvFzDSj1psZ9sLYAyB50/7m5LxUrBpe3Gj7cYFezpam2GUclankjcGI6oqC8kk5rdLg4aV4TyMVJG2WUnjFePttK64rbrO+DPpnnYdBVG1wpRBwYrn8U10FVRdlzbSdUEoAz3C/wCIq3a4tVLdO7NaasrBRRRXOaBRRRQFP/pK2S53vTNpZs9vlTnW5hWtEdorKRsUMkDyrnn+5/q//szeP9UX+Vdp6hv1u07BTMu76mWFupZSUtLcKlq6JCUAkk/CsLXqSz3WLEkQbjHW3L3BgKXsU4UkhQCVYOQQQRitI1XFWKuNzi/9QNX/APZm8f6ov8q9/UDV/wD2ZvH+qL/Ku041+s8p5DUa6wHnVnalDclClKOM4AB64r1y+Wltlbrl0gJaQ53SlqkICUrxnaTng4B491W67I2HFf6gav8A+zN4/wBUX+VZt9n+rdw3aavGM8/0Rf5V2JcdXWSAIinbhHW1Jkeyh1t1KkIXsUvxqzhIwk9fdTkbpb0uoaVOihxbffJQXk5UjGdwGeU+/pTrsnYiD2a3y48KLEZgyGWmGEoAU2Rj3fcOadIsOY3new6fTwmpAb3akwkzDc4IiKVsS+ZCNhVjOArOM45xQL3alRnJIucEx2yErdEhG1JPQE5wCa59pYjj7E3cSIr5+CDSGS3dSkhuFJ/sGpU1qW0u3/6FRLBuWzvA0UKAUnAPhVjargg4BPWkFu13pu4TZESPdEJeYCy53za2U4QrashSwEkA8HBNNoIHGtd4kX+fLet8ttttpDDO5pXi53KI932R8qZL7p+9zr7Gzapqo8ZpS94ZVhS18cfBOfvq7vpq17Sr6ShbQlCye/Tjas4QevRR4HqelaGtRWt+4x4UWW1JdeS6oKYWHEp7vbuCiDwfGOKrKnuLxnYo+TpO7EkotU3rx9Sr8q1p0tfHHVg2qYOBgllXP4Vby+0PTItbdwauPfR3G3nUd20skhopDnBHBBWng468U53XU1rtiMvykLWHmmFNNKCloU4oJRuTnIGSOtZPTJ9zWOpkuxQ1w09qDuRHjWSeQOrhjq/KmW76F1BNtrqTZZxfSnLZDCsk+nSulLjqey26HElyriwIsqQmIy62e8Qp0kgJynIHIPJ4GOawY1XYnpc+Mm5xkuwXkx5HeK7sIcUMhO5WATweATXZFwjTdNRWTFzm5qd+DlvSdt1zaHjHe01dnIxwPFEcwnHmDirksUjUbSB39umvM44bksKCkj0zirBu+q7DZ0OKuV3hMFtaW1pLoKkqUQACkcj7Q8uByeKxi6ssj65CTcYzJZfVHJfcS2FqASTtyfEPGnkeorjWmUfdZ0T1TnykVxqS03O5Q5UqDGuIPepAhuRVgpOOSCeFDjy9a3aMtF2abHtkCUzg9FtkVZ794tkdUhMi4w2lR0hbwW+lJbSehVk8DkdaxVe7Wm2i4fSMNUFRwl9LyShRzjAVnBORjFdim1Hazktm6GV+LJLBCWHScdAk1VetbFf5krEW1TnEZPKWVEfwq57RqS1XWDBlR5bSBNYEllp1aUOFvGc7c5rW9qm0Ny7cwmY06mcXQ080tK2h3Sdy9ygcDArLYr3LXZz/AAtM6laIzZrgP/IV+VOQsmoh0s8//QK/Kug4cuNOjpkQpDMhhX2XGVhaT8COK3V1R1DirJGbhd3uc03FFzthbFwiPxS5nZ3qCndjrjPxFIlz3VJxxU8/SFcDcix5OMpe/iiqg9pR+/8AjXVTqRlFNlHGVy1ux2St3V5QrGPZ1/xFXhXPXYW6leuCEqyfZXP4proWuTUNOeC8E0shRRRWBcKKKKAjuudMNastkSDIfLLLUxqUvAJK0oOSgEEFOfXyqFwuyBuNMsrxuiHU29KUKQqOpIcSl4upI2uDC/FgqO4E84BqRdrX0orTMdqyzHIbz8+Mw440lRWELcCTgpUkjrkkHoCMjOah0/XurYbl3jx4DDi4YcQlC4ruWNryENqWsqw53iVKUNvTHnQC6D2PMxUxcXNvvGfZ/rERNqiW31ukg7sgqCgnPljPPSvLV2OswYrUddybfbblsv5XGUStDYcAQvLhBP1nUADjpzXna3dtT2qJY0W+a+3JUy6p9yHHVsdeSEbUgbVnklWEHAPmoYpw1nfNRWnVkNy3lbsJdpkOtwvZVK76SkAhBUk+FXmPcCOSQQA3Mdj5isRERrtF3RzGXh23hba1MtONkqTvGd3eZ6+XzrKD2OMQp8d9u7KdQ3GQ0UvNKJC0tqQFIIWAkeL7JCvQGtc3Ut/u/ZbqeWreiVHKUxJkNl2OXQQgnakncCklScg84pBK7RdXMtRu5gRXWFyXmkTlw3kNyQnZtARncgncsZOc7ePOgJm92fxl6R07YkPMoatT7L7ihHG2QpCClWU54Kic5yfnUZX2Lt+wsstXdKFtIjgYjFKFqaDiSpYS4CdwcPQgjHU02XfXerZzOoo8JsxBDUHWnkwXA4lCZGxSSNxCjt8WR5Z4GeJRru8XBh2wldzuEGyvxluSJ9vhlS1PYSW0lBSooScqOPlmgH/TOjo9luSJiltPuNQmYbH1RBZCAQopJUcBXHHuHJqJf3Ie6XOdh3nupExDyHFqjFeN74dBSN/h4Gw4IyOeDTZL1Zqi33C7otalPth6Q8lc6M4slDUVlaUhOU7NyirgDgk8VtumsdRXFi5tLbMFTMiN3UZqM8l3uy8z9YXgdpSpKleHrj50Aog9mD0S96cY3KdgW0OuyZXCUyMulxprZuKvAs5yePnUw0Do86Ugy4ypaJKXnN7YQyUJZTtA2p3KUrHGeuPQCoP+vmrwhf8ARoRU9/UH2Rz6rE1LB3eLxZQSrjFZNdoepxdbHDchMqMiQY0pQhOBOPaVshxKt3GAEqIPr15oDYnsVZajd1GvKmyuC7FdHs+UKcWpJLoTv4OEJBHngHNOU3srEpq6xzdG0xp0xMvcmGBIT9Ylak96FZI4wPTjrikGgrxf5l606zeZch57NxblpLC2QhSFI2JUCcK4JIPoceRJj9t1Rra33G8yle1zGkszHIsd8d4h4okbBtSEgpKE5Vjcdw6UBP53Z4i46LsunZ85C2bc4CXG44R3iAhaAMbsJVhYO7nkZxzTDN7HA5b5cSNfXEIlOIdeU6wVqdWGloUpRC0kkqWVenGCCKjuqNdatmaVLQSiIp+M4tuXDjPhb6kupASgg5aUEkqJORxVjaF1HdbxqHUEG6NoSzCd2sqajqQkp3KABWo8qwBkbR18xQDb/ctYNlusVU1lc6Y7GdRMXEClNllLYCSCrxAlskjI+0a0XTspFydmuSLmyVSDMUB7Hw2p9ptAIG/9kt5Hx8sZq0KKAqwdlDrE+7S4d6Ql+a24lt16MpxbKnAkLP8AWBJHhOBtyCRycCnST2eqf0tYrUmZCactLhWgphFTDgKVIO5pSzlWFk7io+Ln3VP6KAqaN2PCPJgvIvO5ceI1HJUwrIW2goS4jDgA65woK/GvLb2PmI2EPXhuQnL5UlUVW1Rcjhk5y4T5buvu4q2qKAYtFWJzTen2ba9M9sW2tau92bOFKJAAJJ4zjJJPqafaKKAhnaFoKNrRyCuTOfi+yhYAaSDu3Y65/wAmogewq3H/AKbnf6NFXFRU3ZNyvdDdmMTSN8+ko9ykyV90prY4hIGDjnj4VYVFFQQFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAFFFFAf//Z"
          },
          {
            "timing": 2250,
            "timestamp": 5990689021679,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 2625,
            "timestamp": 5990689396679,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 3000,
            "timestamp": 5990689771679,
            "data": "data:image/jpeg;base64,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"
          }
        ]
      }
    },
    "final-screenshot": {
      "id": "final-screenshot",
      "title": "Final Screenshot",
      "description": "The last screenshot captured of the pageload.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "screenshot",
        "timing": 945,
        "timestamp": 5990687716330,
        "data": "data:image/jpeg;base64,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"
      }
    },
    "total-blocking-time": {
      "id": "total-blocking-time",
      "title": "Total Blocking Time",
      "description": "Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more about the Total Blocking Time metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/).",
      "score": 0.99,
      "scoreDisplayMode": "numeric",
      "numericValue": 67,
      "numericUnit": "millisecond",
      "displayValue": "70 ms",
      "scoringOptions": {
        "p10": 200,
        "median": 600
      }
    },
    "max-potential-fid": {
      "id": "max-potential-fid",
      "title": "Max Potential First Input Delay",
      "description": "The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more about the Maximum Potential First Input Delay metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/).",
      "score": 0.95,
      "scoreDisplayMode": "numeric",
      "numericValue": 107,
      "numericUnit": "millisecond",
      "displayValue": "110 ms"
    },
    "cumulative-layout-shift": {
      "id": "cumulative-layout-shift",
      "title": "Cumulative Layout Shift",
      "description": "Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/articles/cls).",
      "score": 0.51,
      "scoreDisplayMode": "numeric",
      "numericValue": 0.2452,
      "numericUnit": "unitless",
      "displayValue": "0.245",
      "scoringOptions": {
        "p10": 0.1,
        "median": 0.25
      },
      "details": {
        "type": "debugdata",
        "items": [
          {
            "cumulativeLayoutShiftMainFrame": 0.2452,
            "newEngineResultDiffered": false
          }
        ]
      }
    },
    "errors-in-console": {
      "id": "errors-in-console",
      "title": "Browser errors were logged to the console",
      "description": "Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more about this errors in console diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/)",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "sourceLocation",
            "valueType": "source-location",
            "label": "Source"
          },
          {
            "key": "description",
            "valueType": "code",
            "label": "Description"
          }
        ],
        "items": [
          {
            "source": "javascript",
            "description": "Access to fetch at 'https://user.cincinnati.com/PCIN-GUP/user/' from origin 'https://eu.cincinnati.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://eu.cincinnati.com/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          },
          {
            "source": "security",
            "description": "Error with Permissions-Policy header: Parse of permissions policy failed because of errors reported by structured header parser."
          },
          {
            "source": "network",
            "description": "Failed to load resource: net::ERR_FAILED",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://user.cincinnati.com/PCIN-GUP/user/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          }
        ]
      }
    },
    "server-response-time": {
      "id": "server-response-time",
      "title": "Initial server response time was short",
      "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 29,
      "numericUnit": "millisecond",
      "displayValue": "Root document took 30 ms",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "responseTime",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://eu.cincinnati.com/",
            "responseTime": 29
          }
        ],
        "overallSavingsMs": 0
      },
      "guidanceLevel": 1
    },
    "interactive": {
      "id": "interactive",
      "title": "Time to Interactive",
      "description": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/).",
      "score": 0.21,
      "scoreDisplayMode": "numeric",
      "numericValue": 10933.635330000001,
      "numericUnit": "millisecond",
      "displayValue": "10.9 s"
    },
    "user-timings": {
      "id": "user-timings",
      "title": "User Timing marks and measures",
      "description": "Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more about User Timing marks](https://developer.chrome.com/docs/lighthouse/performance/user-timings/).",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "timingType",
            "valueType": "text",
            "label": "Type"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Duration"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "redirects": {
      "id": "redirects",
      "title": "Avoid multiple page redirects",
      "description": "Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 1593.3429999999996,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 1,590 ms",
      "metricSavings": {
        "LCP": 1600,
        "FCP": 1600
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://cincinnati.com/",
            "wastedMs": 841.9339999999997
          },
          {
            "url": "https://www.cincinnati.com/",
            "wastedMs": 751.4089999999999
          },
          {
            "url": "https://eu.cincinnati.com/",
            "wastedMs": 0
          }
        ],
        "overallSavingsMs": 1593.3429999999996
      },
      "guidanceLevel": 2
    },
    "image-aspect-ratio": {
      "id": "image-aspect-ratio",
      "title": "Displays images with correct aspect ratio",
      "description": "Image display dimensions should match natural aspect ratio. [Learn more about image aspect ratio](https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Displayed)"
          },
          {
            "key": "actualAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Actual)"
          }
        ],
        "items": []
      }
    },
    "image-size-responsive": {
      "id": "image-size-responsive",
      "title": "Serves images with low resolution",
      "description": "Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn how to provide responsive images](https://web.dev/articles/serve-responsive-images).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedSize",
            "valueType": "text",
            "label": "Displayed size"
          },
          {
            "key": "actualSize",
            "valueType": "text",
            "label": "Actual size"
          },
          {
            "key": "expectedSize",
            "valueType": "text",
            "label": "Expected size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/75765094007-ohio-state-highway-patrol-stock-071524.jpg?crop=4028,2268,x6,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 364,
                "bottom": 557,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/757…\" alt=\"Arrest made after road worker hit, killed in Clermont County\">",
              "nodeLabel": "Arrest made after road worker hit, killed in Clermont County"
            },
            "displayedSize": "343 x 193",
            "actualSize": "270 x 152",
            "actualPixels": 41040,
            "expectedSize": "515 x 290",
            "expectedPixels": 149350
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89738205007-2271950402-1.jpg?crop=3499,1968,x0,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 606,
                "bottom": 799,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" alt=\"Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds\">",
              "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
            },
            "displayedSize": "343 x 193",
            "actualSize": "270 x 152",
            "actualPixels": 41040,
            "expectedSize": "515 x 290",
            "expectedPixels": 149350
          }
        ]
      }
    },
    "deprecations": {
      "id": "deprecations",
      "title": "Avoids deprecated APIs",
      "description": "Deprecated APIs will eventually be removed from the browser. [Learn more about deprecated APIs](https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "value",
            "valueType": "text",
            "label": "Deprecation / Warning"
          },
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "third-party-cookies": {
      "id": "third-party-cookies",
      "title": "Avoids third-party cookies",
      "description": "Third-party cookies may be blocked in some contexts. [Learn more about preparing for third-party cookie restrictions](https://privacysandbox.google.com/cookies/prepare/overview).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": []
      }
    },
    "mainthread-work-breakdown": {
      "id": "mainthread-work-breakdown",
      "title": "Minimize main-thread work",
      "description": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 2307.7119999999977,
      "numericUnit": "millisecond",
      "displayValue": "2.3 s",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "groupLabel",
            "valueType": "text",
            "label": "Category"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "group": "other",
            "groupLabel": "Other",
            "duration": 1026.955999999989
          },
          {
            "group": "scriptEvaluation",
            "groupLabel": "Script Evaluation",
            "duration": 695.5360000000088
          },
          {
            "group": "styleLayout",
            "groupLabel": "Style & Layout",
            "duration": 313.37199999999996
          },
          {
            "group": "scriptParseCompile",
            "groupLabel": "Script Parsing & Compilation",
            "duration": 119.63600000000001
          },
          {
            "group": "paintCompositeRender",
            "groupLabel": "Rendering",
            "duration": 79.03600000000003
          },
          {
            "group": "parseHTML",
            "groupLabel": "Parse HTML & CSS",
            "duration": 73.17599999999997
          }
        ],
        "sortedBy": [
          "duration"
        ]
      },
      "guidanceLevel": 1
    },
    "bootup-time": {
      "id": "bootup-time",
      "title": "JavaScript execution time",
      "description": "Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 621.2920000000026,
      "numericUnit": "millisecond",
      "displayValue": "0.6 s",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "total",
            "granularity": 1,
            "valueType": "ms",
            "label": "Total CPU Time"
          },
          {
            "key": "scripting",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Evaluation"
          },
          {
            "key": "scriptParseCompile",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Parse"
          }
        ],
        "items": [
          {
            "url": "https://eu.cincinnati.com/",
            "total": 872.0640000000001,
            "scripting": 72.28799999999998,
            "scriptParseCompile": 13.471999999999998
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "total": 451.7480000000028,
            "scripting": 265.6120000000026,
            "scriptParseCompile": 1.1840000000000002
          },
          {
            "url": "Unattributable",
            "total": 397.2080000000014,
            "scripting": 14.53199999999999,
            "scriptParseCompile": 0
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "total": 313.152,
            "scripting": 253.27599999999998,
            "scriptParseCompile": 0.928
          }
        ],
        "summary": {
          "wastedMs": 621.2920000000026
        },
        "sortedBy": [
          "total"
        ]
      },
      "guidanceLevel": 1
    },
    "diagnostics": {
      "id": "diagnostics",
      "title": "Diagnostics",
      "description": "Collection of useful page vitals.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "numRequests": 156,
            "numScripts": 55,
            "numStylesheets": 0,
            "numFonts": 8,
            "numTasks": 1597,
            "numTasksOver10ms": 10,
            "numTasksOver25ms": 3,
            "numTasksOver50ms": 2,
            "numTasksOver100ms": 0,
            "numTasksOver500ms": 0,
            "rtt": 0.2809999999999988,
            "throughput": 208008569.34836447,
            "maxRtt": 29.831999999999997,
            "maxServerLatency": 51.1055,
            "totalByteWeight": 5584583,
            "totalTaskTime": 576.9280000000002,
            "mainDocumentTransferSize": 36801
          }
        ]
      }
    },
    "network-requests": {
      "id": "network-requests",
      "title": "Network Requests",
      "description": "Lists the network requests that were made during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          },
          {
            "key": "networkRequestTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network Request Time"
          },
          {
            "key": "networkEndTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network End Time"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Transfer Size"
          },
          {
            "key": "resourceSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Resource Size"
          },
          {
            "key": "statusCode",
            "valueType": "text",
            "label": "Status Code"
          },
          {
            "key": "mimeType",
            "valueType": "text",
            "label": "MIME Type"
          },
          {
            "key": "resourceType",
            "valueType": "text",
            "label": "Resource Type"
          }
        ],
        "items": [
          {
            "url": "https://cincinnati.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 0,
            "networkRequestTime": 1.0710010528564453,
            "networkEndTime": 101.58300018310547,
            "finished": true,
            "transferSize": 372,
            "resourceSize": 0,
            "statusCode": 301,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://www.cincinnati.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 101.58300018310547,
            "networkRequestTime": 102.06599998474121,
            "networkEndTime": 113.69200038909912,
            "finished": true,
            "transferSize": 694,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://eu.cincinnati.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 113.69200038909912,
            "networkRequestTime": 114.04699993133545,
            "networkEndTime": 151.45499992370605,
            "finished": true,
            "transferSize": 36801,
            "resourceSize": 164787,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "Document",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 161.33799934387207,
            "networkRequestTime": 162.13399982452393,
            "networkEndTime": 185.56900024414062,
            "finished": true,
            "transferSize": 354,
            "resourceSize": 103,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "polyfill-fastly.io"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 161.6810007095337,
            "networkRequestTime": 162.95600032806396,
            "networkEndTime": 201.74300003051758,
            "finished": true,
            "transferSize": 4253,
            "resourceSize": 11823,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 161.83600044250488,
            "networkRequestTime": 163.30100059509277,
            "networkEndTime": 204.16900062561035,
            "finished": true,
            "transferSize": 1107,
            "resourceSize": 938,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 161.92100048065186,
            "networkRequestTime": 163.51099967956543,
            "networkEndTime": 207.24000072479248,
            "finished": true,
            "transferSize": 83856,
            "resourceSize": 335587,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e-aee4081c3dfb-20190715_RiverboatRace234.jpg?crop=3899,2193,x0,y222",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.07499980926514,
            "networkRequestTime": 163.66800022125244,
            "networkEndTime": 345.26299953460693,
            "finished": true,
            "transferSize": 1114430,
            "resourceSize": 1113628,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/75765094007-ohio-state-highway-patrol-stock-071524.jpg?crop=4028,2268,x6,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.1909999847412,
            "networkRequestTime": 164.07900047302246,
            "networkEndTime": 314.5559997558594,
            "finished": true,
            "transferSize": 8388,
            "resourceSize": 8203,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89738205007-2271950402-1.jpg?crop=3499,1968,x0,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.29300022125244,
            "networkRequestTime": 215.49100017547607,
            "networkEndTime": 223.1840000152588,
            "finished": true,
            "transferSize": 5984,
            "resourceSize": 5362,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/09/05/PCIN/85996837007-202526-aow-badge-cincinnati-logo-beacon-ortho.jpg?crop=601,599,x199,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.36899948120117,
            "networkRequestTime": 215.7140007019043,
            "networkEndTime": 224.50600051879883,
            "finished": true,
            "transferSize": 11977,
            "resourceSize": 11793,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/11/SAUB/89567113007-usatsi-28667140.jpg?crop=3319,3318,x927,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.45399951934814,
            "networkRequestTime": 215.88100051879883,
            "networkEndTime": 490.89799976348877,
            "finished": true,
            "transferSize": 11776,
            "resourceSize": 11518,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/27/PCIN/87490385007-eastern-michigan-eagles-at-cincinnati-bearcats-55973.jpg?crop=2200,2199,x165,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.53600025177002,
            "networkRequestTime": 216.24300003051758,
            "networkEndTime": 492.9360008239746,
            "finished": true,
            "transferSize": 10041,
            "resourceSize": 9914,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89725755007-summitccd-4212026-4.JPG?crop=2725,2724,x185,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.61699962615967,
            "networkRequestTime": 216.6560001373291,
            "networkEndTime": 338.79400062561035,
            "finished": true,
            "transferSize": 7716,
            "resourceSize": 7160,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/10/PCIN/89090292007-cincinnati-bearcats-vs-utah-utes-phillips-66-big-12-mens-basketball-tournament-1586.jpg?crop=2099,2100,x0,y155&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.70199966430664,
            "networkRequestTime": 216.99200057983398,
            "networkEndTime": 234.7140007019043,
            "finished": true,
            "transferSize": 11950,
            "resourceSize": 11660,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/89063884007-1321427.jpg?crop=1029,1028,x485,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.79400062561035,
            "networkRequestTime": 217.2530002593994,
            "networkEndTime": 230.1879997253418,
            "finished": true,
            "transferSize": 9067,
            "resourceSize": 8802,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/74073640007-06112024-plants-15.jpg?crop=1479,1478,x443,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.8780002593994,
            "networkRequestTime": 217.61700057983398,
            "networkEndTime": 313.19999980926514,
            "finished": true,
            "transferSize": 3685739,
            "resourceSize": 3683550,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/11/PCIN/89108634007-cincinnati-bearcats-vs-ucf-knights-phillips-66-big-12-mens-basketball-tournament-1659.jpg?crop=2200,2199,x495,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 162.95399951934814,
            "networkRequestTime": 218.01600074768066,
            "networkEndTime": 226.36300086975098,
            "finished": true,
            "transferSize": 9662,
            "resourceSize": 9393,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2019/11/08/PCIN/40127947-857f-40c2-8d9f-19e0880d57fa-MOREchili_0570_EDIT.JPG?crop=1667,1667,x220,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 163.0329999923706,
            "networkRequestTime": 218.4049997329712,
            "networkEndTime": 345.01000022888184,
            "finished": true,
            "transferSize": 9263,
            "resourceSize": 9114,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/10/09/PCIN/75591175007-100924-skyline-chili-08.jpg?crop=5760,5759,x1728,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 163.11999988555908,
            "networkRequestTime": 218.6540002822876,
            "networkEndTime": 226.5870008468628,
            "finished": true,
            "transferSize": 10771,
            "resourceSize": 10612,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/08/23/PCIN/85789328007-summit-cincinnati-country-day-8222512.JPG?crop=3132,3131,x705,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 163.19400024414062,
            "networkRequestTime": 218.875,
            "networkEndTime": 531.164999961853,
            "finished": true,
            "transferSize": 7797,
            "resourceSize": 7595,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/appservices/universal-web/universal/icons/icon-instagram_24.png",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 163.282000541687,
            "networkRequestTime": 219.2180004119873,
            "networkEndTime": 230.371000289917,
            "finished": true,
            "transferSize": 2065,
            "resourceSize": 1282,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "sessionTargetType": "page",
            "protocol": "",
            "rendererStartTime": 168.2810001373291,
            "networkRequestTime": 168.2810001373291,
            "networkEndTime": 273.4380006790161,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 0,
            "statusCode": -1,
            "mimeType": "",
            "resourceType": "Script",
            "priority": "High",
            "isLinkPreload": true,
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 170.6180009841919,
            "networkRequestTime": 219.48900032043457,
            "networkEndTime": 227.72399997711182,
            "finished": true,
            "transferSize": 1690,
            "resourceSize": 3664,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 203.2150001525879,
            "networkRequestTime": 204.47500038146973,
            "networkEndTime": 211.10500049591064,
            "finished": true,
            "transferSize": 17813,
            "resourceSize": 78891,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 203.3400001525879,
            "networkRequestTime": 204.69900035858154,
            "networkEndTime": 210.10799980163574,
            "finished": true,
            "transferSize": 5470,
            "resourceSize": 18995,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/cincinnati/logos-and-branding/logo-default.svg",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 218.17899990081787,
            "networkRequestTime": 220.36800003051758,
            "networkEndTime": 235.8420000076294,
            "finished": true,
            "transferSize": 3166,
            "resourceSize": 7959,
            "statusCode": 200,
            "mimeType": "image/svg+xml",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 226.0329999923706,
            "networkRequestTime": 263.253999710083,
            "networkEndTime": 274.24199962615967,
            "finished": true,
            "transferSize": 18644,
            "resourceSize": 17984,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 226.16599941253662,
            "networkRequestTime": 264.1909999847412,
            "networkEndTime": 274.57200050354004,
            "finished": true,
            "transferSize": 20862,
            "resourceSize": 20664,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 226.3100004196167,
            "networkRequestTime": 265.01200008392334,
            "networkEndTime": 372.492000579834,
            "finished": true,
            "transferSize": 18466,
            "resourceSize": 17876,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 226.42599964141846,
            "networkRequestTime": 267.66700077056885,
            "networkEndTime": 276.60700035095215,
            "finished": true,
            "transferSize": 16786,
            "resourceSize": 16620,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 299.8839998245239,
            "networkRequestTime": 300.4660005569458,
            "networkEndTime": 344.58000087738037,
            "finished": true,
            "transferSize": 1505,
            "resourceSize": 5074,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/argon/navreimagined/pcin/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 300.4630002975464,
            "networkRequestTime": 301.4670009613037,
            "networkEndTime": 344.282000541687,
            "finished": true,
            "transferSize": 1471,
            "resourceSize": 4096,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 306.3990001678467,
            "networkRequestTime": 307.1260004043579,
            "networkEndTime": 440.2119998931885,
            "finished": true,
            "transferSize": 3247,
            "resourceSize": 16741,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 306.8140001296997,
            "networkRequestTime": 307.4300003051758,
            "networkEndTime": 439.91800022125244,
            "finished": true,
            "transferSize": 4226,
            "resourceSize": 20958,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://user.cincinnati.com/PCIN-GUP/user/",
            "sessionTargetType": "page",
            "protocol": "",
            "rendererStartTime": 322.0340003967285,
            "networkRequestTime": 322.0340003967285,
            "networkEndTime": 378.4400005340576,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 0,
            "statusCode": -1,
            "mimeType": "",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=PCIN",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 323.17000007629395,
            "networkRequestTime": 323.7490005493164,
            "networkEndTime": 343.9590005874634,
            "finished": true,
            "transferSize": 210,
            "resourceSize": 56,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 370.26700019836426,
            "networkRequestTime": 370.835000038147,
            "networkEndTime": 374.76800060272217,
            "finished": true,
            "transferSize": 3818,
            "resourceSize": 10912,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://atoms.cincinnati.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 379.7770004272461,
            "networkRequestTime": 382.08300018310547,
            "networkEndTime": 433.1550006866455,
            "finished": true,
            "transferSize": 16440,
            "resourceSize": 58540,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/universal.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 381.54800033569336,
            "networkRequestTime": 382.539999961853,
            "networkEndTime": 386.3390007019043,
            "finished": true,
            "transferSize": 5669,
            "resourceSize": 25631,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 381.8730001449585,
            "networkRequestTime": 383.60700035095215,
            "networkEndTime": 488.69999980926514,
            "finished": true,
            "transferSize": 784,
            "resourceSize": 1403,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/custom-style.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 388.8790006637573,
            "networkRequestTime": 389.42500019073486,
            "networkEndTime": 483.8129997253418,
            "finished": true,
            "transferSize": 2732,
            "resourceSize": 5518,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 487.79800033569336,
            "networkRequestTime": 488.9610004425049,
            "networkEndTime": 593.0729999542236,
            "finished": true,
            "transferSize": 522,
            "resourceSize": 567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/style-gather.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 488.04500102996826,
            "networkRequestTime": 489.1800003051758,
            "networkEndTime": 593.3090000152588,
            "finished": true,
            "transferSize": 2998,
            "resourceSize": 9685,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://atoms.cincinnati.com/atoms-configs/prod/dist/uw/PCIN/(null)/journey.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 495.992000579834,
            "networkRequestTime": 497.6820011138916,
            "networkEndTime": 530.3650007247925,
            "finished": true,
            "transferSize": 283,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "application/xml",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/legacy-element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 501.378999710083,
            "networkRequestTime": 501.789999961853,
            "networkEndTime": 507.44900035858154,
            "finished": true,
            "transferSize": 9803,
            "resourceSize": 37955,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer-fn.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 501.621000289917,
            "networkRequestTime": 502.01399993896484,
            "networkEndTime": 507.73500061035156,
            "finished": true,
            "transferSize": 1384,
            "resourceSize": 1536,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/templatizer-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 501.92100048065186,
            "networkRequestTime": 502.5009994506836,
            "networkEndTime": 597.9660005569458,
            "finished": true,
            "transferSize": 2407,
            "resourceSize": 6013,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-bind.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 502.10100078582764,
            "networkRequestTime": 502.7130002975464,
            "networkEndTime": 515.952000617981,
            "finished": true,
            "transferSize": 2328,
            "resourceSize": 5635,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-repeat.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 502.32200050354004,
            "networkRequestTime": 502.89000034332275,
            "networkEndTime": 512.1979999542236,
            "finished": true,
            "transferSize": 8467,
            "resourceSize": 26333,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-if.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 502.664999961853,
            "networkRequestTime": 503.1639995574951,
            "networkEndTime": 513.4840002059937,
            "finished": true,
            "transferSize": 4141,
            "resourceSize": 10725,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/array-selector.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 503.07600021362305,
            "networkRequestTime": 503.35400009155273,
            "networkEndTime": 514.7679996490479,
            "finished": true,
            "transferSize": 4565,
            "resourceSize": 14055,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/mutable-data-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 503.3740005493164,
            "networkRequestTime": 503.72400093078613,
            "networkEndTime": 606.8470001220703,
            "finished": true,
            "transferSize": 2055,
            "resourceSize": 7229,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/html-tag.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 503.58100032806396,
            "networkRequestTime": 504.17799949645996,
            "networkEndTime": 607.8580007553101,
            "finished": true,
            "transferSize": 2073,
            "resourceSize": 5533,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/89645811007-paul-kroner-studio-01-web.jpg?crop=1999,1125,x0,y0&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.1070003509521,
            "networkRequestTime": 516.581000328064,
            "networkEndTime": 630.96399974823,
            "finished": true,
            "transferSize": 19417,
            "resourceSize": 19162,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89731173007-dsc-05011.jpg?crop=1380,777,x0,y647&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.032000541687,
            "networkRequestTime": 517.2969999313354,
            "networkEndTime": 617.3229999542236,
            "finished": true,
            "transferSize": 13734,
            "resourceSize": 13176,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/-mm-/10b9c02c0cb3aa3cfa335d21f00385456ee528c9/c=0-0-3808-2152/local/-/media/2015/08/21/Cincinnati/Cincinnati/635757981643305435-082115-REDS-DBACKS-0774.jpg?width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.2490005493164,
            "networkRequestTime": 517.5600004196167,
            "networkEndTime": 520.3780002593994,
            "finished": true,
            "transferSize": 8998,
            "resourceSize": 8852,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89726685007-simon-kenton-pioneers-at-ryle-raiders-3817.jpg?crop=3299,1857,x0,y171&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.5160007476807,
            "networkRequestTime": 517.7990007400513,
            "networkEndTime": 522.7180004119873,
            "finished": true,
            "transferSize": 13499,
            "resourceSize": 12936,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89725773007-summitccd-4212026-12.JPG?crop=4179,2352,x0,y360&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.7650003433228,
            "networkRequestTime": 518.1290006637573,
            "networkEndTime": 524.7720003128052,
            "finished": true,
            "transferSize": 8114,
            "resourceSize": 7892,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/20/PCIN/89253769007-032026-wyoming-glenville-15.JPG?crop=6712,3776,x0,y349&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.9329996109009,
            "networkRequestTime": 518.3340005874634,
            "networkEndTime": 526.5209999084473,
            "finished": true,
            "transferSize": 14140,
            "resourceSize": 13897,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/19/PZAN/89221433007-22-state-wrestling-finals-031526.jpg?crop=1618,910,x1,y55&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 518.2510004043579,
            "networkRequestTime": 518.5170001983643,
            "networkEndTime": 526.8030004501343,
            "finished": true,
            "transferSize": 12602,
            "resourceSize": 12349,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/89679064007-041826-uc-spring-showcase-01.JPG?crop=8639,4860,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 518.5209999084473,
            "networkRequestTime": 518.8110008239746,
            "networkEndTime": 533.5180006027222,
            "finished": true,
            "transferSize": 10358,
            "resourceSize": 10108,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/89670753007-base-ih-batavia-3.JPG?crop=5179,2916,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 518.7069997787476,
            "networkRequestTime": 519.0180006027222,
            "networkEndTime": 532.2309999465942,
            "finished": true,
            "transferSize": 11558,
            "resourceSize": 10992,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/89670922007-moeller-eldervolleyball-4172026-5.JPG?crop=2642,1486,x0,y354&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 518.9759998321533,
            "networkRequestTime": 519.2210006713867,
            "networkEndTime": 534.5620002746582,
            "finished": true,
            "transferSize": 9879,
            "resourceSize": 9627,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89733006007-img-e-82101.JPG?crop=1169,658,x0,y614&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 524.7489995956421,
            "networkRequestTime": 527.6560001373291,
            "networkEndTime": 543.4450006484985,
            "finished": true,
            "transferSize": 9582,
            "resourceSize": 9025,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89724977007-usatsi-28779888.jpg?crop=6445,3626,x0,y335&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 525.1330003738403,
            "networkRequestTime": 527.8390007019043,
            "networkEndTime": 558.0179996490479,
            "finished": true,
            "transferSize": 7933,
            "resourceSize": 7706,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/89700400007-sg-13935.jpg?crop=809,455,x0,y42&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 525.4260005950928,
            "networkRequestTime": 527.9770002365112,
            "networkEndTime": 542.2090005874634,
            "finished": true,
            "transferSize": 11910,
            "resourceSize": 11685,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/89636320007-san-francisco-giants-at-cincinnati-reds-3518.jpg?crop=3299,1856,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 525.6280002593994,
            "networkRequestTime": 528.242000579834,
            "networkEndTime": 556.8239994049072,
            "finished": true,
            "transferSize": 10628,
            "resourceSize": 10345,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/09/05/PCIN/85996837007-202526-aow-badge-cincinnati-logo-beacon-ortho.jpg?crop=999,563,x0,y18&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 525.8039999008179,
            "networkRequestTime": 528.4710006713867,
            "networkEndTime": 550.795000076294,
            "finished": true,
            "transferSize": 9808,
            "resourceSize": 9613,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/89703362007-042026-dexter-lawrence-12.JPG?crop=4555,2563,x0,y237&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 525.9630002975464,
            "networkRequestTime": 529.6360006332397,
            "networkEndTime": 552.0050001144409,
            "finished": true,
            "transferSize": 9578,
            "resourceSize": 9353,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/89700824007-042026-dexter-lawrence-02.JPG?crop=4891,2752,x0,y254&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 526.1239995956421,
            "networkRequestTime": 529.8400001525879,
            "networkEndTime": 555.7120008468628,
            "finished": true,
            "transferSize": 11202,
            "resourceSize": 10955,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89692942007.jpg?width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 526.2980003356934,
            "networkRequestTime": 530.3110008239746,
            "networkEndTime": 552.7520008087158,
            "finished": true,
            "transferSize": 9726,
            "resourceSize": 9615,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/89679070007-041826-uc-spring-showcase-03.JPG?crop=5615,3159,x0,y292&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 526.452000617981,
            "networkRequestTime": 530.5340003967285,
            "networkEndTime": 548.918999671936,
            "finished": true,
            "transferSize": 12925,
            "resourceSize": 12676,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/15/PCIN/89616601007-041426-reds-giants-28.JPG?crop=8639,4860,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 526.6260004043579,
            "networkRequestTime": 530.8090000152588,
            "networkEndTime": 555.4300003051758,
            "finished": true,
            "transferSize": 10474,
            "resourceSize": 9907,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://atoms.cincinnati.com/atoms-configs/prod/dist/uw/pcin/control/journey.json?originalSegment=(null)",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 530.3650007247925,
            "networkRequestTime": 539.58899974823,
            "networkEndTime": 545.9700002670288,
            "finished": true,
            "transferSize": 508,
            "resourceSize": 130,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "cincinnati.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/class.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 531.331000328064,
            "networkRequestTime": 534.7930002212524,
            "networkEndTime": 634.576000213623,
            "finished": true,
            "transferSize": 6611,
            "resourceSize": 19488,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 534.1520004272461,
            "networkRequestTime": 536.0530004501343,
            "networkEndTime": 647.2360000610352,
            "finished": true,
            "transferSize": 849,
            "resourceSize": 555,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 534.3950004577637,
            "networkRequestTime": 536.4359998703003,
            "networkEndTime": 548.3900003433228,
            "finished": true,
            "transferSize": 9566,
            "resourceSize": 31453,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/gesture-event-listeners.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 534.6110000610352,
            "networkRequestTime": 536.7369995117188,
            "networkEndTime": 646.1330003738403,
            "finished": true,
            "transferSize": 1851,
            "resourceSize": 4946,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/dir-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 534.7840003967285,
            "networkRequestTime": 536.9280004501343,
            "networkEndTime": 644.4650001525879,
            "finished": true,
            "transferSize": 2838,
            "resourceSize": 7216,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 534.9689998626709,
            "networkRequestTime": 537.1310005187988,
            "networkEndTime": 547.1080007553101,
            "finished": true,
            "transferSize": 1603,
            "resourceSize": 2293,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/import-href.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 535.1250009536743,
            "networkRequestTime": 537.3410005569458,
            "networkEndTime": 635.8340005874634,
            "finished": true,
            "transferSize": 1767,
            "resourceSize": 3414,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/render-status.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 535.3460006713867,
            "networkRequestTime": 537.5370006561279,
            "networkEndTime": 643.5030002593994,
            "finished": true,
            "transferSize": 1778,
            "resourceSize": 3543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/unresolved.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 535.5190000534058,
            "networkRequestTime": 537.9079999923706,
            "networkEndTime": 646.2880001068115,
            "finished": true,
            "transferSize": 623,
            "resourceSize": 867,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer.dom.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 535.7160005569458,
            "networkRequestTime": 538.1070003509521,
            "networkEndTime": 636.878999710083,
            "finished": true,
            "transferSize": 3807,
            "resourceSize": 11727,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer-element.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 556.8520002365112,
            "networkRequestTime": 558.2320003509521,
            "networkEndTime": 562.0490007400513,
            "finished": true,
            "transferSize": 847,
            "resourceSize": 1479,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/templatize.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 557.3050003051758,
            "networkRequestTime": 558.4370002746582,
            "networkEndTime": 565.5329999923706,
            "finished": true,
            "transferSize": 7732,
            "resourceSize": 25151,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/debounce.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 557.6310005187988,
            "networkRequestTime": 558.5740003585815,
            "networkEndTime": 663.2840003967285,
            "finished": true,
            "transferSize": 1870,
            "resourceSize": 4464,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flush.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 557.9500007629395,
            "networkRequestTime": 558.7259998321533,
            "networkEndTime": 562.9730005264282,
            "finished": true,
            "transferSize": 1315,
            "resourceSize": 1543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/mutable-data.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 558.3330001831055,
            "networkRequestTime": 558.8550004959106,
            "networkEndTime": 564.5000009536743,
            "finished": true,
            "transferSize": 3163,
            "resourceSize": 10630,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/array-splice.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 566.1949996948242,
            "networkRequestTime": 566.6440000534058,
            "networkEndTime": 666.496000289917,
            "finished": true,
            "transferSize": 3436,
            "resourceSize": 8392,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/boot.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 567.738000869751,
            "networkRequestTime": 568.238000869751,
            "networkEndTime": 671.5530004501343,
            "finished": true,
            "transferSize": 1224,
            "resourceSize": 2576,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 567.9300003051758,
            "networkRequestTime": 568.8770008087158,
            "networkEndTime": 672.9230003356934,
            "finished": true,
            "transferSize": 25988,
            "resourceSize": 101693,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/settings.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 571.3500003814697,
            "networkRequestTime": 571.8440008163452,
            "networkEndTime": 676.3450002670288,
            "finished": true,
            "transferSize": 2061,
            "resourceSize": 4154,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/resolve-url.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 571.6460008621216,
            "networkRequestTime": 572.4680004119873,
            "networkEndTime": 670.2140007019043,
            "finished": true,
            "transferSize": 1478,
            "resourceSize": 3096,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-module.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 571.8520002365112,
            "networkRequestTime": 572.9930000305176,
            "networkEndTime": 677.6190004348755,
            "finished": true,
            "transferSize": 2845,
            "resourceSize": 6682,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 572.0900001525879,
            "networkRequestTime": 573.2880001068115,
            "networkEndTime": 678.9829998016357,
            "finished": true,
            "transferSize": 3306,
            "resourceSize": 10244,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/sites/cincinnati/images/favicon.png",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 634.3320007324219,
            "networkRequestTime": 637.1300001144409,
            "networkEndTime": 640.0010004043579,
            "finished": true,
            "transferSize": 1999,
            "resourceSize": 1850,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Other",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flattened-nodes-observer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 639.0540008544922,
            "networkRequestTime": 640.1750001907349,
            "networkEndTime": 642.4770002365112,
            "finished": true,
            "transferSize": 3217,
            "resourceSize": 10247,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/async.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 648.943000793457,
            "networkRequestTime": 650.6040000915527,
            "networkEndTime": 653.375,
            "finished": true,
            "transferSize": 1921,
            "resourceSize": 6112,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-accessors.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 652.1239995956421,
            "networkRequestTime": 653.5700006484985,
            "networkEndTime": 747.4870004653931,
            "finished": true,
            "transferSize": 4528,
            "resourceSize": 13445,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/gestures.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 653.4169998168945,
            "networkRequestTime": 655.5080003738403,
            "networkEndTime": 748.9409999847412,
            "finished": true,
            "transferSize": 8438,
            "resourceSize": 27357,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/path.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 675.9340000152588,
            "networkRequestTime": 679.331000328064,
            "networkEndTime": 780.3030004501343,
            "finished": true,
            "transferSize": 2241,
            "resourceSize": 7567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/case-map.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 676.327000617981,
            "networkRequestTime": 679.66100025177,
            "networkEndTime": 783.5370006561279,
            "finished": true,
            "transferSize": 1342,
            "resourceSize": 1820,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/template-stamp.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 676.6060009002686,
            "networkRequestTime": 679.9220008850098,
            "networkEndTime": 783.78600025177,
            "finished": true,
            "transferSize": 6267,
            "resourceSize": 20406,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/telemetry.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 684.1590003967285,
            "networkRequestTime": 684.5840005874634,
            "networkEndTime": 779.1710004806519,
            "finished": true,
            "transferSize": 958,
            "resourceSize": 1781,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-changed.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 684.4580001831055,
            "networkRequestTime": 684.867000579834,
            "networkEndTime": 788.795000076294,
            "finished": true,
            "transferSize": 5739,
            "resourceSize": 21020,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 792.6270008087158,
            "networkRequestTime": 793.3150005340576,
            "networkEndTime": 796.8100004196167,
            "finished": true,
            "transferSize": 1535,
            "resourceSize": 3075,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polyme…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 799.3450002670288,
            "networkRequestTime": 799.3450002670288,
            "networkEndTime": 799.6420001983643,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2183,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 800.5299997329712,
            "networkRequestTime": 800.5299997329712,
            "networkEndTime": 800.8439998626709,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2672,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 801.9089994430542,
            "networkRequestTime": 801.9089994430542,
            "networkEndTime": 802.2769994735718,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9256,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 803.7659997940063,
            "networkRequestTime": 803.7659997940063,
            "networkEndTime": 804.0629997253418,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5009,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.si…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 805.5100002288818,
            "networkRequestTime": 805.5100002288818,
            "networkEndTime": 805.9090003967285,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 361,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 806.5780000686646,
            "networkRequestTime": 807.2159996032715,
            "networkEndTime": 811.5590000152588,
            "finished": true,
            "transferSize": 4843,
            "resourceSize": 10617,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 812.2140007019043,
            "networkRequestTime": 812.7450008392334,
            "networkEndTime": 815.4400005340576,
            "finished": true,
            "transferSize": 124,
            "resourceSize": 20664,
            "statusCode": 304,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 813.048999786377,
            "networkRequestTime": 813.5190000534058,
            "networkEndTime": 816.5370006561279,
            "finished": true,
            "transferSize": 95,
            "resourceSize": 16620,
            "statusCode": 304,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 834.2819995880127,
            "networkRequestTime": 834.2819995880127,
            "networkEndTime": 834.5490007400513,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3665,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20f…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 835.9029998779297,
            "networkRequestTime": 835.9029998779297,
            "networkEndTime": 836.1029996871948,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1863,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 836.9850006103516,
            "networkRequestTime": 836.9850006103516,
            "networkEndTime": 837.2470006942749,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6199,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20wit…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 838.8459997177124,
            "networkRequestTime": 838.8459997177124,
            "networkEndTime": 839.08899974823,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7136,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DA…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 840.3210000991821,
            "networkRequestTime": 840.3210000991821,
            "networkEndTime": 840.5130004882812,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1394,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 841.4209995269775,
            "networkRequestTime": 841.4209995269775,
            "networkEndTime": 841.6830005645752,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5682,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 843.0019998550415,
            "networkRequestTime": 843.0019998550415,
            "networkEndTime": 843.8440008163452,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 20501,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 846.3599996566772,
            "networkRequestTime": 846.3599996566772,
            "networkEndTime": 846.7130002975464,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 12872,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 848.8769998550415,
            "networkRequestTime": 848.8769998550415,
            "networkEndTime": 849.3990001678467,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19930,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 853.371000289917,
            "networkRequestTime": 853.371000289917,
            "networkEndTime": 854.8149995803833,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 100964,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 861.5939998626709,
            "networkRequestTime": 861.5939998626709,
            "networkEndTime": 861.7439994812012,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1356,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 862.914999961853,
            "networkRequestTime": 862.914999961853,
            "networkEndTime": 863.157000541687,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9658,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 864.6540002822876,
            "networkRequestTime": 864.6540002822876,
            "networkEndTime": 865.2680006027222,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 30666,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 867.5329999923706,
            "networkRequestTime": 867.5329999923706,
            "networkEndTime": 867.6830005645752,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3961,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 869.0609998703003,
            "networkRequestTime": 869.0609998703003,
            "networkEndTime": 869.5250005722046,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 26851,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 871.9589996337891,
            "networkRequestTime": 871.9589996337891,
            "networkEndTime": 872.1070003509521,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 4429,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 873.0050001144409,
            "networkRequestTime": 873.0050001144409,
            "networkEndTime": 873.1909999847412,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6777,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20whe…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 874.0649995803833,
            "networkRequestTime": 874.0649995803833,
            "networkEndTime": 874.206000328064,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2990,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 874.8080005645752,
            "networkRequestTime": 874.8080005645752,
            "networkEndTime": 874.9329996109009,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3121,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 875.6600008010864,
            "networkRequestTime": 875.6600008010864,
            "networkEndTime": 875.757999420166,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 480,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 876.4740009307861,
            "networkRequestTime": 876.4740009307861,
            "networkEndTime": 876.6520004272461,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7970,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 878.0030002593994,
            "networkRequestTime": 878.0030002593994,
            "networkEndTime": 878.2240009307861,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9727,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 879.6030006408691,
            "networkRequestTime": 879.6030006408691,
            "networkEndTime": 879.7199993133545,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1114,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 880.3330001831055,
            "networkRequestTime": 880.3330001831055,
            "networkEndTime": 880.5740003585815,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 11133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 882.2769994735718,
            "networkRequestTime": 882.2769994735718,
            "networkEndTime": 882.8889999389648,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 37092,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 885.6100006103516,
            "networkRequestTime": 885.6100006103516,
            "networkEndTime": 885.9340000152588,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19044,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 887.4099998474121,
            "networkRequestTime": 887.4099998474121,
            "networkEndTime": 887.5299997329712,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1111,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 888.2160005569458,
            "networkRequestTime": 888.2160005569458,
            "networkEndTime": 888.4330005645752,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10198,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 889.7740001678467,
            "networkRequestTime": 889.7740001678467,
            "networkEndTime": 890.1199998855591,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 24612,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPoly…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 892.9060001373291,
            "networkRequestTime": 892.9060001373291,
            "networkEndTime": 893.0830001831055,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5584,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 894.1639995574951,
            "networkRequestTime": 894.1639995574951,
            "networkEndTime": 894.318000793457,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5022,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 895.4630002975464,
            "networkRequestTime": 895.4630002975464,
            "networkEndTime": 895.8639993667603,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5107,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 896.7270002365112,
            "networkRequestTime": 896.7270002365112,
            "networkEndTime": 896.8320007324219,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 939,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 897.8640003204346,
            "networkRequestTime": 897.8640003204346,
            "networkEndTime": 898.2810001373291,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 25690,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 900.8380002975464,
            "networkRequestTime": 900.8380002975464,
            "networkEndTime": 901.0749998092651,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 902.5630006790161,
            "networkRequestTime": 902.5630006790161,
            "networkEndTime": 902.7779998779297,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 13519,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoi…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 904.2140007019043,
            "networkRequestTime": 904.2140007019043,
            "networkEndTime": 904.3669996261597,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6798,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElem…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 905.1380004882812,
            "networkRequestTime": 905.1380004882812,
            "networkEndTime": 905.2390003204346,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 314,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 918.2410001754761,
            "networkRequestTime": 918.8450002670288,
            "networkEndTime": 927.585000038147,
            "finished": true,
            "transferSize": 45,
            "resourceSize": 20664,
            "statusCode": 304,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 918.8390007019043,
            "networkRequestTime": 919.1800003051758,
            "networkEndTime": 926.6199998855591,
            "finished": true,
            "transferSize": 72,
            "resourceSize": 16620,
            "statusCode": 304,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          }
        ],
        "debugData": {
          "type": "debugdata",
          "networkStartTimeTs": 5990686772740,
          "initiators": [
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 220,
              "columnNumber": 214
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 220,
              "columnNumber": 356
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 220,
              "columnNumber": 768
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 220,
              "columnNumber": 1217
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 522,
              "columnNumber": 939
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 523,
              "columnNumber": 1280
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 524,
              "columnNumber": 1132
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 530,
              "columnNumber": 1497
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 532,
              "columnNumber": 1308
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 534,
              "columnNumber": 1557
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 536,
              "columnNumber": 1333
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 538,
              "columnNumber": 1766
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 540,
              "columnNumber": 1241
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 542,
              "columnNumber": 1306
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 544,
              "columnNumber": 1788
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 546,
              "columnNumber": 1356
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 548,
              "columnNumber": 1360
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 550,
              "columnNumber": 1452
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 554,
              "columnNumber": 287
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 0,
              "columnNumber": 22
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 1,
              "columnNumber": 20
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 561,
              "columnNumber": 15
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 561,
              "columnNumber": 15
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 561,
              "columnNumber": 15
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 561,
              "columnNumber": 15
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.cincinnati.com/",
              "lineNumber": 594,
              "columnNumber": 655
            }
          ]
        }
      }
    },
    "network-rtt": {
      "id": "network-rtt",
      "title": "Network Round Trip Times",
      "description": "Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more about the Round Trip Time](https://hpbn.co/primer-on-latency-and-bandwidth/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 29.831999999999997,
      "numericUnit": "millisecond",
      "displayValue": "30 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "rtt",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://cincinnati.com",
            "rtt": 29.831999999999997
          },
          {
            "origin": "https://eu.cincinnati.com",
            "rtt": 1.0661099999999997
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "rtt": 0.8999999999999999
          },
          {
            "origin": "https://atoms.cincinnati.com",
            "rtt": 0.8999999999999999
          },
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "rtt": 0.41199999999999903
          },
          {
            "origin": "https://www.cincinnati.com",
            "rtt": 0.40700000000000003
          },
          {
            "origin": "https://polyfill-fastly.io",
            "rtt": 0.3509999999999991
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "rtt": 0.2809999999999988
          }
        ],
        "sortedBy": [
          "rtt"
        ]
      }
    },
    "network-server-latency": {
      "id": "network-server-latency",
      "title": "Server Backend Latencies",
      "description": "Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more about server response time](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 51.1055,
      "numericUnit": "millisecond",
      "displayValue": "50 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "serverResponseTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "serverResponseTime": 51.1055
          },
          {
            "origin": "https://eu.cincinnati.com",
            "serverResponseTime": 28.22989
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "serverResponseTime": 8.922000000000002
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "serverResponseTime": 5.633999999999999
          },
          {
            "origin": "https://atoms.cincinnati.com",
            "serverResponseTime": 3.4450000000000007
          },
          {
            "origin": "https://cincinnati.com",
            "serverResponseTime": 3.2810000000000024
          },
          {
            "origin": "https://polyfill-fastly.io",
            "serverResponseTime": 1.2310000000000016
          },
          {
            "origin": "https://www.cincinnati.com",
            "serverResponseTime": 1.0309999999999988
          }
        ],
        "sortedBy": [
          "serverResponseTime"
        ]
      }
    },
    "main-thread-tasks": {
      "id": "main-thread-tasks",
      "title": "Tasks",
      "description": "Lists the toplevel main thread tasks that executed during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "End Time"
          }
        ],
        "items": [
          {
            "duration": 10.734,
            "startTime": 154.183
          },
          {
            "duration": 6.681,
            "startTime": 165.374
          },
          {
            "duration": 10.318,
            "startTime": 213.388
          },
          {
            "duration": 29.329,
            "startTime": 223.719
          },
          {
            "duration": 5.972,
            "startTime": 267.142
          },
          {
            "duration": 5.27,
            "startTime": 274.749
          },
          {
            "duration": 6.262,
            "startTime": 285.34
          },
          {
            "duration": 5.427,
            "startTime": 291.931
          },
          {
            "duration": 53.292,
            "startTime": 297.605
          },
          {
            "duration": 94.625,
            "startTime": 391.71
          },
          {
            "duration": 7.465,
            "startTime": 490.013
          },
          {
            "duration": 14.926,
            "startTime": 505.593
          },
          {
            "duration": 7.488,
            "startTime": 520.543
          },
          {
            "duration": 10.939,
            "startTime": 540.37
          },
          {
            "duration": 5.282,
            "startTime": 674.062
          },
          {
            "duration": 19.725,
            "startTime": 809.102
          },
          {
            "duration": 6.589,
            "startTime": 851.035
          },
          {
            "duration": 5.72,
            "startTime": 857.669
          },
          {
            "duration": 10.276,
            "startTime": 906.525
          },
          {
            "duration": 12.581,
            "startTime": 916.823
          }
        ]
      }
    },
    "metrics": {
      "id": "metrics",
      "title": "Metrics",
      "description": "Collects all available metrics.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 10934,
      "numericUnit": "millisecond",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "firstContentfulPaint": 3895,
            "largestContentfulPaint": 10934,
            "interactive": 10934,
            "speedIndex": 3895,
            "totalBlockingTime": 67,
            "maxPotentialFID": 107,
            "cumulativeLayoutShift": 0.2452,
            "cumulativeLayoutShiftMainFrame": 0.2452,
            "lcpLoadDelay": 3627,
            "lcpLoadDuration": 7626,
            "timeToFirstByte": 628,
            "observedTimeOrigin": 0,
            "observedTimeOriginTs": 5990686771679,
            "observedNavigationStart": 0,
            "observedNavigationStartTs": 5990686771679,
            "observedFirstPaint": 266,
            "observedFirstPaintTs": 5990687038037,
            "observedFirstContentfulPaint": 266,
            "observedFirstContentfulPaintTs": 5990687038037,
            "observedFirstContentfulPaintAllFrames": 266,
            "observedFirstContentfulPaintAllFramesTs": 5990687038037,
            "observedLargestContentfulPaint": 497,
            "observedLargestContentfulPaintTs": 5990687268203,
            "observedLargestContentfulPaintAllFrames": 497,
            "observedLargestContentfulPaintAllFramesTs": 5990687268203,
            "observedTraceEnd": 3246,
            "observedTraceEndTs": 5990690017887,
            "observedLoad": 633,
            "observedLoadTs": 5990687404648,
            "observedDomContentLoaded": 350,
            "observedDomContentLoadedTs": 5990687121343,
            "observedCumulativeLayoutShift": 0.2452,
            "observedCumulativeLayoutShiftMainFrame": 0.2452,
            "observedFirstVisualChange": 266,
            "observedFirstVisualChangeTs": 5990687037679,
            "observedLastVisualChange": 944,
            "observedLastVisualChangeTs": 5990687715679,
            "observedSpeedIndex": 426,
            "observedSpeedIndexTs": 5990687197920
          },
          {
            "lcpInvalidated": false
          }
        ]
      }
    },
    "resource-summary": {
      "id": "resource-summary",
      "title": "Resources Summary",
      "description": "Aggregates all network requests and groups them by type",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "label",
            "valueType": "text",
            "label": "Resource Type"
          },
          {
            "key": "requestCount",
            "valueType": "numeric",
            "label": "Requests"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "resourceType": "total",
            "label": "Total",
            "requestCount": 113,
            "transferSize": 5584583
          },
          {
            "resourceType": "image",
            "label": "Image",
            "requestCount": 36,
            "transferSize": 5145857
          },
          {
            "resourceType": "other",
            "label": "Other",
            "requestCount": 56,
            "transferSize": 185652
          },
          {
            "resourceType": "script",
            "label": "Script",
            "requestCount": 12,
            "transferSize": 141179
          },
          {
            "resourceType": "font",
            "label": "Font",
            "requestCount": 8,
            "transferSize": 75094
          },
          {
            "resourceType": "document",
            "label": "Document",
            "requestCount": 1,
            "transferSize": 36801
          },
          {
            "resourceType": "stylesheet",
            "label": "Stylesheet",
            "requestCount": 0,
            "transferSize": 0
          },
          {
            "resourceType": "media",
            "label": "Media",
            "requestCount": 0,
            "transferSize": 0
          },
          {
            "resourceType": "third-party",
            "label": "Third-party",
            "requestCount": 106,
            "transferSize": 5529485
          }
        ]
      }
    },
    "layout-shifts": {
      "id": "layout-shifts",
      "title": "Avoid large layout shifts",
      "description": "These are the largest layout shifts observed on the page. Each table item represents a single layout shift, and shows the element that shifted the most. Below each item are possible root causes that led to the layout shift. Some of these layout shifts may not be included in the CLS metric value due to [windowing](https://web.dev/articles/cls#what_is_cls). [Learn how to improve CLS](https://web.dev/articles/optimize-cls)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "2 layout shifts found",
      "metricSavings": {
        "CLS": 0.245
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "extra"
            },
            "label": "Element"
          },
          {
            "key": "score",
            "valueType": "numeric",
            "subItemsHeading": {
              "key": "cause",
              "valueType": "text"
            },
            "granularity": 0.001,
            "label": "Layout shift score"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-12-DIV",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV",
              "selector": "div.hero-mosaic-background > div.hero-mosaic-container > div#heroStoryContainer > div.secondary-slot-wrapper",
              "boundingRect": {
                "top": 364,
                "bottom": 848,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 485
              },
              "snippet": "<div class=\"secondary-slot-wrapper\">",
              "nodeLabel": "Arrest made after road worker hit, killed in Clermont County\nRemember me? Rays'…"
            },
            "score": 0.220031,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "extra": {
                    "type": "node",
                    "lhId": "page-1-IMG",
                    "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
                    "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
                    "boundingRect": {
                      "top": 56,
                      "bottom": 288,
                      "left": 0,
                      "right": 412,
                      "width": 412,
                      "height": 232
                    },
                    "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
                    "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
                  },
                  "cause": "Media element lacking an explicit size"
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-8-DIV",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,1,DIV",
              "selector": "div.secondary-slot-wrapper > div.hero-slot-three > a.section-helper-flex > div.section-helper-column",
              "boundingRect": {
                "top": 778,
                "bottom": 824,
                "left": 34,
                "right": 349,
                "width": 315,
                "height": 46
              },
              "snippet": "<div class=\"section-helper-column p13-text-wrap\">",
              "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
            },
            "score": 0.025169,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "extra": {
                    "type": "node",
                    "lhId": "page-15-IMG",
                    "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
                    "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
                    "boundingRect": {
                      "top": 606,
                      "bottom": 799,
                      "left": 34,
                      "right": 378,
                      "width": 343,
                      "height": 193
                    },
                    "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" alt=\"Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds\">",
                    "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
                  },
                  "cause": "Media element lacking an explicit size"
                }
              ]
            }
          }
        ]
      },
      "guidanceLevel": 2
    },
    "long-tasks": {
      "id": "long-tasks",
      "title": "Avoid long main-thread tasks",
      "description": "Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/articles/optimize-long-tasks)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "displayValue": "4 long tasks found",
      "metricSavings": {
        "TBT": 50
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://eu.cincinnati.com/",
            "duration": 379,
            "startTime": 841.9339999999997
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 107,
            "startTime": 5227.725439999999
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 60,
            "startTime": 4927.4634399999995
          },
          {
            "url": "https://eu.cincinnati.com/",
            "duration": 59,
            "startTime": 2786.49844
          }
        ],
        "sortedBy": [
          "duration"
        ],
        "skipSumming": [
          "startTime"
        ],
        "debugData": {
          "type": "debugdata",
          "urls": [
            "https://eu.cincinnati.com/",
            "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js"
          ],
          "tasks": [
            {
              "urlIndex": 0,
              "startTime": 841.9,
              "duration": 379,
              "other": 379,
              "paintCompositeRender": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 1,
              "startTime": 5227.7,
              "duration": 107,
              "other": 107,
              "scriptEvaluation": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 1,
              "startTime": 4927.5,
              "duration": 60,
              "other": 60,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 0,
              "startTime": 2786.5,
              "duration": 59,
              "other": 59,
              "paintCompositeRender": 0,
              "scriptEvaluation": 0,
              "styleLayout": 0
            }
          ]
        }
      },
      "guidanceLevel": 1
    },
    "non-composited-animations": {
      "id": "non-composited-animations",
      "title": "Avoid non-composited animations",
      "description": "Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "failureReason",
              "valueType": "text"
            },
            "label": "Element"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "unsized-images": {
      "id": "unsized-images",
      "title": "Image elements do not have explicit `width` and `height`",
      "description": "Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/articles/optimize-cls#images_without_dimensions)",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e-aee4081c3dfb-20190715_RiverboatRace234.jpg?crop=3899,2193,x0,y222",
            "node": {
              "type": "node",
              "lhId": "1-19-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
              "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/75765094007-ohio-state-highway-patrol-stock-071524.jpg?crop=4028,2268,x6,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 364,
                "bottom": 557,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/757…\" alt=\"Arrest made after road worker hit, killed in Clermont County\">",
              "nodeLabel": "Arrest made after road worker hit, killed in Clermont County"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89738205007-2271950402-1.jpg?crop=3499,1968,x0,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 606,
                "bottom": 799,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" alt=\"Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds\">",
              "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/cincinnati/logos-and-branding/logo-default.svg",
            "node": {
              "type": "node",
              "lhId": "1-107-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,0,DIV,2,A,0,IMG",
              "selector": "div#navRibbon > div#toggleSticky > a#logoContainer > img#logo",
              "boundingRect": {
                "top": 12,
                "bottom": 44,
                "left": 60,
                "right": 200,
                "width": 140,
                "height": 32
              },
              "snippet": "<img alt=\"The Enquirer\" class=\"expand-icon\" id=\"logo\" src=\"https://www.gannett-cdn.com/gannett-web/properties/cincinnati/logos-and-br…\">",
              "nodeLabel": "The Enquirer"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/cincinnati/logos-and-branding/logo-default.svg",
            "node": {
              "type": "node",
              "lhId": "1-108-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,1,DIV,0,DIV,0,DIV,1,A,0,IMG",
              "selector": "div.expand-wrap-top > div#logoWrap > a#hubLogo > img#sidebarLogo",
              "boundingRect": {
                "top": 32,
                "bottom": 77,
                "left": -378,
                "right": -181,
                "width": 197,
                "height": 45
              },
              "snippet": "<img id=\"sidebarLogo\" class=\"full-height-logo\" alt=\"The Enquirer\" src=\"https://www.gannett-cdn.com/gannett-web/properties/cincinnati/logos-and-br…\">",
              "nodeLabel": "The Enquirer"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/09/05/PCIN/85996837007-202526-aow-badge-cincinnati-logo-beacon-ortho.jpg?crop=601,599,x199,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-109-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 872,
                "bottom": 976,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/09/05/PCIN/859…\" class=\"p1-image\" alt=\"Vote for Greater Cincinnati high school athlete of the week, April 20\">",
              "nodeLabel": "Vote for Greater Cincinnati high school athlete of the week, April 20"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/11/SAUB/89567113007-usatsi-28667140.jpg?crop=3319,3318,x927,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-110-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,2,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 992,
                "bottom": 1097,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/11/SAUB/895…\" class=\"p1-image\" alt=\"Cincinnati Bearcats add Tulsa guard Tylen Riley to Jerrod Calhoun's team\">",
              "nodeLabel": "Cincinnati Bearcats add Tulsa guard Tylen Riley to Jerrod Calhoun's team"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/27/PCIN/87490385007-eastern-michigan-eagles-at-cincinnati-bearcats-55973.jpg?crop=2200,2199,x165,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-111-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,4,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1575,
                "bottom": 1679,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/27/PCIN/874…\" class=\"p1-image\" alt=\"Jordi Rodríguez 4th UC Bearcats player to join Wes Miller in Charlotte\">",
              "nodeLabel": "Jordi Rodríguez 4th UC Bearcats player to join Wes Miller in Charlotte"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89725755007-summitccd-4212026-4.JPG?crop=2725,2724,x185,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-112-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,5,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1695,
                "bottom": 1800,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" class=\"p1-image\" alt=\"Moeller, Badin, Summit Country Day lead third 2026 SWOBCA weekly poll\">",
              "nodeLabel": "Moeller, Badin, Summit Country Day lead third 2026 SWOBCA weekly poll"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/10/PCIN/89090292007-cincinnati-bearcats-vs-utah-utes-phillips-66-big-12-mens-basketball-tournament-1586.jpg?crop=2099,2100,x0,y155&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-113-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,8,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1816,
                "bottom": 1920,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/10/PCIN/890…\" class=\"p1-image\" alt=\"Tyler McKinley is latest UC Bearcats player to join Wes Miller\">",
              "nodeLabel": "Tyler McKinley is latest UC Bearcats player to join Wes Miller"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/89063884007-1321427.jpg?crop=1029,1028,x485,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-114-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,9,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1936,
                "bottom": 2040,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/09/USAT/890…\" class=\"p1-image\" alt=\"Who gets tariff refunds? FedEx, UPS, Costco to pass along savings\">",
              "nodeLabel": "Who gets tariff refunds? FedEx, UPS, Costco to pass along savings"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/11/PCIN/89108634007-cincinnati-bearcats-vs-ucf-knights-phillips-66-big-12-mens-basketball-tournament-1659.jpg?crop=2200,2199,x495,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-116-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,12,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2608,
                "bottom": 2713,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/11/PCIN/891…\" class=\"p1-image\" alt=\"Ex-UC Bearcat Keyshuan Tillery heading back to Wes Miller in Charlotte\">",
              "nodeLabel": "Ex-UC Bearcat Keyshuan Tillery heading back to Wes Miller in Charlotte"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2019/11/08/PCIN/40127947-857f-40c2-8d9f-19e0880d57fa-MOREchili_0570_EDIT.JPG?crop=1667,1667,x220,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-117-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,13,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2729,
                "bottom": 2833,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/presto/2019/11/08/PCIN/40127947-857f-40c2-8d9f…\" class=\"p1-image\" alt=\"2 Skyline Chili locations close in Florida after 38 years\">",
              "nodeLabel": "2 Skyline Chili locations close in Florida after 38 years"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/10/09/PCIN/75591175007-100924-skyline-chili-08.jpg?crop=5760,5759,x1728,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-118-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,15,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2849,
                "bottom": 2954,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/10/09/PCIN/755…\" class=\"p1-image\" alt=\"Secret Skyline item goes viral after couple makes 'weird request'\">",
              "nodeLabel": "Secret Skyline item goes viral after couple makes 'weird request'"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/08/23/PCIN/85789328007-summit-cincinnati-country-day-8222512.JPG?crop=3132,3131,x705,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-119-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,16,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2970,
                "bottom": 3074,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/08/23/PCIN/857…\" class=\"p1-image\" alt=\"Dennis Coyle, Cincinnati Country Day AD and football coach, steps down\">",
              "nodeLabel": "Dennis Coyle, Cincinnati Country Day AD and football coach, steps down"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/74073640007-06112024-plants-15.jpg?crop=1479,1478,x443,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-115-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,11,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2518,
                "bottom": 2588,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 70
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/740…\" class=\"p1-image\" alt=\"Celebrate Earth Day with Ohio's unique plants and animals\">",
              "nodeLabel": "Celebrate Earth Day with Ohio's unique plants and animals"
            }
          }
        ]
      },
      "guidanceLevel": 4
    },
    "valid-source-maps": {
      "id": "valid-source-maps",
      "title": "Page has valid source maps",
      "description": "Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "scriptUrl",
            "valueType": "url",
            "subItemsHeading": {
              "key": "error"
            },
            "label": "URL"
          },
          {
            "key": "sourceMapUrl",
            "valueType": "url",
            "label": "Map URL"
          }
        ],
        "items": [
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "https://atoms.cincinnati.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sourceMapUrl": "https://atoms.cincinnati.com/atoms-library/prod/dist/gannett-atoms-library.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/maps/gallium/themes/universal.html_script_0.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          }
        ]
      }
    },
    "csp-xss": {
      "id": "csp-xss",
      "title": "Ensure CSP is effective against XSS attacks",
      "description": "A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "script-src",
            "description": "`script-src` directive is missing. This can allow the execution of unsafe scripts.",
            "severity": "High"
          },
          {
            "directive": "object-src",
            "description": "Missing `object-src` allows the injection of plugins that execute unsafe scripts. Consider setting `object-src` to `'none'` if you can.",
            "severity": "High"
          }
        ]
      }
    },
    "has-hsts": {
      "id": "has-hsts",
      "title": "Use a strong HSTS policy",
      "description": "Deployment of the HSTS header significantly reduces the risk of downgrading HTTP connections and eavesdropping attacks. A rollout in stages, starting with a low max-age is recommended. [Learn more about using a strong HSTS policy.](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "max-age",
            "description": "`max-age` is too low",
            "severity": "High"
          },
          {
            "directive": "includeSubDomains",
            "description": "No `includeSubDomains` directive found",
            "severity": "Medium"
          },
          {
            "directive": "preload",
            "description": "No `preload` directive found",
            "severity": "Medium"
          }
        ]
      }
    },
    "origin-isolation": {
      "id": "origin-isolation",
      "title": "Ensure proper origin isolation with COOP",
      "description": "The Cross-Origin-Opener-Policy (COOP) can be used to isolate the top-level window from other documents such as pop-ups. [Learn more about deploying the COOP header.](https://web.dev/articles/why-coop-coep#coop)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "description": "No COOP header found",
            "severity": "High"
          }
        ]
      }
    },
    "clickjacking-mitigation": {
      "id": "clickjacking-mitigation",
      "title": "Mitigate clickjacking with XFO or CSP",
      "description": "The `X-Frame-Options` (XFO) header or the `frame-ancestors` directive in the `Content-Security-Policy` (CSP) header control where a page can be embedded. These can mitigate clickjacking attacks by blocking some or all sites from embedding the page. [Learn more about mitigating clickjacking](https://developer.chrome.com/docs/lighthouse/best-practices/clickjacking-mitigation).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No frame control policy found"
          }
        ]
      }
    },
    "trusted-types-xss": {
      "id": "trusted-types-xss",
      "title": "Mitigate DOM-based XSS with Trusted Types",
      "description": "The `require-trusted-types-for` directive in the `Content-Security-Policy` (CSP) header instructs user agents to control the data passed to DOM XSS sink functions. [Learn more about mitigating DOM-based XSS with Trusted Types](https://developer.chrome.com/docs/lighthouse/best-practices/trusted-types-xss).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No `Content-Security-Policy` header with Trusted Types directive found"
          }
        ]
      }
    },
    "script-treemap-data": {
      "id": "script-treemap-data",
      "title": "Script Treemap Data",
      "description": "Used for treemap app",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "treemap-data",
        "nodes": [
          {
            "name": "https://eu.cincinnati.com/",
            "resourceBytes": 27298,
            "encodedBytes": 5952,
            "unusedBytes": 10915,
            "children": [
              {
                "name": "(inline) (function() {\n …",
                "resourceBytes": 11647,
                "unusedBytes": 2513
              },
              {
                "name": "(inline) function Optano…",
                "resourceBytes": 29,
                "unusedBytes": 29
              },
              {
                "name": "(inline) // Define Serve…",
                "resourceBytes": 2874,
                "unusedBytes": 268
              },
              {
                "name": "(inline) var _toggleNav;…",
                "resourceBytes": 11344,
                "unusedBytes": 6784
              },
              {
                "name": "(inline) let docAnalytic…",
                "resourceBytes": 156,
                "unusedBytes": 85
              },
              {
                "name": "(inline) function firePr…",
                "resourceBytes": 1248,
                "unusedBytes": 1236
              }
            ]
          },
          {
            "name": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "resourceBytes": 103,
            "encodedBytes": 116,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "resourceBytes": 938,
            "encodedBytes": 502,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "resourceBytes": 11823,
            "encodedBytes": 3572,
            "unusedBytes": 5024
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "resourceBytes": 78889,
            "encodedBytes": 17664,
            "unusedBytes": 75426
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "resourceBytes": 18995,
            "encodedBytes": 5322,
            "unusedBytes": 12071
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "resourceBytes": 335571,
            "encodedBytes": 83693,
            "children": [
              {
                "name": "../../..",
                "resourceBytes": 335506,
                "children": [
                  {
                    "name": "node_modules",
                    "resourceBytes": 147522,
                    "children": [
                      {
                        "name": "lit-html",
                        "resourceBytes": 15109,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 12373,
                            "children": [
                              {
                                "name": "dom.js",
                                "resourceBytes": 282
                              },
                              {
                                "name": "template.js",
                                "resourceBytes": 1767
                              },
                              {
                                "name": "modify-template.js",
                                "resourceBytes": 932,
                                "unusedBytes": 914
                              },
                              {
                                "name": "directive.js",
                                "resourceBytes": 108
                              },
                              {
                                "name": "part.js",
                                "resourceBytes": 10
                              },
                              {
                                "name": "template-instance.js",
                                "resourceBytes": 955
                              },
                              {
                                "name": "template-result.js",
                                "resourceBytes": 791
                              },
                              {
                                "name": "parts.js",
                                "resourceBytes": 4806,
                                "unusedBytes": 144
                              },
                              {
                                "name": "template-factory.js",
                                "resourceBytes": 343,
                                "unusedBytes": 327
                              },
                              {
                                "name": "render.js",
                                "resourceBytes": 169
                              },
                              {
                                "name": "default-template-processor.js",
                                "resourceBytes": 247
                              },
                              {
                                "name": "shady-render.js",
                                "resourceBytes": 1963,
                                "unusedBytes": 815
                              }
                            ],
                            "unusedBytes": 2200
                          },
                          {
                            "name": "lit-html.js",
                            "resourceBytes": 165
                          },
                          {
                            "name": "directives",
                            "resourceBytes": 2571,
                            "unusedBytes": 670,
                            "children": [
                              {
                                "name": "class-map.js",
                                "resourceBytes": 962,
                                "unusedBytes": 354
                              },
                              {
                                "name": "if-defined.js",
                                "resourceBytes": 214
                              },
                              {
                                "name": "live.js",
                                "resourceBytes": 508
                              },
                              {
                                "name": "style-map.js",
                                "resourceBytes": 539
                              },
                              {
                                "name": "unsafe-html.js",
                                "resourceBytes": 348,
                                "unusedBytes": 316
                              }
                            ]
                          }
                        ],
                        "unusedBytes": 2870
                      },
                      {
                        "name": "lit-element",
                        "resourceBytes": 9575,
                        "unusedBytes": 1309,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 7774,
                            "unusedBytes": 1180,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5501,
                                "unusedBytes": 366
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 1381,
                                "unusedBytes": 481
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 892,
                                "unusedBytes": 333
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1801,
                            "unusedBytes": 129
                          }
                        ]
                      },
                      {
                        "name": "tslib/tslib.es6.js",
                        "resourceBytes": 852,
                        "unusedBytes": 235
                      },
                      {
                        "name": "@material",
                        "resourceBytes": 87347,
                        "unusedBytes": 12379,
                        "children": [
                          {
                            "name": "mwc-base",
                            "resourceBytes": 1320,
                            "unusedBytes": 325,
                            "children": [
                              {
                                "name": "utils.js",
                                "resourceBytes": 239,
                                "unusedBytes": 81
                              },
                              {
                                "name": "base-element.js",
                                "resourceBytes": 259
                              },
                              {
                                "name": "form-element.js",
                                "resourceBytes": 385,
                                "unusedBytes": 204
                              },
                              {
                                "name": "observer.js",
                                "resourceBytes": 437,
                                "unusedBytes": 40
                              }
                            ]
                          },
                          {
                            "name": "base/foundation.js",
                            "resourceBytes": 519,
                            "unusedBytes": 104
                          },
                          {
                            "name": "notched-outline",
                            "resourceBytes": 1138,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 229
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 909,
                                "unusedBytes": 531
                              }
                            ],
                            "unusedBytes": 531
                          },
                          {
                            "name": "mwc-notched-outline",
                            "resourceBytes": 4347,
                            "unusedBytes": 817,
                            "children": [
                              {
                                "name": "mwc-notched-outline-base.js",
                                "resourceBytes": 1091,
                                "unusedBytes": 817
                              },
                              {
                                "name": "mwc-notched-outline-css.js",
                                "resourceBytes": 3183
                              },
                              {
                                "name": "mwc-notched-outline.js",
                                "resourceBytes": 73
                              }
                            ]
                          },
                          {
                            "name": "floating-label",
                            "resourceBytes": 1542,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 173
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1369,
                                "unusedBytes": 1016
                              }
                            ],
                            "unusedBytes": 1016
                          },
                          {
                            "name": "mwc-floating-label/mwc-floating-label-directive.js",
                            "resourceBytes": 425,
                            "unusedBytes": 397
                          },
                          {
                            "name": "line-ripple",
                            "resourceBytes": 1429,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 111
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1318,
                                "unusedBytes": 680
                              }
                            ],
                            "unusedBytes": 680
                          },
                          {
                            "name": "mwc-line-ripple/mwc-line-ripple-directive.js",
                            "resourceBytes": 440,
                            "unusedBytes": 137
                          },
                          {
                            "name": "textfield",
                            "resourceBytes": 9541,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 1001
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 8540,
                                "unusedBytes": 4735
                              }
                            ],
                            "unusedBytes": 4735
                          },
                          {
                            "name": "mwc-textfield",
                            "resourceBytes": 54616,
                            "unusedBytes": 3213,
                            "children": [
                              {
                                "name": "mwc-textfield-base.js",
                                "resourceBytes": 10901,
                                "unusedBytes": 3213
                              },
                              {
                                "name": "mwc-textfield-css.js",
                                "resourceBytes": 43648
                              },
                              {
                                "name": "mwc-textfield.js",
                                "resourceBytes": 67
                              }
                            ]
                          },
                          {
                            "name": "animation/util.js",
                            "resourceBytes": 421
                          },
                          {
                            "name": "linear-progress",
                            "resourceBytes": 2823,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 327
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 2496,
                                "unusedBytes": 340
                              }
                            ],
                            "unusedBytes": 340
                          },
                          {
                            "name": "mwc-linear-progress",
                            "resourceBytes": 8786,
                            "unusedBytes": 84,
                            "children": [
                              {
                                "name": "mwc-linear-progress-base.js",
                                "resourceBytes": 2244,
                                "unusedBytes": 84
                              },
                              {
                                "name": "mwc-linear-progress-css.js",
                                "resourceBytes": 6465
                              },
                              {
                                "name": "mwc-linear-progress.js",
                                "resourceBytes": 77
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "name": "@glidejs/glide/dist/glide.esm.js",
                        "resourceBytes": 27383,
                        "unusedBytes": 24432
                      },
                      {
                        "name": "@polymer/lit-element",
                        "resourceBytes": 7256,
                        "unusedBytes": 943,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 5963,
                            "unusedBytes": 772,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5629,
                                "unusedBytes": 728
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 289,
                                "unusedBytes": 44
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 45
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1293,
                            "unusedBytes": 171
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 42168
                  },
                  {
                    "name": "elements-lit",
                    "resourceBytes": 187984,
                    "unusedBytes": 101839,
                    "children": [
                      {
                        "name": "alerts",
                        "resourceBytes": 15919,
                        "unusedBytes": 11799,
                        "children": [
                          {
                            "name": "alerts-atoms/alerts-atoms.js",
                            "resourceBytes": 2353,
                            "unusedBytes": 380
                          },
                          {
                            "name": "alerts-banner/alerts-banner.js",
                            "resourceBytes": 3260,
                            "unusedBytes": 2893
                          },
                          {
                            "name": "alerts-manager/alerts-manager.js",
                            "resourceBytes": 4470,
                            "unusedBytes": 2974
                          },
                          {
                            "name": "alerts-ad-free-modal/alerts-ad-free-modal.js",
                            "resourceBytes": 1546,
                            "unusedBytes": 1441
                          },
                          {
                            "name": "alerts-cc-decline-modal/alerts-cc-decline-modal.js",
                            "resourceBytes": 4290,
                            "unusedBytes": 4111
                          }
                        ]
                      },
                      {
                        "name": "util",
                        "resourceBytes": 12585,
                        "unusedBytes": 5322,
                        "children": [
                          {
                            "name": "util-lit/util-lit.js",
                            "resourceBytes": 612,
                            "unusedBytes": 351
                          },
                          {
                            "name": "util-analytics/util-analytics.js",
                            "resourceBytes": 3850,
                            "unusedBytes": 2846
                          },
                          {
                            "name": "util-pcs/util-pcs.js",
                            "resourceBytes": 3735
                          },
                          {
                            "name": "util-shared-analytics/util-shared-analytics.js",
                            "resourceBytes": 44,
                            "unusedBytes": 44
                          },
                          {
                            "name": "util-modal/util-modal.js",
                            "resourceBytes": 504,
                            "unusedBytes": 259
                          },
                          {
                            "name": "util-page-reload/util-page-reload.js",
                            "resourceBytes": 816,
                            "unusedBytes": 421
                          },
                          {
                            "name": "util-section-color/util-section-color.js",
                            "resourceBytes": 939,
                            "unusedBytes": 344
                          },
                          {
                            "name": "util-sticky-module/util-sticky-module.js",
                            "resourceBytes": 641
                          },
                          {
                            "name": "util-user-subscription-manager/util-user-subscription-manager.js",
                            "resourceBytes": 1444,
                            "unusedBytes": 1057
                          }
                        ]
                      },
                      {
                        "name": "ui",
                        "resourceBytes": 5473,
                        "children": [
                          {
                            "name": "ui-icon/ui-icon.js",
                            "resourceBytes": 2969
                          },
                          {
                            "name": "ui-label-bucket/ui-label-bucket.js",
                            "resourceBytes": 2504
                          }
                        ]
                      },
                      {
                        "name": "cta",
                        "resourceBytes": 3968,
                        "children": [
                          {
                            "name": "cta-atoms-container-aux/cta-atoms-container-aux.js",
                            "resourceBytes": 206
                          },
                          {
                            "name": "cta-atoms-container-inline/cta-atoms-container-inline.js",
                            "resourceBytes": 403,
                            "unusedBytes": 292
                          },
                          {
                            "name": "cta-atoms-container-inline-roadblock/cta-atoms-container-inline-roadblock.js",
                            "resourceBytes": 406,
                            "unusedBytes": 285
                          },
                          {
                            "name": "cta-atoms-container-post-content/cta-atoms-container-post-content.js",
                            "resourceBytes": 215,
                            "unusedBytes": 98
                          },
                          {
                            "name": "cta-generic-text/cta-generic-text.js",
                            "resourceBytes": 2738,
                            "unusedBytes": 2560
                          }
                        ],
                        "unusedBytes": 3235
                      },
                      {
                        "name": "nav",
                        "resourceBytes": 40585,
                        "unusedBytes": 26091,
                        "children": [
                          {
                            "name": "nav-global-login/nav-global-login.js",
                            "resourceBytes": 5812,
                            "unusedBytes": 5308
                          },
                          {
                            "name": "nav-global-login-piano/nav-global-login-piano.js",
                            "resourceBytes": 6300,
                            "unusedBytes": 5790
                          },
                          {
                            "name": "nav-tree/nav-tree.js",
                            "resourceBytes": 5831,
                            "unusedBytes": 1426
                          },
                          {
                            "name": "nav-promo-item/nav-promo-item.js",
                            "resourceBytes": 1810
                          },
                          {
                            "name": "nav-hub/nav-hub.js",
                            "resourceBytes": 2980,
                            "unusedBytes": 203
                          },
                          {
                            "name": "nav-manager/nav-manager.js",
                            "resourceBytes": 3617,
                            "unusedBytes": 2713
                          },
                          {
                            "name": "nav-search-bar/nav-search-bar.js",
                            "resourceBytes": 1171,
                            "unusedBytes": 322
                          },
                          {
                            "name": "nav-sense-of-place/nav-sense-of-place.js",
                            "resourceBytes": 2989,
                            "unusedBytes": 2674
                          },
                          {
                            "name": "nav-search-bucket/nav-search-bucket.js",
                            "resourceBytes": 2935,
                            "unusedBytes": 778
                          },
                          {
                            "name": "nav-share-buttons/nav-share-buttons.js",
                            "resourceBytes": 7140,
                            "unusedBytes": 6877
                          }
                        ]
                      },
                      {
                        "name": "media/media-badge/media-badge.js",
                        "resourceBytes": 1468
                      },
                      {
                        "name": "promo",
                        "resourceBytes": 39642,
                        "unusedBytes": 20230,
                        "children": [
                          {
                            "name": "promo-story-card/promo-story-card.js",
                            "resourceBytes": 11606,
                            "unusedBytes": 3179
                          },
                          {
                            "name": "promo-story-thumb-large/promo-story-thumb-large.js",
                            "resourceBytes": 4619
                          },
                          {
                            "name": "promo-story-bucket-short/promo-story-bucket-short.js",
                            "resourceBytes": 5568,
                            "unusedBytes": 1143
                          },
                          {
                            "name": "lit-carousel-card/lit-carousel-card.js",
                            "resourceBytes": 4308,
                            "unusedBytes": 3474
                          },
                          {
                            "name": "lit-story-carousel/lit-story-carousel.js",
                            "resourceBytes": 3967,
                            "unusedBytes": 3419
                          },
                          {
                            "name": "promo-story-thumb-small/promo-story-thumb-small.js",
                            "resourceBytes": 7156,
                            "unusedBytes": 6922
                          },
                          {
                            "name": "promo-story-bucket/promo-story-bucket.js",
                            "resourceBytes": 2418,
                            "unusedBytes": 2093
                          }
                        ]
                      },
                      {
                        "name": "story/story-timestamp/story-timestamp.js",
                        "resourceBytes": 2086,
                        "unusedBytes": 493
                      },
                      {
                        "name": "partner",
                        "resourceBytes": 66258,
                        "unusedBytes": 34669,
                        "children": [
                          {
                            "name": "partner-slot/partner-slot.js",
                            "resourceBytes": 22965,
                            "unusedBytes": 9159
                          },
                          {
                            "name": "partner-bid/partner-bid.js",
                            "resourceBytes": 10311,
                            "unusedBytes": 2969
                          },
                          {
                            "name": "partner-banner/partner-banner.js",
                            "resourceBytes": 1302
                          },
                          {
                            "name": "partner-branded-content-tile/partner-branded-content-tile.js",
                            "resourceBytes": 740
                          },
                          {
                            "name": "partner-feedback/partner-feedback.js",
                            "resourceBytes": 660,
                            "unusedBytes": 599
                          },
                          {
                            "name": "partner-flipp/partner-flipp.js",
                            "resourceBytes": 2474,
                            "unusedBytes": 2407
                          },
                          {
                            "name": "partner-gci-analytics/partner-gci-analytics.js",
                            "resourceBytes": 10118,
                            "unusedBytes": 9784
                          },
                          {
                            "name": "partner-high-impact/partner-high-impact.js",
                            "resourceBytes": 1422,
                            "unusedBytes": 190
                          },
                          {
                            "name": "partner-inline/partner-inline.js",
                            "resourceBytes": 1354,
                            "unusedBytes": 134
                          },
                          {
                            "name": "partner-leaderboard/partner-leaderboard.js",
                            "resourceBytes": 1062
                          },
                          {
                            "name": "partner-piano/partner-piano.js",
                            "resourceBytes": 3863,
                            "unusedBytes": 3721
                          },
                          {
                            "name": "partner-poster/partner-poster.js",
                            "resourceBytes": 685
                          },
                          {
                            "name": "partner-posterscroll/partner-posterscroll.js",
                            "resourceBytes": 2496,
                            "unusedBytes": 757
                          },
                          {
                            "name": "partner-recommendations/partner-recommendations.js",
                            "resourceBytes": 2040,
                            "unusedBytes": 1049
                          },
                          {
                            "name": "partner-sponsor-logo/partner-sponsor-logo.js",
                            "resourceBytes": 805,
                            "unusedBytes": 257
                          },
                          {
                            "name": "partner-admiral/partner-admiral.js",
                            "resourceBytes": 812,
                            "unusedBytes": 743
                          },
                          {
                            "name": "partner-contest-bucket/partner-contest-bucket.js",
                            "resourceBytes": 3149,
                            "unusedBytes": 2900
                          }
                        ]
                      }
                    ]
                  }
                ],
                "unusedBytes": 144007
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 65
              }
            ],
            "unusedBytes": 144007
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "resourceBytes": 3664,
            "encodedBytes": 1533,
            "unusedBytes": 305
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "resourceBytes": 10912,
            "encodedBytes": 3659,
            "unusedBytes": 840
          },
          {
            "name": "https://atoms.cincinnati.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "resourceBytes": 58540,
            "encodedBytes": 16036,
            "unusedBytes": 39202,
            "children": [
              {
                "name": "webpack:/atoms-library",
                "resourceBytes": 58269,
                "unusedBytes": 39202,
                "children": [
                  {
                    "name": ".",
                    "resourceBytes": 57974,
                    "unusedBytes": 39058,
                    "children": [
                      {
                        "name": "src",
                        "resourceBytes": 34512,
                        "unusedBytes": 21390,
                        "children": [
                          {
                            "name": "api/api.js",
                            "resourceBytes": 762,
                            "unusedBytes": 34
                          },
                          {
                            "name": "cookies",
                            "resourceBytes": 6658,
                            "unusedBytes": 5185,
                            "children": [
                              {
                                "name": "gnt_atoms_rate/gnt_atoms_rate.js",
                                "resourceBytes": 3855,
                                "unusedBytes": 3026
                              },
                              {
                                "name": "gnt_cec/gnt_cec.js",
                                "resourceBytes": 645,
                                "unusedBytes": 433
                              },
                              {
                                "name": "gnt_region/gnt_region.js",
                                "resourceBytes": 949,
                                "unusedBytes": 738
                              },
                              {
                                "name": "gup_lng/gup_lng.js",
                                "resourceBytes": 1209,
                                "unusedBytes": 988
                              }
                            ]
                          },
                          {
                            "name": "journey/journey.js",
                            "resourceBytes": 2595,
                            "unusedBytes": 830
                          },
                          {
                            "name": "module",
                            "resourceBytes": 16947,
                            "unusedBytes": 13233,
                            "children": [
                              {
                                "name": "components",
                                "resourceBytes": 1794,
                                "unusedBytes": 1401,
                                "children": [
                                  {
                                    "name": "component.js",
                                    "resourceBytes": 509,
                                    "unusedBytes": 331
                                  },
                                  {
                                    "name": "library.js",
                                    "resourceBytes": 1285,
                                    "unusedBytes": 1070
                                  }
                                ]
                              },
                              {
                                "name": "links/link.js",
                                "resourceBytes": 4223,
                                "unusedBytes": 3913
                              },
                              {
                                "name": "module.js",
                                "resourceBytes": 6643,
                                "unusedBytes": 5685
                              },
                              {
                                "name": "types",
                                "resourceBytes": 2992,
                                "unusedBytes": 2234,
                                "children": [
                                  {
                                    "name": "bar/bar.js",
                                    "resourceBytes": 1234,
                                    "unusedBytes": 941
                                  },
                                  {
                                    "name": "modal/modal.js",
                                    "resourceBytes": 1253,
                                    "unusedBytes": 960
                                  },
                                  {
                                    "name": "target/target.js",
                                    "resourceBytes": 505,
                                    "unusedBytes": 333
                                  }
                                ]
                              },
                              {
                                "name": "user/user.js",
                                "resourceBytes": 1295
                              }
                            ]
                          },
                          {
                            "name": "setup/setup.js",
                            "resourceBytes": 3294
                          },
                          {
                            "name": "utils/utils.js",
                            "resourceBytes": 2129,
                            "unusedBytes": 1068
                          },
                          {
                            "name": "index.js",
                            "resourceBytes": 2127,
                            "unusedBytes": 1040
                          }
                        ]
                      },
                      {
                        "name": "node_modules",
                        "resourceBytes": 23462,
                        "children": [
                          {
                            "name": "@babel/runtime",
                            "resourceBytes": 9638,
                            "children": [
                              {
                                "name": "helpers",
                                "resourceBytes": 9473,
                                "children": [
                                  {
                                    "name": "arrayLikeToArray.js",
                                    "resourceBytes": 182
                                  },
                                  {
                                    "name": "arrayWithoutHoles.js",
                                    "resourceBytes": 129
                                  },
                                  {
                                    "name": "asyncToGenerator.js",
                                    "resourceBytes": 386,
                                    "unusedBytes": 294
                                  },
                                  {
                                    "name": "classCallCheck.js",
                                    "resourceBytes": 164
                                  },
                                  {
                                    "name": "createClass.js",
                                    "resourceBytes": 344
                                  },
                                  {
                                    "name": "defineProperty.js",
                                    "resourceBytes": 190,
                                    "unusedBytes": 118
                                  },
                                  {
                                    "name": "interopRequireDefault.js",
                                    "resourceBytes": 121
                                  },
                                  {
                                    "name": "iterableToArray.js",
                                    "resourceBytes": 184,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "nonIterableSpread.js",
                                    "resourceBytes": 244,
                                    "unusedBytes": 167
                                  },
                                  {
                                    "name": "regeneratorRuntime.js",
                                    "resourceBytes": 6630,
                                    "unusedBytes": 5205
                                  },
                                  {
                                    "name": "toConsumableArray.js",
                                    "resourceBytes": 153
                                  },
                                  {
                                    "name": "typeof.js",
                                    "resourceBytes": 371,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "unsupportedIterableToArray.js",
                                    "resourceBytes": 375,
                                    "unusedBytes": 284
                                  }
                                ],
                                "unusedBytes": 6292
                              },
                              {
                                "name": "regenerator/index.js",
                                "resourceBytes": 165
                              }
                            ],
                            "unusedBytes": 6292
                          },
                          {
                            "name": "@ungap/url-search-params/esm/index.js",
                            "resourceBytes": 4397,
                            "unusedBytes": 3368
                          },
                          {
                            "name": "whatwg-fetch/fetch.js",
                            "resourceBytes": 8953,
                            "unusedBytes": 7699
                          },
                          {
                            "name": "polyfill-array-includes/index.js",
                            "resourceBytes": 474,
                            "unusedBytes": 309
                          }
                        ],
                        "unusedBytes": 17668
                      }
                    ]
                  },
                  {
                    "name": "webpack",
                    "resourceBytes": 295,
                    "children": [
                      {
                        "name": "bootstrap",
                        "resourceBytes": 122
                      },
                      {
                        "name": "runtime",
                        "resourceBytes": 173,
                        "unusedBytes": 144,
                        "children": [
                          {
                            "name": "define property getters",
                            "resourceBytes": 101,
                            "unusedBytes": 96
                          },
                          {
                            "name": "hasOwnProperty shorthand",
                            "resourceBytes": 72,
                            "unusedBytes": 48
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 144
                  }
                ]
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 271
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "resourceBytes": 3075,
            "encodedBytes": 0,
            "unusedBytes": 429
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polymer%3B%2F**%0A%20%20%20*%20%40namespace%20Polymer%0A%20%20%20*%20%40summary%20Polymer%20is%20a%20lightweight%20library%20built%20on%20top%20of%20the%20web%0A%20%20%20*%20%20%20standards-based%20Web%20Components%20API's%2C%20and%20makes%20it%20easy%20to%20build%20your%0A%20%20%20*%20%20%20own%20custom%20HTML%20elements.%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer%3Dfunction(info)%7Breturn%20window.Polymer._polymerFn(info)%3B%7D%3B%2F%2F%20support%20user%20settings%20on%20the%20Polymer%20object%0Aif(userPolymer)%7BObject.assign(Polymer%2CuserPolymer)%3B%7D%2F%2F%20To%20be%20plugged%20by%20legacy%20implementation%20if%20loaded%0A%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Athrow%20new%20Error('Load%20polymer.html%20to%20use%20the%20Polymer()%20function.')%3B%7D%3B%2F*%20eslint-enable%20*%2Fwindow.Polymer.version%3D'2.7.0'%3B%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F*%0A%20%20When%20using%20Closure%20Compiler%2C%20JSCompiler_renameProperty(property%2C%20object)%20is%20replaced%20by%20the%20munged%20name%20for%20object%5Bproperty%5D%0A%20%20We%20cannot%20alias%20this%20function%2C%20so%20we%20have%20to%20use%20a%20small%20shim%20that%20has%20the%20same%20behavior%20when%20not%20compiling.%0A%20%20*%2Fwindow.JSCompiler_renameProperty%3Dfunction(prop%2Cobj)%7Breturn%20prop%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fboot.html.js%0A",
            "resourceBytes": 2183,
            "encodedBytes": 0,
            "unusedBytes": 177
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%5B%5E)%5D*)(%5C))%2Fg%3Bvar%20ABS_URL%3D%2F(%5E%5C%2F)%7C(%5E%23)%7C(%5E%5B%5Cw-%5Cd%5D*%3A)%2F%3Bvar%20workingURL%3Dvoid%200%3Bvar%20resolveDoc%3Dvoid%200%3B%2F**%0A%20%20%20%20%20*%20Resolves%20the%20given%20URL%20against%20the%20provided%20%60baseUri'.%0A%20%20%20%20%20*%20%0A%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20resolve%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%3D%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20URL%0A%20%20%20%20%20*%2Ffunction%20resolveUrl(url%2CbaseURI)%7Bif(url%26%26ABS_URL.test(url))%7Breturn%20url%3B%7D%2F%2F%20Lazy%20feature%20detection.%0Aif(workingURL%3D%3D%3Dundefined)%7BworkingURL%3Dfalse%3Btry%7Bvar%20u%3Dnew%20URL('b'%2C'http%3A%2F%2Fa')%3Bu.pathname%3D'c%2520d'%3BworkingURL%3Du.href%3D%3D%3D'http%3A%2F%2Fa%2Fc%2520d'%3B%7Dcatch(e)%7B%2F%2F%20silently%20fail%0A%7D%7Dif(!baseURI)%7BbaseURI%3Ddocument.baseURI%7C%7Cwindow.location.href%3B%7Dif(workingURL)%7Breturn%20new%20URL(url%2CbaseURI).href%3B%7D%2F%2F%20Fallback%20to%20creating%20an%20anchor%20into%20a%20disconnected%20document.%0Aif(!resolveDoc)%7BresolveDoc%3Ddocument.implementation.createHTMLDocument('temp')%3BresolveDoc.base%3DresolveDoc.createElement('base')%3BresolveDoc.head.appendChild(resolveDoc.base)%3BresolveDoc.anchor%3DresolveDoc.createElement('a')%3BresolveDoc.body.appendChild(resolveDoc.anchor)%3B%7DresolveDoc.base.href%3DbaseURI%3BresolveDoc.anchor.href%3Durl%3Breturn%20resolveDoc.anchor.href%7C%7Curl%3B%7D%2F**%0A%20%20%20%20%20*%20Resolves%20any%20relative%20URL's%20in%20the%20given%20CSS%20text%20against%20the%20provided%0A%20%20%20%20%20*%20%60ownerDocument%60's%20%60baseURI%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20CSS%20text%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Processed%20CSS%20text%20with%20resolved%20URL's%0A%20%20%20%20%20*%2Ffunction%20resolveCss(cssText%2CbaseURI)%7Breturn%20cssText.replace(CSS_URL_RX%2Cfunction(m%2Cpre%2Curl%2Cpost)%7Breturn%20pre%2B'%5C''%2BresolveUrl(url.replace(%2F%5B%22'%5D%2Fg%2C'')%2CbaseURI)%2B'%5C''%2Bpost%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20path%20from%20a%20given%20%60url%60.%20The%20path%20includes%20the%20trailing%0A%20%20%20%20%20*%20%60%2F%60%20from%20the%20url.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20transform%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20path%0A%20%20%20%20%20*%2Ffunction%20pathFromUrl(url)%7Breturn%20url.substring(0%2Curl.lastIndexOf('%2F')%2B1)%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%2FPolymer.ResolveUrl%3D%7BresolveCss%3AresolveCss%2CresolveUrl%3AresolveUrl%2CpathFromUrl%3ApathFromUrl%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fresolve-url.html.js%0A",
            "resourceBytes": 2672,
            "encodedBytes": 0,
            "unusedBytes": 966
          },
          {
            "name": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "resourceBytes": 9256,
            "encodedBytes": 0,
            "unusedBytes": 4166
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "resourceBytes": 5009,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "resourceBytes": 361,
            "encodedBytes": 0,
            "children": [
              {
                "name": "gallium/themes/universal.html_script_0.js",
                "resourceBytes": 149
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 212
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "resourceBytes": 10617,
            "encodedBytes": 4261,
            "unusedBytes": 3142
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "resourceBytes": 3665,
            "encodedBytes": 0,
            "unusedBytes": 261
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20for%20deduping%20mixins.%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BFunction%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20MixinFunction()%7B%7D%2F**%20%40type%20%7B(WeakMap%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinApplications%3B%2F**%20%40type%20%7B(Object%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinSet%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20Wraps%20an%20ES6%20class%20expression%20mixin%20such%20that%20the%20mixin%20is%20only%20applied%0A%20%20%20*%20if%20it%20has%20not%20already%20been%20applied%20its%20base%20argument.%20Also%20memoizes%20mixin%0A%20%20%20*%20applications.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40template%20T%0A%20%20%20*%20%40param%20%7BT%7D%20mixin%20ES6%20class%20expression%20mixin%20to%20wrap%0A%20%20%20*%20%40return%20%7BT%7D%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2FPolymer.dedupingMixin%3Dfunction(mixin)%7Bvar%20mixinApplications%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3Bif(!mixinApplications)%7BmixinApplications%3Dnew%20WeakMap()%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3DmixinApplications%3B%7D%2F%2F%20maintain%20a%20unique%20id%20for%20each%20mixin%0Avar%20mixinDedupeId%3DdedupeId%2B%2B%3Bfunction%20dedupingMixin(base)%7Bvar%20baseSet%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fbase.__mixinSet%3Bif(baseSet%26%26baseSet%5BmixinDedupeId%5D)%7Breturn%20base%3B%7Dvar%20map%3DmixinApplications%3Bvar%20extended%3Dmap.get(base)%3Bif(!extended)%7Bextended%3D%2F**%20%40type%20%7B!Function%7D%20*%2Fmixin(base)%3Bmap.set(base%2Cextended)%3B%7D%2F%2F%20copy%20inherited%20mixin%20set%20from%20the%20extended%20class%2C%20or%20the%20base%20class%0A%2F%2F%20NOTE%3A%20we%20avoid%20use%20of%20Set%20here%20because%20some%20browser%20(IE11)%0A%2F%2F%20cannot%20extend%20a%20base%20Set%20via%20the%20constructor.%0Avar%20mixinSet%3DObject.create(%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%7C%7CbaseSet%7C%7Cnull)%3BmixinSet%5BmixinDedupeId%5D%3Dtrue%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%3DmixinSet%3Breturn%20extended%3B%7Dreturn(%2F**%20%40type%20%7BT%7D%20*%2FdedupingMixin)%3B%7D%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fmixin.html.js%0A",
            "resourceBytes": 1863,
            "encodedBytes": 0,
            "unusedBytes": 26
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "resourceBytes": 6199,
            "encodedBytes": 0,
            "unusedBytes": 2085
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "resourceBytes": 7136,
            "encodedBytes": 0,
            "unusedBytes": 1536
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DASH_TO_CAMEL%3D%2F-%5Ba-z%5D%2Fg%3Bvar%20CAMEL_TO_DASH%3D%2F(%5BA-Z%5D)%2Fg%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20converting%20between%20%22dash-case%22%20and%20%22camelCase%22%0A%20%20%20*%20identifiers.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20converting%20between%20%22dash-case%22%0A%20%20%20*%20%20%20and%20%22camelCase%22.%0A%20%20%20*%2Fvar%20CaseMap%3D%7B%2F**%0A%20%20%20%20%20*%20Converts%20%22dash-case%22%20identifier%20(e.g.%20%60foo-bar-baz%60)%20to%20%22camelCase%22%0A%20%20%20%20%20*%20(e.g.%20%60fooBarBaz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20dash%20Dash-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Camel-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FdashToCamelCase%3Afunction%20dashToCamelCase(dash)%7Breturn%20caseMap%5Bdash%5D%7C%7C(caseMap%5Bdash%5D%3Ddash.indexOf('-')%3C0%3Fdash%3Adash.replace(DASH_TO_CAMEL%2Cfunction(m)%7Breturn%20m%5B1%5D.toUpperCase()%3B%7D))%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20%22camelCase%22%20identifier%20(e.g.%20%60fooBarBaz%60)%20to%20%22dash-case%22%0A%20%20%20%20%20*%20(e.g.%20%60foo-bar-baz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20camel%20Camel-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Dash-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FcamelToDashCase%3Afunction%20camelToDashCase(camel)%7Breturn%20caseMap%5Bcamel%5D%7C%7C(caseMap%5Bcamel%5D%3Dcamel.replace(CAMEL_TO_DASH%2C'-%241').toLowerCase())%3B%7D%7D%3BPolymer.CaseMap%3DCaseMap%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fcase-map.html.js%0A",
            "resourceBytes": 1394,
            "encodedBytes": 0,
            "unusedBytes": 163
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "resourceBytes": 5682,
            "encodedBytes": 0,
            "unusedBytes": 1151
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "resourceBytes": 20501,
            "encodedBytes": 0,
            "unusedBytes": 7197
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "resourceBytes": 12872,
            "encodedBytes": 0,
            "unusedBytes": 4982
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "resourceBytes": 19930,
            "encodedBytes": 0,
            "unusedBytes": 8130
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "resourceBytes": 100964,
            "encodedBytes": 0,
            "unusedBytes": 40160
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%2FPolymer.telemetry%3D%7B%2F**%0A%20%20%20%20%20*%20Total%20number%20of%20Polymer%20element%20instances%20created.%0A%20%20%20%20%20*%20%40type%20%7Bnumber%7D%0A%20%20%20%20%20*%2FinstanceCount%3A0%2C%2F**%0A%20%20%20%20%20*%20Array%20of%20Polymer%20element%20classes%20that%20have%20been%20finalized.%0A%20%20%20%20%20*%20%40type%20%7BArray%3CPolymer.Element%3E%7D%0A%20%20%20%20%20*%2Fregistrations%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElementConstructor%7D%20prototype%20Element%20prototype%20to%20log%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F_regLog%3Afunction%20_regLog(prototype)%7Bconsole.log('%5B'%2Bprototype.is%2B'%5D%3A%20registered')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20class%20prototype%20for%20telemetry%20purposes.%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20prototype%20Element%20prototype%20to%20register%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(prototype)%7Bthis.registrations.push(prototype)%3BPolymer.log%26%26this._regLog(prototype)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Logs%20all%20elements%20registered%20with%20an%20%60is%60%20to%20the%20console.%0A%20%20%20%20%20*%20%40public%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%2FdumpRegistrations%3Afunction%20dumpRegistrations()%7Bthis.registrations.forEach(this._regLog)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftelemetry.html.js%0A",
            "resourceBytes": 1356,
            "encodedBytes": 0,
            "unusedBytes": 146
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "resourceBytes": 9658,
            "encodedBytes": 0,
            "unusedBytes": 3205
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "resourceBytes": 30666,
            "encodedBytes": 0,
            "unusedBytes": 12276
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "resourceBytes": 3961,
            "encodedBytes": 0,
            "unusedBytes": 862
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "resourceBytes": 26851,
            "encodedBytes": 0,
            "unusedBytes": 14717
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40const%20%7BPolymer.Gestures%7D%0A%20%20%20*%2Fvar%20gestures%3DPolymer.Gestures%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes.%0A%20%20%20*%0A%20%20%20*%20The%20API%20is%20designed%20to%20be%20compatible%20with%20override%20points%20implemented%0A%20%20%20*%20in%20%60Polymer.TemplateStamp%60%20such%20that%20declarative%20event%20listeners%20in%0A%20%20%20*%20templates%20will%20support%20gesture%20events%20when%20this%20mixin%20is%20applied%20along%20with%0A%20%20%20*%20%60Polymer.TemplateStamp%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes%0A%20%20%20*%2FPolymer.GestureEventListeners%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%2Fvar%20GestureEventListeners%3Dfunction(_superClass)%7B_inherits(GestureEventListeners%2C_superClass)%3Bfunction%20GestureEventListeners()%7B_classCallCheck(this%2CGestureEventListeners)%3Breturn%20_possibleConstructorReturn(this%2C(GestureEventListeners.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners)).apply(this%2Carguments))%3B%7D_createClass(GestureEventListeners%2C%5B%7Bkey%3A'_addEventListenerToNode'%2C%2F**%0A%20%20%20%20%20%20%20*%20Add%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bif(!gestures.addListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_addEventListenerToNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Remove%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bif(!gestures.removeListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_removeEventListenerFromNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%7D%5D)%3Breturn%20GestureEventListeners%3B%7D(superClass)%3Breturn%20GestureEventListeners%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fgesture-event-listeners.html.js%0A",
            "resourceBytes": 4429,
            "encodedBytes": 0,
            "unusedBytes": 2495
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "resourceBytes": 6777,
            "encodedBytes": 0,
            "unusedBytes": 3525
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20when%20HTMLImports%20are%20ready%20or%20immediately%20if%0A%2F%2F%20this%20api%20is%20not%20available.%0Afunction%20whenImportsReady(cb)%7Bif(window.HTMLImports)%7BHTMLImports.whenReady(cb)%3B%7Delse%7Bcb()%3B%7D%7D%2F**%0A%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20*%0A%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20*%20%20%20loaded.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20*%2FPolymer.importHref%3Dfunction(href%2Conload%2Conerror%2CoptAsync)%7Bvar%20link%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.head.querySelector('link%5Bhref%3D%22'%2Bhref%2B'%22%5D%5Bimport-href%5D')%3Bif(!link)%7Blink%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.createElement('link')%3Blink.rel%3D'import'%3Blink.href%3Dhref%3Blink.setAttribute('import-href'%2C'')%3B%7D%2F%2F%20always%20ensure%20link%20has%20%60async%60%20attribute%20if%20user%20specified%20one%2C%0A%2F%2F%20even%20if%20it%20was%20previously%20not%20async.%20This%20is%20considered%20less%20confusing.%0Aif(optAsync)%7Blink.setAttribute('async'%2C'')%3B%7D%2F%2F%20NOTE%3A%20the%20link%20may%20now%20be%20in%203%20states%3A%20(1)%20pending%20insertion%2C%0A%2F%2F%20(2)%20inflight%2C%20(3)%20already%20loaded.%20In%20each%20case%2C%20we%20need%20to%20add%0A%2F%2F%20event%20listeners%20to%20process%20callbacks.%0Avar%20cleanup%3Dfunction%20cleanup()%7Blink.removeEventListener('load'%2CloadListener)%3Blink.removeEventListener('error'%2CerrorListener)%3B%7D%3Bvar%20loadListener%3Dfunction%20loadListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20a%20successful%20load%2C%20cache%20the%20load%20event%20on%20the%20link%20so%0A%2F%2F%20that%20it%20can%20be%20used%20to%20short-circuit%20this%20method%20in%20the%20future%20when%0A%2F%2F%20it%20is%20called%20with%20the%20same%20href%20param.%0Alink.__dynamicImportLoaded%3Dtrue%3Bif(onload)%7BwhenImportsReady(function()%7Bonload(event)%3B%7D)%3B%7D%7D%3Bvar%20errorListener%3Dfunction%20errorListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20an%20error%2C%20remove%20the%20link%20from%20the%20document%20so%20that%20it%0A%2F%2F%20will%20be%20automatically%20created%20again%20the%20next%20time%20%60importHref%60%20is%0A%2F%2F%20called.%0Aif(link.parentNode)%7Blink.parentNode.removeChild(link)%3B%7Dif(onerror)%7BwhenImportsReady(function()%7Bonerror(event)%3B%7D)%3B%7D%7D%3Blink.addEventListener('load'%2CloadListener)%3Blink.addEventListener('error'%2CerrorListener)%3Bif(link.parentNode%3D%3Dnull)%7Bdocument.head.appendChild(link)%3B%2F%2F%20if%20the%20link%20already%20loaded%2C%20dispatch%20a%20fake%20load%20event%0A%2F%2F%20so%20that%20listeners%20are%20called%20and%20get%20a%20proper%20event%20argument.%0A%7Delse%20if(link.__dynamicImportLoaded)%7Blink.dispatchEvent(new%20Event('load'))%3B%7Dreturn%20link%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fimport-href.html.js%0A",
            "resourceBytes": 2990,
            "encodedBytes": 0,
            "unusedBytes": 1877
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "resourceBytes": 3121,
            "encodedBytes": 0,
            "unusedBytes": 937
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20resolve()%7Bdocument.body.removeAttribute('unresolved')%3B%7Dif(window.WebComponents)%7Bwindow.addEventListener('WebComponentsReady'%2Cresolve)%3B%7Delse%7Bif(document.readyState%3D%3D%3D'interactive'%7C%7Cdocument.readyState%3D%3D%3D'complete')%7Bresolve()%3B%7Delse%7Bwindow.addEventListener('DOMContentLoaded'%2Cresolve)%3B%7D%7D%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Funresolved.html.js%0A",
            "resourceBytes": 480,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "resourceBytes": 7970,
            "encodedBytes": 0,
            "unusedBytes": 3520
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "resourceBytes": 9727,
            "encodedBytes": 0,
            "unusedBytes": 4068
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.enqueueDebouncer%3Dfunction(debouncer)%7BdebouncerQueue.push(debouncer)%3B%7D%3Bfunction%20flushDebouncers()%7Bvar%20didFlush%3DBoolean(debouncerQueue.length)%3Bwhile(debouncerQueue.length)%7Btry%7BdebouncerQueue.shift().flush()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.flush%3Dfunction()%7Bvar%20shadyDOM%3Dvoid%200%2Cdebouncers%3Dvoid%200%3Bdo%7BshadyDOM%3Dwindow.ShadyDOM%26%26ShadyDOM.flush()%3Bif(window.ShadyCSS%26%26window.ShadyCSS.ScopingShim)%7Bwindow.ShadyCSS.ScopingShim.flush()%3B%7Ddebouncers%3DflushDebouncers()%3B%7Dwhile(shadyDOM%7C%7Cdebouncers)%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflush.html.js%0A",
            "resourceBytes": 1114,
            "encodedBytes": 0,
            "unusedBytes": 489
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "resourceBytes": 11133,
            "encodedBytes": 0,
            "unusedBytes": 2351
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "resourceBytes": 37092,
            "encodedBytes": 0,
            "unusedBytes": 11599
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "resourceBytes": 19044,
            "encodedBytes": 0,
            "unusedBytes": 10418
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy%20class%20factory%20and%20registration%20helper%20for%20defining%20Polymer%0A%20%20%20%20%20*%20elements.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20equivalent%20to%0A%20%20%20%20%20*%20%60customElements.define(info.is%2C%20Polymer.Class(info))%3B%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20See%20%60Polymer.Class%60%20for%20details%20on%20valid%20legacy%20metadata%20format%20for%20%60info%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40global%0A%20%20%20%20%20*%20%40override%0A%20%20%20%20%20*%20%40function%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3A%20HTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7Bduplicate%2C%20invalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20if%20input%20is%20a%20%60class%60%20(aka%20a%20function%20with%20a%20prototype)%2C%20use%20the%20prototype%0A%2F%2F%20remember%20that%20the%20%60constructor%60%20will%20never%20be%20called%0Avar%20klass%3Dvoid%200%3Bif(typeof%20info%3D%3D%3D'function')%7Bklass%3Dinfo%3B%7Delse%7Bklass%3DPolymer.Class(info)%3B%7DcustomElements.define(klass.is%2C%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fklass)%3Breturn%20klass%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer-fn.html.js%0A",
            "resourceBytes": 1111,
            "encodedBytes": 0,
            "unusedBytes": 318
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "resourceBytes": 10198,
            "encodedBytes": 0,
            "unusedBytes": 2679
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "resourceBytes": 24612,
            "encodedBytes": 0,
            "unusedBytes": 10875
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "resourceBytes": 5584,
            "encodedBytes": 0,
            "unusedBytes": 471
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20domBindBase%3DPolymer.GestureEventListeners(Polymer.OptionalMutableData(Polymer.PropertyEffects(HTMLElement)))%3B%2F**%0A%20%20%20%20%20*%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%20binding%2C%0A%20%20%20%20%20*%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document%20without%20defining%0A%20%20%20%20%20*%20a%20new%20custom%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20tags%20utilizing%20bindings%20may%20be%20wrapped%20with%20the%20%60%3Cdom-bind%3E%60%0A%20%20%20%20%20*%20element%2C%20which%20will%20immediately%20stamp%20the%20wrapped%20template%20into%20the%20main%0A%20%20%20%20%20*%20document%20and%20bind%20elements%20to%20the%20%60dom-bind%60%20element%20itself%20as%20the%0A%20%20%20%20%20*%20binding%20scope.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20%20%20*%20%40extends%20%7BdomBindBase%7D%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%0A%20%20%20%20%20*%20%20%20binding%2C%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document.%0A%20%20%20%20%20*%2Fvar%20DomBind%3Dfunction(_domBindBase)%7B_inherits(DomBind%2C_domBindBase)%3B_createClass(DomBind%2Cnull%2C%5B%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'mutable-data'%5D%3B%7D%7D%5D)%3Bfunction%20DomBind()%7B_classCallCheck(this%2CDomBind)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomBind.__proto__%7C%7CObject.getPrototypeOf(DomBind)).call(this))%3Bif(Polymer.strictTemplatePolicy)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-bind%20not%20allowed')%3B%7D_this.root%3Dnull%3B_this.%24%3Dnull%3B_this.__children%3Dnull%3Breturn%20_this%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F_createClass(DomBind%2C%5B%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback()%7B%2F%2F%20assumes%20only%20one%20observed%20attribute%0Athis.mutableData%3Dtrue%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bthis.style.display%3D'none'%3Bthis.render()%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bthis.__removeChildren()%3B%7D%7D%2C%7Bkey%3A'__insertChildren'%2Cvalue%3Afunction%20__insertChildren()%7Bthis.parentNode.insertBefore(this.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__removeChildren'%2Cvalue%3Afunction%20__removeChildren()%7Bif(this.__children)%7Bfor(var%20i%3D0%3Bi%3Cthis.__children.length%3Bi%2B%2B)%7Bthis.root.appendChild(this.__children%5Bi%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20This%20is%20typically%20only%0A%20%20%20%20%20%20%20*%20necessary%20to%20call%20if%20HTMLImports%20with%20the%20async%20attribute%20are%20used.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7Bvar%20_this2%3Dthis%3Bvar%20template%3Dvoid%200%3Bif(!this.__children)%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Ftemplate%7C%7Cthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2F_this2.querySelector('template')%3Bif(template)%7Bobserver.disconnect()%3B_this2.render()%3B%7Delse%7Bthrow%20new%20Error('dom-bind%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%3B%7Dthis.root%3Dthis._stampTemplate(template)%3Bthis.%24%3Dthis.root.%24%3Bthis.__children%3D%5B%5D%3Bfor(var%20n%3Dthis.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bthis.__children%5Bthis.__children.length%5D%3Dn%3B%7Dthis._enableProperties()%3B%7Dthis.__insertChildren()%3Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%7D%7D%5D)%3Breturn%20DomBind%3B%7D(domBindBase)%3BcustomElements.define('dom-bind'%2CDomBind)%3B%2F**%20%40const%20*%2FPolymer.DomBind%3DDomBind%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-bind.html.js%0A",
            "resourceBytes": 5022,
            "encodedBytes": 0,
            "unusedBytes": 1943
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "resourceBytes": 5107,
            "encodedBytes": 0,
            "unusedBytes": 1377
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40summary%20Custom%20element%20base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20%20%20key%20meta-programming%20features%20including%20template%20stamping%2C%20data-binding%2C%0A%20%20%20*%20%20%20attribute%20deserialization%2C%20and%20property%20change%20observation%0A%20%20%20*%2FPolymer.Element%3DPolymer.ElementMixin(HTMLElement)%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer-element.html.js%0A",
            "resourceBytes": 939,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "resourceBytes": 25690,
            "encodedBytes": 0,
            "unusedBytes": 11689
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "resourceBytes": 10133,
            "encodedBytes": 0,
            "unusedBytes": 5870
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "resourceBytes": 13519,
            "encodedBytes": 0,
            "unusedBytes": 4656
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "resourceBytes": 6798,
            "encodedBytes": 0,
            "unusedBytes": 234
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElement).prototype%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer.html.js%0A",
            "resourceBytes": 314,
            "encodedBytes": 0,
            "unusedBytes": 0
          }
        ]
      }
    },
    "accesskeys": {
      "id": "accesskeys",
      "title": "`[accesskey]` values are unique",
      "description": "Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.11/accesskeys).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-allowed-attr": {
      "id": "aria-allowed-attr",
      "title": "`[aria-*]` attributes match their roles",
      "description": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-allowed-role": {
      "id": "aria-allowed-role",
      "title": "Uses ARIA roles only on compatible elements",
      "description": "Many HTML elements can only be assigned certain ARIA roles. Using ARIA roles where they are not allowed can interfere with the accessibility of the web page. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-role).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-command-name": {
      "id": "aria-command-name",
      "title": "`button`, `link`, and `menuitem` elements have accessible names",
      "description": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-command-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-conditional-attr": {
      "id": "aria-conditional-attr",
      "title": "ARIA attributes are used as specified for the element's role",
      "description": "Some ARIA attributes are only allowed on an element under certain conditions. [Learn more about conditional ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-conditional-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-deprecated-role": {
      "id": "aria-deprecated-role",
      "title": "Deprecated ARIA roles were not used",
      "description": "Deprecated ARIA roles may not be processed correctly by assistive technology. [Learn more about deprecated ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-deprecated-role).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-dialog-name": {
      "id": "aria-dialog-name",
      "title": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` have accessible names.",
      "description": "ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-dialog-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-hidden-body": {
      "id": "aria-hidden-body",
      "title": "`[aria-hidden=\"true\"]` is not present on the document `<body>`",
      "description": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-body).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-hidden-focus": {
      "id": "aria-hidden-focus",
      "title": "`[aria-hidden=\"true\"]` elements do not contain focusable descendents",
      "description": "Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-focus).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-input-field-name": {
      "id": "aria-input-field-name",
      "title": "ARIA input fields have accessible names",
      "description": "When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.11/aria-input-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-meter-name": {
      "id": "aria-meter-name",
      "title": "ARIA `meter` elements have accessible names",
      "description": "When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.11/aria-meter-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-progressbar-name": {
      "id": "aria-progressbar-name",
      "title": "ARIA `progressbar` elements have accessible names",
      "description": "When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.11/aria-progressbar-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-prohibited-attr": {
      "id": "aria-prohibited-attr",
      "title": "Elements use only permitted ARIA attributes",
      "description": "Using ARIA attributes in roles where they are prohibited can mean that important information is not communicated to users of assistive technologies. [Learn more about prohibited ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-prohibited-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-required-attr": {
      "id": "aria-required-attr",
      "title": "`[role]`s have all required `[aria-*]` attributes",
      "description": "Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.11/aria-required-attr).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-required-children": {
      "id": "aria-required-children",
      "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",
      "description": "Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.11/aria-required-children).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-required-parent": {
      "id": "aria-required-parent",
      "title": "`[role]`s are contained by their required parent element",
      "description": "Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.11/aria-required-parent).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-roles": {
      "id": "aria-roles",
      "title": "`[role]` values are valid",
      "description": "ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-roles).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-text": {
      "id": "aria-text",
      "title": "Elements with the `role=text` attribute do not have focusable descendents.",
      "description": "Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.11/aria-text).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-toggle-field-name": {
      "id": "aria-toggle-field-name",
      "title": "ARIA toggle fields have accessible names",
      "description": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.11/aria-toggle-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-tooltip-name": {
      "id": "aria-tooltip-name",
      "title": "ARIA `tooltip` elements have accessible names",
      "description": "When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.11/aria-tooltip-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-treeitem-name": {
      "id": "aria-treeitem-name",
      "title": "ARIA `treeitem` elements have accessible names",
      "description": "When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.11/aria-treeitem-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-valid-attr-value": {
      "id": "aria-valid-attr-value",
      "title": "`[aria-*]` attributes have valid values",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr-value).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-valid-attr": {
      "id": "aria-valid-attr",
      "title": "`[aria-*]` attributes are valid and not misspelled",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "button-name": {
      "id": "button-name",
      "title": "Buttons have an accessible name",
      "description": "When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.11/button-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "bypass": {
      "id": "bypass",
      "title": "The page contains a heading, skip link, or landmark region",
      "description": "Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.11/bypass).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "color-contrast": {
      "id": "color-contrast",
      "title": "Background and foreground colors have a sufficient contrast ratio",
      "description": "Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.11/color-contrast).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "definition-list": {
      "id": "definition-list",
      "title": "`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
      "description": "When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/definition-list).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "dlitem": {
      "id": "dlitem",
      "title": "Definition list items are wrapped in `<dl>` elements",
      "description": "Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/dlitem).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "document-title": {
      "id": "document-title",
      "title": "Document has a `<title>` element",
      "description": "The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more about document titles](https://dequeuniversity.com/rules/axe/4.11/document-title).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "duplicate-id-aria": {
      "id": "duplicate-id-aria",
      "title": "ARIA IDs are unique",
      "description": "The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn how to fix duplicate ARIA IDs](https://dequeuniversity.com/rules/axe/4.11/duplicate-id-aria).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "empty-heading": {
      "id": "empty-heading",
      "title": "All heading elements contain content.",
      "description": "A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.11/empty-heading).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "form-field-multiple-labels": {
      "id": "form-field-multiple-labels",
      "title": "No form fields have multiple labels",
      "description": "Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.11/form-field-multiple-labels).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "frame-title": {
      "id": "frame-title",
      "title": "`<frame>` or `<iframe>` elements have a title",
      "description": "Screen reader users rely on frame titles to describe the contents of frames. [Learn more about frame titles](https://dequeuniversity.com/rules/axe/4.11/frame-title).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "heading-order": {
      "id": "heading-order",
      "title": "Heading elements are not in a sequentially-descending order",
      "description": "Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading order](https://dequeuniversity.com/rules/axe/4.11/heading-order).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-0-H5",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,1,DIV,0,UI-LABEL-BUCKET,a,#document-fragment,1,DIV,0,A,0,H5",
              "selector": "div#container > a.has-padding > h5.label-news",
              "boundingRect": {
                "top": 3223,
                "bottom": 3243,
                "left": 0,
                "right": 193,
                "width": 193,
                "height": 20
              },
              "snippet": "<h5 class=\"label-news\">",
              "nodeLabel": "Most Recent Videos",
              "explanation": "Fix any of the following:\n  Heading order invalid"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.semantics",
            "best-practice"
          ]
        }
      }
    },
    "html-has-lang": {
      "id": "html-has-lang",
      "title": "`<html>` element has a `[lang]` attribute",
      "description": "If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-has-lang).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-lang-valid": {
      "id": "html-lang-valid",
      "title": "`<html>` element has a valid value for its `[lang]` attribute",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-lang-valid).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-xml-lang-mismatch": {
      "id": "html-xml-lang-mismatch",
      "title": "`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",
      "description": "If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-xml-lang-mismatch).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "identical-links-same-purpose": {
      "id": "identical-links-same-purpose",
      "title": "Identical links have the same purpose.",
      "description": "Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.11/identical-links-same-purpose).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "image-alt": {
      "id": "image-alt",
      "title": "Image elements do not have `[alt]` attributes",
      "description": "Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-alt).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-1-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-2-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-3-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-4-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3805,
                "bottom": 3888,
                "left": 12,
                "right": 160,
                "width": 148,
                "height": 83
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/09/05/PCIN/859…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-5-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3805,
                "bottom": 3868,
                "left": 168,
                "right": 280,
                "width": 112,
                "height": 63
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-6-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3805,
                "bottom": 3868,
                "left": 288,
                "right": 400,
                "width": 112,
                "height": 63
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-7-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3809,
                "bottom": 3878,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89692942007…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-8-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3809,
                "bottom": 3878,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-9-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3809,
                "bottom": 3878,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/15/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-10-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-11-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/-mm-/10b9c02c0cb3aa3cfa335d21f00385456ee528c9/…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-12-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-13-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4460,
                "bottom": 4530,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-14-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4460,
                "bottom": 4530,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/20/PCIN/892…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-15-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,4,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4460,
                "bottom": 4530,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/19/PZAN/892…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-16-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-17-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-18-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,6,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4464,
                "bottom": 4534,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "critical",
          "tags": [
            "cat.text-alternatives",
            "wcag2a",
            "wcag111",
            "section508",
            "section508.22.a",
            "TTv5",
            "TT7.a",
            "TT7.b",
            "EN-301-549",
            "EN-9.1.1.1",
            "ACT",
            "RGAAv4",
            "RGAA-1.1.1"
          ]
        }
      }
    },
    "image-redundant-alt": {
      "id": "image-redundant-alt",
      "title": "Image elements do not have `[alt]` attributes that are redundant text.",
      "description": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-redundant-alt).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-19-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
              "nodeLabel": "BB Riverboats rank among best dinner cruises in US",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,0,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-two > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 364,
                "bottom": 557,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/10/20/PCIN/757…\" alt=\"Arrest made after road worker hit, killed in Clermont County\">",
              "nodeLabel": "Arrest made after road worker hit, killed in Clermont County",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-21-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
              "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
              "boundingRect": {
                "top": 606,
                "bottom": 799,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 193
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" alt=\"Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds\">",
              "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds",
              "explanation": "Fix all of the following:\n  Element contains <img> element with alt text that duplicates existing text"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "minor",
          "tags": [
            "cat.text-alternatives",
            "best-practice"
          ]
        }
      }
    },
    "input-button-name": {
      "id": "input-button-name",
      "title": "Input buttons have discernible text.",
      "description": "Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.11/input-button-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "input-image-alt": {
      "id": "input-image-alt",
      "title": "`<input type=\"image\">` elements have `[alt]` text",
      "description": "When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.11/input-image-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "label-content-name-mismatch": {
      "id": "label-content-name-mismatch",
      "title": "Elements with visible text labels have matching accessible names.",
      "description": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.11/label-content-name-mismatch).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "label": {
      "id": "label",
      "title": "Form elements have associated labels",
      "description": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.11/label).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "landmark-one-main": {
      "id": "landmark-one-main",
      "title": "Document does not have a main landmark.",
      "description": "One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.11/landmark-one-main).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-22-HTML",
              "path": "1,HTML",
              "selector": "html",
              "boundingRect": {
                "top": 0,
                "bottom": 4884,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 4884
              },
              "snippet": "<html lang=\"en\" style=\"--color-theme: #009BFF;\">",
              "nodeLabel": "html",
              "explanation": "Fix all of the following:\n  Document does not have a main landmark"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.semantics",
            "best-practice"
          ]
        }
      }
    },
    "link-name": {
      "id": "link-name",
      "title": "Links do not have a discernible name",
      "description": "Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.11/link-name).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-23-A",
              "path": "1,HTML,1,BODY,5,FOOTER,1,DIV,1,DIV,1,DIV,0,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Facebook",
              "boundingRect": {
                "top": 4793,
                "bottom": 4822,
                "left": 26,
                "right": 75,
                "width": 49,
                "height": 29
              },
              "snippet": "<a id=\"Facebook\" href=\"https://www.facebook.com/Enquirer\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Facebook",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-24-A",
              "path": "1,HTML,1,BODY,5,FOOTER,1,DIV,1,DIV,1,DIV,1,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Twitter",
              "boundingRect": {
                "top": 4793,
                "bottom": 4822,
                "left": 75,
                "right": 124,
                "width": 49,
                "height": 29
              },
              "snippet": "<a id=\"Twitter\" href=\"https://twitter.com/intent/user?user_id=14095883\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Twitter",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-25-A",
              "path": "1,HTML,1,BODY,5,FOOTER,1,DIV,1,DIV,1,DIV,3,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Pinterest",
              "boundingRect": {
                "top": 4793,
                "bottom": 4822,
                "left": 173,
                "right": 197,
                "width": 24,
                "height": 29
              },
              "snippet": "<a id=\"Pinterest\" href=\"http://pinterest.com/cincienquirer/\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Pinterest",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "serious",
          "tags": [
            "cat.name-role-value",
            "wcag2a",
            "wcag244",
            "wcag412",
            "section508",
            "section508.22.a",
            "TTv5",
            "TT6.a",
            "EN-301-549",
            "EN-9.2.4.4",
            "EN-9.4.1.2",
            "ACT",
            "RGAAv4",
            "RGAA-6.2.1"
          ]
        }
      }
    },
    "link-in-text-block": {
      "id": "link-in-text-block",
      "title": "Links are distinguishable without relying on color.",
      "description": "Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "list": {
      "id": "list",
      "title": "Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",
      "description": "Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/list).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "listitem": {
      "id": "listitem",
      "title": "List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements",
      "description": "Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/listitem).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-refresh": {
      "id": "meta-refresh",
      "title": "The document does not use `<meta http-equiv=\"refresh\">`",
      "description": "Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-refresh).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "meta-viewport": {
      "id": "meta-viewport",
      "title": "`[user-scalable=\"no\"]` is not used in the `<meta name=\"viewport\">` element and the `[maximum-scale]` attribute is not less than 5.",
      "description": "Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-viewport).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "object-alt": {
      "id": "object-alt",
      "title": "`<object>` elements have alternate text",
      "description": "Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.11/object-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "select-name": {
      "id": "select-name",
      "title": "Select elements have associated label elements.",
      "description": "Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.11/select-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "skip-link": {
      "id": "skip-link",
      "title": "Skip links are not focusable.",
      "description": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.11/skip-link).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-26-A",
              "path": "1,HTML,1,BODY,1,A",
              "selector": "body > a#skipToMain",
              "boundingRect": {
                "top": 10,
                "bottom": 28,
                "left": -999,
                "right": -866,
                "width": 133,
                "height": 18
              },
              "snippet": "<a id=\"skipToMain\" href=\"#mainContentSection\">",
              "nodeLabel": "Skip to main content",
              "explanation": "Fix any of the following:\n  No skip link target"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.keyboard",
            "best-practice",
            "RGAAv4",
            "RGAA-12.7.1"
          ]
        }
      }
    },
    "tabindex": {
      "id": "tabindex",
      "title": "No element has a `[tabindex]` value greater than 0",
      "description": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.11/tabindex).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "table-duplicate-name": {
      "id": "table-duplicate-name",
      "title": "Tables have different content in the summary attribute and `<caption>`.",
      "description": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.11/table-duplicate-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "table-fake-caption": {
      "id": "table-fake-caption",
      "title": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.11/table-fake-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "target-size": {
      "id": "target-size",
      "title": "Touch targets have sufficient size and spacing.",
      "description": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.11/target-size).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "td-has-header": {
      "id": "td-has-header",
      "title": "`<td>` elements in a large `<table>` have one or more table headers.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/td-has-header).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "td-headers-attr": {
      "id": "td-headers-attr",
      "title": "Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.11/td-headers-attr).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "th-has-data-cells": {
      "id": "th-has-data-cells",
      "title": "`<th>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/th-has-data-cells).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "valid-lang": {
      "id": "valid-lang",
      "title": "`[lang]` attributes have a valid value",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/valid-lang).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "video-caption": {
      "id": "video-caption",
      "title": "`<video>` elements contain a `<track>` element with `[kind=\"captions\"]`",
      "description": "When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more about video captions](https://dequeuniversity.com/rules/axe/4.11/video-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "custom-controls-labels": {
      "id": "custom-controls-labels",
      "title": "Custom controls have associated labels",
      "description": "Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more about custom controls and labels](https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "custom-controls-roles": {
      "id": "custom-controls-roles",
      "title": "Custom controls have ARIA roles",
      "description": "Custom interactive controls have appropriate ARIA roles. [Learn how to add roles to custom controls](https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focus-traps": {
      "id": "focus-traps",
      "title": "User focus is not accidentally trapped in a region",
      "description": "A user can tab into and out of any control or region without accidentally trapping their focus. [Learn how to avoid focus traps](https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focusable-controls": {
      "id": "focusable-controls",
      "title": "Interactive controls are keyboard focusable",
      "description": "Custom interactive controls are keyboard focusable and display a focus indicator. [Learn how to make custom controls focusable](https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "interactive-element-affordance": {
      "id": "interactive-element-affordance",
      "title": "Interactive elements indicate their purpose and state",
      "description": "Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn how to decorate interactive elements with affordance hints](https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "logical-tab-order": {
      "id": "logical-tab-order",
      "title": "The page has a logical tab order",
      "description": "Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more about logical tab ordering](https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "managed-focus": {
      "id": "managed-focus",
      "title": "The user's focus is directed to new content added to the page",
      "description": "If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn how to direct focus to new content](https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "offscreen-content-hidden": {
      "id": "offscreen-content-hidden",
      "title": "Offscreen content is hidden from assistive technology",
      "description": "Offscreen content is hidden with display: none or aria-hidden=true. [Learn how to properly hide offscreen content](https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "use-landmarks": {
      "id": "use-landmarks",
      "title": "HTML5 landmark elements are used to improve navigation",
      "description": "Landmark elements (`<main>`, `<nav>`, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more about landmark elements](https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "visual-order-follows-dom": {
      "id": "visual-order-follows-dom",
      "title": "Visual order on the page follows DOM order",
      "description": "DOM order matches the visual order, improving navigation for assistive technology. [Learn more about DOM and visual ordering](https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "total-byte-weight": {
      "id": "total-byte-weight",
      "title": "Avoid enormous network payloads",
      "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 5584583,
      "numericUnit": "byte",
      "displayValue": "Total size was 5,454 KiB",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/74073640007-06112024-plants-15.jpg?crop=1479,1478,x443,y0&quality=50&width=270",
            "totalBytes": 3685739
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e-aee4081c3dfb-20190715_RiverboatRace234.jpg?crop=3899,2193,x0,y222",
            "totalBytes": 1114430
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 83856
          },
          {
            "url": "https://eu.cincinnati.com/",
            "totalBytes": 36801
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "totalBytes": 25988
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "totalBytes": 20862
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/89645811007-paul-kroner-studio-01-web.jpg?crop=1999,1125,x0,y0&width=420&quality=50",
            "totalBytes": 19417
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "totalBytes": 18644
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "totalBytes": 18466
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "totalBytes": 17813
          }
        ],
        "sortedBy": [
          "totalBytes"
        ]
      },
      "guidanceLevel": 1
    },
    "unminified-css": {
      "id": "unminified-css",
      "title": "Minify CSS",
      "description": "Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 3
    },
    "unminified-javascript": {
      "id": "unminified-javascript",
      "title": "Minify JavaScript",
      "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 150,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 284 KiB",
      "warnings": [],
      "metricSavings": {
        "FCP": 0,
        "LCP": 150
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 66630,
            "wastedPercent": 65.99381957925597
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "totalBytes": 37092,
            "wastedBytes": 24461,
            "wastedPercent": 65.94683489701283
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "totalBytes": 30666,
            "wastedBytes": 21056,
            "wastedPercent": 68.66236222526577
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "totalBytes": 24612,
            "wastedBytes": 14344,
            "wastedPercent": 58.280513570615966
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "totalBytes": 25690,
            "wastedBytes": 14164,
            "wastedPercent": 55.13429349941612
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "totalBytes": 26851,
            "wastedBytes": 12769,
            "wastedPercent": 47.55502588357976
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "totalBytes": 20501,
            "wastedBytes": 12611,
            "wastedPercent": 61.51407248426906
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "totalBytes": 19930,
            "wastedBytes": 12190,
            "wastedPercent": 61.16407425990968
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "totalBytes": 19044,
            "wastedBytes": 10593,
            "wastedPercent": 55.62381852551985
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "totalBytes": 17664,
            "wastedBytes": 7555,
            "wastedPercent": 42.77022145039232
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "totalBytes": 13519,
            "wastedBytes": 7347,
            "wastedPercent": 54.34573563133368
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "totalBytes": 12872,
            "wastedBytes": 7300,
            "wastedPercent": 56.71224362958359
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "totalBytes": 10198,
            "wastedBytes": 6963,
            "wastedPercent": 68.27809374387135
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "totalBytes": 6798,
            "wastedBytes": 6278,
            "wastedPercent": 92.35069137981759
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "totalBytes": 11133,
            "wastedBytes": 6186,
            "wastedPercent": 55.56453786041497
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "totalBytes": 7136,
            "wastedBytes": 5696,
            "wastedPercent": 79.82062780269058
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "totalBytes": 9256,
            "wastedBytes": 5380,
            "wastedPercent": 58.12445980985307
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "totalBytes": 9727,
            "wastedBytes": 5142,
            "wastedPercent": 52.863164387786576
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "totalBytes": 5584,
            "wastedBytes": 4953,
            "wastedPercent": 88.69985673352436
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "totalBytes": 9658,
            "wastedBytes": 4769,
            "wastedPercent": 49.378753365085934
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "totalBytes": 10133,
            "wastedBytes": 4646,
            "wastedPercent": 45.8501924405408
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "totalBytes": 7970,
            "wastedBytes": 4446,
            "wastedPercent": 55.78419071518192
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "totalBytes": 5682,
            "wastedBytes": 4165,
            "wastedPercent": 73.30165434706089
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "totalBytes": 5107,
            "wastedBytes": 3208,
            "wastedPercent": 62.81574309770903
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "totalBytes": 6199,
            "wastedBytes": 3169,
            "wastedPercent": 51.12114857235037
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "totalBytes": 5009,
            "wastedBytes": 2719,
            "wastedPercent": 54.28229187462568
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "totalBytes": 3665,
            "wastedBytes": 2636,
            "wastedPercent": 71.92360163710778
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "totalBytes": 5322,
            "wastedBytes": 2520,
            "wastedPercent": 47.35983153461437
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "totalBytes": 3961,
            "wastedBytes": 2367,
            "wastedPercent": 59.75763696036355
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "totalBytes": 6777,
            "wastedBytes": 2284,
            "wastedPercent": 33.70222812453888
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "totalBytes": 3121,
            "wastedBytes": 2072,
            "wastedPercent": 66.38897789170137
          }
        ],
        "overallSavingsMs": 150,
        "overallSavingsBytes": 290619,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 150
          }
        }
      },
      "guidanceLevel": 3
    },
    "unused-css-rules": {
      "id": "unused-css-rules",
      "title": "Reduce unused CSS",
      "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 1
    },
    "unused-javascript": {
      "id": "unused-javascript",
      "title": "Reduce unused JavaScript",
      "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 150,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 74 KiB",
      "metricSavings": {
        "FCP": 150,
        "LCP": 150
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "subItemsHeading": {
              "key": "source",
              "valueType": "code"
            },
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceBytes"
            },
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceWastedBytes"
            },
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 40160,
            "wastedPercent": 39.77655401925439
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 83689,
            "wastedBytes": 35914,
            "wastedPercent": 42.91401819585125,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "source": "…node_modules/@glidejs/glide/dist/glide.esm.js",
                  "sourceBytes": 6829,
                  "sourceWastedBytes": 6093
                },
                {
                  "source": "…elements-lit/partner/partner-gci-analytics/partner-gci-analytics.js",
                  "sourceBytes": 2523,
                  "sourceWastedBytes": 2440
                },
                {
                  "source": "…elements-lit/partner/partner-slot/partner-slot.js",
                  "sourceBytes": 5727,
                  "sourceWastedBytes": 2284
                },
                {
                  "source": "…elements-lit/promo/promo-story-thumb-small/promo-story-thumb-small.js",
                  "sourceBytes": 1785,
                  "sourceWastedBytes": 1726
                },
                {
                  "source": "…elements-lit/nav/nav-share-buttons/nav-share-buttons.js",
                  "sourceBytes": 1781,
                  "sourceWastedBytes": 1715
                }
              ]
            }
          }
        ],
        "overallSavingsMs": 150,
        "overallSavingsBytes": 76074,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 150,
            "LCP": 150
          }
        }
      },
      "guidanceLevel": 1
    },
    "doctype": {
      "id": "doctype",
      "title": "Page has the HTML doctype",
      "description": "Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more about the doctype declaration](https://developer.chrome.com/docs/lighthouse/best-practices/doctype/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "charset": {
      "id": "charset",
      "title": "Properly defines charset",
      "description": "A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more about declaring the character encoding](https://developer.chrome.com/docs/lighthouse/best-practices/charset/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "geolocation-on-start": {
      "id": "geolocation-on-start",
      "title": "Avoids requesting the geolocation permission on page load",
      "description": "Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "inspector-issues": {
      "id": "inspector-issues",
      "title": "No issues in the `Issues` panel in Chrome Devtools",
      "description": "Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "issueType",
            "valueType": "text",
            "subItemsHeading": {
              "key": "url",
              "valueType": "url"
            },
            "label": "Issue type"
          }
        ],
        "items": []
      }
    },
    "js-libraries": {
      "id": "js-libraries",
      "title": "Detected JavaScript libraries",
      "description": "All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "version",
            "valueType": "text",
            "label": "Version"
          }
        ],
        "items": [
          {
            "name": "Polymer",
            "version": "2.7.0",
            "npm": "@polymer/polymer"
          },
          {
            "name": "LitElement",
            "version": "2.5.1",
            "npm": "lit-element"
          },
          {
            "name": "lit-html",
            "version": "1.4.1",
            "npm": "lit-element"
          }
        ],
        "debugData": {
          "type": "debugdata",
          "stacks": [
            {
              "id": "polymer",
              "version": "2.7.0"
            },
            {
              "id": "litelement",
              "version": "2.5.1"
            },
            {
              "id": "lit-html",
              "version": "1.4.1"
            }
          ]
        }
      }
    },
    "notification-on-start": {
      "id": "notification-on-start",
      "title": "Avoids requesting the notification permission on page load",
      "description": "Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more about responsibly getting permission for notifications](https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "paste-preventing-inputs": {
      "id": "paste-preventing-inputs",
      "title": "Allows users to paste into input fields",
      "description": "Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.[Learn more about user-friendly input fields](https://developer.chrome.com/docs/lighthouse/best-practices/paste-preventing-inputs/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-description": {
      "id": "meta-description",
      "title": "Document does not have a meta description",
      "description": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "explanation": "Description text is empty."
    },
    "http-status-code": {
      "id": "http-status-code",
      "title": "Page has successful HTTP status code",
      "description": "Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more about HTTP status codes](https://developer.chrome.com/docs/lighthouse/seo/http-status-code/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "link-text": {
      "id": "link-text",
      "title": "Links have descriptive text",
      "description": "Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "href",
            "valueType": "url",
            "label": "Link destination"
          },
          {
            "key": "text",
            "valueType": "text",
            "label": "Link Text"
          }
        ],
        "items": []
      }
    },
    "crawlable-anchors": {
      "id": "crawlable-anchors",
      "title": "Links are not crawlable",
      "description": "Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn how to make links crawlable](https://support.google.com/webmasters/answer/9112205)",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Uncrawlable Link"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-83-A",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,2,DIV,0,A",
              "selector": "div#container > div#showMoreContent > a.show-more-link",
              "boundingRect": {
                "top": 3816,
                "bottom": 3844,
                "left": 72,
                "right": 340,
                "width": 267,
                "height": 28
              },
              "snippet": "<a class=\"show-more-link \">",
              "nodeLabel": "Show more Most Recent Videos"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-95-A",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,2,DIV,0,A",
              "selector": "div#container > div#showMoreContent > a.show-more-link",
              "boundingRect": {
                "top": 4471,
                "bottom": 4499,
                "left": 65,
                "right": 347,
                "width": 281,
                "height": 28
              },
              "snippet": "<a class=\"show-more-link \">",
              "nodeLabel": "Show more Most Recent Galleries"
            }
          }
        ]
      }
    },
    "is-crawlable": {
      "id": "is-crawlable",
      "title": "Page is blocked from indexing",
      "description": "Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more about crawler directives](https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "warnings": [],
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "label": "Blocking Directive Source"
          }
        ],
        "items": [
          {
            "source": "x-robots-tag: noindex, nofollow,noarchive,nocache"
          }
        ]
      }
    },
    "robots-txt": {
      "id": "robots-txt",
      "title": "robots.txt is valid",
      "description": "If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more about robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "index",
            "valueType": "text",
            "label": "Line #"
          },
          {
            "key": "line",
            "valueType": "code",
            "label": "Content"
          },
          {
            "key": "message",
            "valueType": "code",
            "label": "Error"
          }
        ],
        "items": []
      }
    },
    "hreflang": {
      "id": "hreflang",
      "title": "Document has a valid `hreflang`",
      "description": "hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more about `hreflang`](https://developer.chrome.com/docs/lighthouse/seo/hreflang/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            },
            "label": ""
          }
        ],
        "items": []
      }
    },
    "canonical": {
      "id": "canonical",
      "title": "Document has a valid `rel=canonical`",
      "description": "Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "structured-data": {
      "id": "structured-data",
      "title": "Structured data is valid",
      "description": "Run the [Structured Data Testing Tool](https://developers.google.com/search/docs/appearance/structured-data/) to validate structured data. [Learn more about Structured Data](https://developer.chrome.com/docs/lighthouse/seo/structured-data/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "bf-cache": {
      "id": "bf-cache",
      "title": "Page didn't prevent back/forward cache restoration",
      "description": "Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. [Learn more about the bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)",
      "score": 1,
      "scoreDisplayMode": "binary",
      "guidanceLevel": 4
    },
    "cache-insight": {
      "id": "cache-insight",
      "title": "Use efficient cache lifetimes",
      "description": "A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 170 KiB",
      "metricSavings": {
        "FCP": 300,
        "LCP": 900
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Request"
          },
          {
            "key": "cacheLifetimeMs",
            "valueType": "ms",
            "label": "Cache TTL",
            "displayUnit": "duration"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size",
            "displayUnit": "kb",
            "granularity": 1
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 83856,
            "wastedBytes": 67084.8
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 20862,
            "wastedBytes": 16689.600000000002
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18644,
            "wastedBytes": 14915.2
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18466,
            "wastedBytes": 14772.800000000001
          },
          {
            "url": "https://atoms.cincinnati.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "cacheLifetimeMs": 900000,
            "totalBytes": 16440,
            "wastedBytes": 14693.25
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 17813,
            "wastedBytes": 14250.400000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 16786,
            "wastedBytes": 13428.800000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 5470,
            "wastedBytes": 4376
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4843,
            "wastedBytes": 3874.4
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4253,
            "wastedBytes": 3402.4
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 3818,
            "wastedBytes": 3054.4
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1690,
            "wastedBytes": 1352
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1535,
            "wastedBytes": 1228
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1107,
            "wastedBytes": 885.6
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "cacheLifetimeMs": 604800000,
            "totalBytes": 354,
            "wastedBytes": 35.39999999999999
          }
        ],
        "sortedBy": [
          "wastedBytes"
        ],
        "skipSumming": [
          "cacheLifetimeMs"
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 174043.05
        }
      },
      "guidanceLevel": 3
    },
    "cls-culprits-insight": {
      "id": "cls-culprits-insight",
      "title": "Layout shift culprits",
      "description": "Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://developer.chrome.com/docs/performance/insights/cls-culprit), such as elements being added, removed, or their fonts changing as the page loads.",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "node",
                "valueType": "node",
                "subItemsHeading": {
                  "key": "extra"
                },
                "label": "Element"
              },
              {
                "key": "score",
                "valueType": "numeric",
                "subItemsHeading": {
                  "key": "cause",
                  "valueType": "text"
                },
                "granularity": 0.001,
                "label": "Layout shift score"
              }
            ],
            "items": [
              {
                "node": {
                  "type": "text",
                  "value": "Total"
                },
                "score": 0.2452
              },
              {
                "node": {
                  "type": "node",
                  "lhId": "page-12-DIV",
                  "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV",
                  "selector": "div.hero-mosaic-background > div.hero-mosaic-container > div#heroStoryContainer > div.secondary-slot-wrapper",
                  "boundingRect": {
                    "top": 364,
                    "bottom": 848,
                    "left": 0,
                    "right": 412,
                    "width": 412,
                    "height": 485
                  },
                  "snippet": "<div class=\"secondary-slot-wrapper\">",
                  "nodeLabel": "Arrest made after road worker hit, killed in Clermont County\nRemember me? Rays'…"
                },
                "score": 0.220031,
                "subItems": {
                  "type": "subitems",
                  "items": [
                    {
                      "extra": {
                        "type": "node",
                        "lhId": "page-1-IMG",
                        "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
                        "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
                        "boundingRect": {
                          "top": 56,
                          "bottom": 288,
                          "left": 0,
                          "right": 412,
                          "width": 412,
                          "height": 232
                        },
                        "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
                        "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
                      },
                      "cause": "Unsized image element"
                    }
                  ]
                }
              },
              {
                "node": {
                  "type": "node",
                  "lhId": "page-8-DIV",
                  "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,1,DIV",
                  "selector": "div.secondary-slot-wrapper > div.hero-slot-three > a.section-helper-flex > div.section-helper-column",
                  "boundingRect": {
                    "top": 778,
                    "bottom": 824,
                    "left": 34,
                    "right": 349,
                    "width": 315,
                    "height": 46
                  },
                  "snippet": "<div class=\"section-helper-column p13-text-wrap\">",
                  "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
                },
                "score": 0.025169,
                "subItems": {
                  "type": "subitems",
                  "items": [
                    {
                      "extra": {
                        "type": "node",
                        "lhId": "page-15-IMG",
                        "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,1,DIV,1,DIV,0,A,0,PICTURE,5,IMG",
                        "selector": "div.hero-slot-three > a.section-helper-flex > picture.section-helper-column > img",
                        "boundingRect": {
                          "top": 606,
                          "bottom": 799,
                          "left": 34,
                          "right": 378,
                          "width": 343,
                          "height": 193
                        },
                        "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\" alt=\"Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds\">",
                        "nodeLabel": "Remember me? Rays' Nick Martinez deals for 8 to beat Cincinnati Reds"
                      },
                      "cause": "Unsized image element"
                    }
                  ]
                }
              }
            ]
          }
        ]
      },
      "guidanceLevel": 3
    },
    "document-latency-insight": {
      "id": "document-latency-insight",
      "title": "Document request latency",
      "description": "Your first network request is the most important. [Reduce its latency](https://developer.chrome.com/docs/performance/insights/document-latency) by avoiding redirects, ensuring a fast server response, and enabling text compression.",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 110 ms",
      "metricSavings": {
        "FCP": 100,
        "LCP": 100
      },
      "details": {
        "type": "checklist",
        "items": {
          "noRedirects": {
            "label": "Had redirects (2 redirects, +114 ms)",
            "value": false
          },
          "serverResponseIsFast": {
            "label": "Server responds quickly (observed 29 ms)",
            "value": true
          },
          "usesCompression": {
            "label": "Applies text compression",
            "value": true
          }
        },
        "debugData": {
          "type": "debugdata",
          "redirectDuration": 114,
          "serverResponseTime": 29,
          "uncompressedResponseBytes": 0,
          "wastedBytes": 0
        }
      },
      "guidanceLevel": 3
    },
    "dom-size-insight": {
      "id": "dom-size-insight",
      "title": "Optimize DOM size",
      "description": "A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/performance/insights/dom-size).",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "numericValue": 914,
      "numericUnit": "element",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "statistic",
            "valueType": "text",
            "label": "Statistic"
          },
          {
            "key": "node",
            "valueType": "node",
            "label": "Element"
          },
          {
            "key": "value",
            "valueType": "numeric",
            "label": "Value"
          }
        ],
        "items": [
          {
            "statistic": "Total elements",
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 914
            }
          },
          {
            "statistic": "DOM depth",
            "node": {
              "type": "node",
              "lhId": "page-19-path",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,1,MEDIA-BADGE,a,#document-fragment,1,DIV,0,DIV,0,DIV,1,svg,1,g,0,path",
              "selector": "div.media-badge-icon > svg > g > path",
              "boundingRect": {
                "top": 4304,
                "bottom": 4320,
                "left": 20,
                "right": 42,
                "width": 21,
                "height": 16
              },
              "snippet": "<path d=\"M67.9,21.5h-13c0-4.1-3.2-8.2-7.1-8.2H31.4c-3.9,0-7.1,4-7.1,8.1l-13,0c-3.9,…\">",
              "nodeLabel": "div.media-badge-icon > svg > g > path"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 19
            }
          },
          {
            "statistic": "Most children",
            "node": {
              "type": "node",
              "lhId": "page-18-UL",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,1,DIV,0,DIV,0,UL",
              "selector": "div#navRibbon > div#itemWrapper > div#ribbon > ul#tagItemWrapper",
              "boundingRect": {
                "top": 0,
                "bottom": 55,
                "left": 248,
                "right": 248,
                "width": 0,
                "height": 55
              },
              "snippet": "<ul class=\"nav-ribbon\" id=\"tagItemWrapper\">",
              "nodeLabel": "div#navRibbon > div#itemWrapper > div#ribbon > ul#tagItemWrapper"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 20
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "totalElements": 914,
          "maxChildren": 20,
          "maxDepth": 19
        }
      },
      "guidanceLevel": 3
    },
    "duplicated-javascript-insight": {
      "id": "duplicated-javascript-insight",
      "title": "Duplicated JavaScript",
      "description": "Remove large, [duplicate JavaScript modules](https://developer.chrome.com/docs/performance/insights/duplicated-javascript) from bundles to reduce unnecessary bytes consumed by network activity.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "duplication.values.flatMap is not a function or its return value is not iterable",
      "errorStack": "TypeError: duplication.values.flatMap is not a function or its return value is not iterable\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js:59:61)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "font-display-insight": {
      "id": "font-display-insight",
      "title": "Font display",
      "description": "Consider setting [font-display](https://developer.chrome.com/docs/performance/insights/font-display) to swap or optional to ensure text is consistently visible. swap can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "ms",
            "label": "Est Savings"
          }
        ],
        "items": [],
        "skipSumming": [
          "wastedMs"
        ]
      },
      "guidanceLevel": 3
    },
    "forced-reflow-insight": {
      "id": "forced-reflow-insight",
      "title": "Forced reflow",
      "description": "A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "source",
                "valueType": "source-location",
                "label": "Source"
              },
              {
                "key": "reflowTime",
                "valueType": "ms",
                "granularity": 1,
                "label": "Total reflow time"
              }
            ],
            "items": []
          }
        ]
      },
      "guidanceLevel": 3
    },
    "image-delivery-insight": {
      "id": "image-delivery-insight",
      "title": "Improve image delivery",
      "description": "Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/performance/insights/image-delivery)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 4,687 KiB",
      "metricSavings": {
        "FCP": 0,
        "LCP": 5100
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            }
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Resource Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings",
            "subItemsHeading": {
              "key": "wastedBytes",
              "valueType": "bytes"
            }
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-0-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,11,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2518,
                "bottom": 2588,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 70
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/740…\" class=\"p1-image\" alt=\"Celebrate Earth Day with Ohio's unique plants and animals\">",
              "nodeLabel": "Celebrate Earth Day with Ohio's unique plants and animals"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/06/12/PDTF/74073640007-06112024-plants-15.jpg?crop=1479,1478,x443,y0&quality=50&width=270",
            "totalBytes": 3683550,
            "wastedBytes": 3679840,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 3136566
                },
                {
                  "reason": "This image file is larger than it needs to be (2219x1479) for its displayed dimensions (183x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 3658567
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-1-IMG",
              "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
              "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
              "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
            },
            "url": "https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e-aee4081c3dfb-20190715_RiverboatRace234.jpg?crop=3899,2193,x0,y222",
            "totalBytes": 1113628,
            "wastedBytes": 1075549,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (3899x2193) for its displayed dimensions (721x406). Use responsive images to reduce the image download size.",
                  "wastedBytes": 1075549
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-2-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89731173007-dsc-05011.jpg?crop=1380,777,x0,y647&width=384&quality=50&crop=16%3A9",
            "totalBytes": 13176,
            "wastedBytes": 8968,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (217x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 8968
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-3-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89726685007-simon-kenton-pioneers-at-ryle-raiders-3817.jpg?crop=3299,1857,x0,y171&width=384&quality=50&crop=16%3A9",
            "totalBytes": 12936,
            "wastedBytes": 8805,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (217x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 8805
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-4-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PCIN/89700400007-sg-13935.jpg?crop=809,455,x0,y42&width=384&quality=50&crop=16%3A9",
            "totalBytes": 11685,
            "wastedBytes": 7953,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (217x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 7953
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-5-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 276,
                "right": 400,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/896…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/16/PCIN/89636320007-san-francisco-giants-at-cincinnati-reds-3518.jpg?crop=3299,1856,x0,y0&width=384&quality=50&crop=16%3A9",
            "totalBytes": 10345,
            "wastedBytes": 7041,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (217x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 7041
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-6-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 4231,
                "bottom": 4301,
                "left": 144,
                "right": 268,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/-mm-/10b9c02c0cb3aa3cfa335d21f00385456ee528c9/…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/-mm-/10b9c02c0cb3aa3cfa335d21f00385456ee528c9/c=0-0-3808-2152/local/-/media/2015/08/21/Cincinnati/Cincinnati/635757981643305435-082115-REDS-DBACKS-0774.jpg?width=384&quality=50&crop=16%3A9",
            "totalBytes": 8852,
            "wastedBytes": 6026,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x217) for its displayed dimensions (217x123). Use responsive images to reduce the image download size.",
                  "wastedBytes": 6026
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-7-IMG",
              "path": "1,HTML,1,BODY,4,SECTION,0,DIV,0,DIV,2,DIV,1,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,2,DIV,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3576,
                "bottom": 3645,
                "left": 12,
                "right": 136,
                "width": 124,
                "height": 70
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PCIN/89724977007-usatsi-28779888.jpg?crop=6445,3626,x0,y335&width=384&quality=50&crop=16%3A9",
            "totalBytes": 7706,
            "wastedBytes": 5245,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (217x122). Use responsive images to reduce the image download size.",
                  "wastedBytes": 5245
                }
              ]
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 4799427
        }
      },
      "guidanceLevel": 3
    },
    "inp-breakdown-insight": {
      "id": "inp-breakdown-insight",
      "title": "INP breakdown",
      "description": "Start investigating [how to improve INP](https://developer.chrome.com/docs/performance/insights/inp-breakdown) by looking at the longest subpart.",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "guidanceLevel": 3
    },
    "lcp-breakdown-insight": {
      "id": "lcp-breakdown-insight",
      "title": "LCP breakdown",
      "description": "Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "label",
                "valueType": "text",
                "label": "Subpart"
              },
              {
                "key": "duration",
                "valueType": "ms",
                "label": "Duration"
              }
            ],
            "items": [
              {
                "subpart": "timeToFirstByte",
                "label": "Time to first byte",
                "duration": 150.469
              },
              {
                "subpart": "resourceLoadDelay",
                "label": "Resource load delay",
                "duration": 12.667
              },
              {
                "subpart": "resourceLoadDuration",
                "label": "Resource load duration",
                "duration": 183.188
              },
              {
                "subpart": "elementRenderDelay",
                "label": "Element render delay",
                "duration": 150.2
              }
            ]
          },
          {
            "type": "node",
            "lhId": "page-1-IMG",
            "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
            "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
            "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "lcp-discovery-insight": {
      "id": "lcp-discovery-insight",
      "title": "LCP request discovery",
      "description": "[Optimize LCP](https://developer.chrome.com/docs/performance/insights/lcp-discovery) by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "checklist",
            "items": {
              "priorityHinted": {
                "label": "fetchpriority=high should be applied",
                "value": false
              },
              "requestDiscoverable": {
                "label": "Request is discoverable in initial document",
                "value": true
              },
              "eagerlyLoaded": {
                "label": "lazy load not applied",
                "value": true
              }
            }
          },
          {
            "type": "node",
            "lhId": "page-1-IMG",
            "path": "1,HTML,1,BODY,3,HEADER,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,DIV,0,A,0,DIV,0,PICTURE,4,IMG",
            "selector": "a.p12-container-link > div.section-helper-column > picture.p12-photo > img.p12-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/07/15/PCIN/034b5eae-ef20-4ab5-8e2e…\" alt=\"BB Riverboats rank among best dinner cruises in US\" class=\"p12-photo\">",
            "nodeLabel": "BB Riverboats rank among best dinner cruises in US"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "legacy-javascript-insight": {
      "id": "legacy-javascript-insight",
      "title": "Legacy JavaScript",
      "description": "Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "wastedBytesByRequestId.values(...).reduce is not a function",
      "errorStack": "TypeError: wastedBytesByRequestId.values(...).reduce is not a function\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js:79:54)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "modern-http-insight": {
      "id": "modern-http-insight",
      "title": "Modern HTTP",
      "description": "HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. [Learn more about using modern HTTP](https://developer.chrome.com/docs/performance/insights/modern-http).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          }
        ],
        "items": []
      },
      "guidanceLevel": 3
    },
    "network-dependency-tree-insight": {
      "id": "network-dependency-tree-insight",
      "title": "Network dependency tree",
      "description": "[Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "list-section",
            "value": {
              "type": "network-tree",
              "chains": {
                "57CC68CFFC71047BE98BDAAB562736F8": {
                  "url": "https://eu.cincinnati.com/",
                  "navStartToEndTime": 172,
                  "transferSize": 36801,
                  "isLongest": true,
                  "children": {
                    "57CC68CFFC71047BE98BDAAB562736F8": {
                      "url": "https://eu.cincinnati.com/",
                      "navStartToEndTime": 172,
                      "transferSize": 36801,
                      "isLongest": true,
                      "children": {
                        "57CC68CFFC71047BE98BDAAB562736F8": {
                          "url": "https://eu.cincinnati.com/",
                          "navStartToEndTime": 172,
                          "transferSize": 36801,
                          "isLongest": true,
                          "children": {
                            "1427658.3": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
                              "navStartToEndTime": 203,
                              "transferSize": 4253,
                              "isLongest": true,
                              "children": {
                                "1427658.28": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
                                  "navStartToEndTime": 265,
                                  "transferSize": 5470,
                                  "isLongest": true,
                                  "children": {
                                    "1427658.64": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 500,
                                      "transferSize": 3247,
                                      "isLongest": true,
                                      "children": {}
                                    },
                                    "1427658.65": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 499,
                                      "transferSize": 4226,
                                      "children": {}
                                    },
                                    "1427658.66": {
                                      "url": "https://user.cincinnati.com/PCIN-GUP/user/",
                                      "navStartToEndTime": 378,
                                      "transferSize": 0,
                                      "children": {}
                                    },
                                    "1427658.67": {
                                      "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=PCIN",
                                      "navStartToEndTime": 367,
                                      "transferSize": 210,
                                      "children": {}
                                    },
                                    "1427658.62": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PCIN/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
                                      "navStartToEndTime": 366,
                                      "transferSize": 1505,
                                      "children": {}
                                    },
                                    "1427658.63": {
                                      "url": "https://api.gannett-cdn.com/argon/navreimagined/pcin/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
                                      "navStartToEndTime": 366,
                                      "transferSize": 1471,
                                      "children": {}
                                    }
                                  }
                                },
                                "1427658.27": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
                                  "navStartToEndTime": 265,
                                  "transferSize": 17813,
                                  "children": {}
                                }
                              }
                            },
                            "1427658.52": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
                              "navStartToEndTime": 374,
                              "transferSize": 18466,
                              "children": {}
                            },
                            "1427658.50": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
                              "navStartToEndTime": 284,
                              "transferSize": 16786,
                              "children": {}
                            },
                            "1427658.56": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
                              "navStartToEndTime": 283,
                              "transferSize": 20862,
                              "children": {}
                            },
                            "1427658.54": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
                              "navStartToEndTime": 283,
                              "transferSize": 18644,
                              "children": {}
                            },
                            "1427658.5": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
                              "navStartToEndTime": 266,
                              "transferSize": 83856,
                              "children": {}
                            },
                            "1427658.4": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
                              "navStartToEndTime": 212,
                              "transferSize": 1107,
                              "children": {}
                            },
                            "1427658.2": {
                              "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
                              "navStartToEndTime": 187,
                              "transferSize": 354,
                              "children": {}
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "longestChain": {
                "duration": 500
              }
            }
          },
          {
            "type": "list-section",
            "title": "Preconnected origins",
            "description": "[preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints help the browser establish a connection earlier in the page load, saving time when the first request for that origin is made. The following are the origins that the page preconnected to.",
            "value": {
              "type": "table",
              "headings": [
                {
                  "key": "origin",
                  "valueType": "text",
                  "subItemsHeading": {
                    "key": "warning"
                  },
                  "label": "Origin"
                },
                {
                  "key": "source",
                  "valueType": "node",
                  "label": "Source"
                }
              ],
              "items": [
                {
                  "origin": "https://cdn.cookielaw.org/",
                  "source": {
                    "type": "node",
                    "lhId": "page-16-LINK",
                    "path": "1,HTML,0,HEAD,14,LINK",
                    "selector": "head > link",
                    "boundingRect": {
                      "top": 0,
                      "bottom": 0,
                      "left": 0,
                      "right": 0,
                      "width": 0,
                      "height": 0
                    },
                    "snippet": "<link rel=\"preconnect\" href=\"https://cdn.cookielaw.org\">",
                    "nodeLabel": "head > link"
                  },
                  "subItems": {
                    "type": "subitems",
                    "items": []
                  }
                }
              ]
            }
          },
          {
            "type": "list-section",
            "title": "Preconnect candidates",
            "description": "Add [preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints to your most important origins, but try to use no more than 4.",
            "value": {
              "type": "text",
              "value": "No additional origins are good candidates for preconnecting"
            }
          }
        ]
      },
      "guidanceLevel": 1
    },
    "render-blocking-insight": {
      "id": "render-blocking-insight",
      "title": "Render blocking requests",
      "description": "Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "totalBytes": 1107,
            "wastedMs": 150
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "totalBytes": 354,
            "wastedMs": 751
          }
        ]
      },
      "guidanceLevel": 3
    },
    "third-parties-insight": {
      "id": "third-parties-insight",
      "title": "3rd parties",
      "description": "3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "data.Renderer.processes.values(...).find is not a function",
      "errorStack": "TypeError: data.Renderer.processes.values(...).find is not a function\n    at collectMainThreadActivity (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:17:10)\n    at Module.summarizeByThirdParty (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:30:30)\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js:58:49)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 3
    },
    "viewport-insight": {
      "id": "viewport-insight",
      "title": "Optimize viewport for mobile",
      "description": "Tap interactions may be [delayed by up to 300 ms](https://developer.chrome.com/docs/performance/insights/viewport) if the viewport is not optimized for mobile.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-17-META",
              "path": "1,HTML,0,HEAD,4,META",
              "selector": "head > meta",
              "boundingRect": {
                "top": 0,
                "bottom": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "height": 0
              },
              "snippet": "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">",
              "nodeLabel": "head > meta"
            }
          }
        ]
      },
      "guidanceLevel": 3
    }
  },
  "configSettings": {
    "output": [
      "json"
    ],
    "maxWaitForFcp": 30000,
    "maxWaitForLoad": 45000,
    "pauseAfterFcpMs": 1000,
    "pauseAfterLoadMs": 1000,
    "networkQuietThresholdMs": 1000,
    "cpuQuietThresholdMs": 1000,
    "formFactor": "mobile",
    "throttling": {
      "rttMs": 150,
      "throughputKbps": 1638.4,
      "requestLatencyMs": 562.5,
      "downloadThroughputKbps": 1474.5600000000002,
      "uploadThroughputKbps": 675,
      "cpuSlowdownMultiplier": 4
    },
    "throttlingMethod": "simulate",
    "screenEmulation": {
      "mobile": true,
      "width": 412,
      "height": 823,
      "deviceScaleFactor": 1.75,
      "disabled": false
    },
    "emulatedUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36",
    "auditMode": false,
    "gatherMode": false,
    "clearStorageTypes": [
      "file_systems",
      "shader_cache",
      "service_workers",
      "cache_storage"
    ],
    "disableStorageReset": false,
    "debugNavigation": false,
    "channel": "cli",
    "usePassiveGathering": false,
    "disableFullPageScreenshot": false,
    "skipAboutBlank": false,
    "blankPage": "about:blank",
    "ignoreStatusCode": false,
    "locale": "en-US",
    "blockedUrlPatterns": null,
    "additionalTraceCategories": null,
    "extraHeaders": null,
    "precomputedLanternData": null,
    "onlyAudits": null,
    "onlyCategories": null,
    "skipAudits": null
  },
  "categories": {
    "performance": {
      "title": "Performance",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "first-contentful-paint",
          "weight": 10,
          "group": "metrics",
          "acronym": "FCP"
        },
        {
          "id": "largest-contentful-paint",
          "weight": 25,
          "group": "metrics",
          "acronym": "LCP"
        },
        {
          "id": "total-blocking-time",
          "weight": 30,
          "group": "metrics",
          "acronym": "TBT"
        },
        {
          "id": "cumulative-layout-shift",
          "weight": 25,
          "group": "metrics",
          "acronym": "CLS"
        },
        {
          "id": "speed-index",
          "weight": 10,
          "group": "metrics",
          "acronym": "SI"
        },
        {
          "id": "cache-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "cls-culprits-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "document-latency-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "dom-size-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "duplicated-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "font-display-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "forced-reflow-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "image-delivery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "inp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-discovery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "legacy-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "modern-http-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "network-dependency-tree-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "render-blocking-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "third-parties-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "viewport-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "interactive",
          "weight": 0,
          "group": "hidden",
          "acronym": "TTI"
        },
        {
          "id": "max-potential-fid",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "unminified-css",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unminified-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-css-rules",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "total-byte-weight",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "user-timings",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bootup-time",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "mainthread-work-breakdown",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "long-tasks",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "non-composited-animations",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unsized-images",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bf-cache",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "network-requests",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-rtt",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-server-latency",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "main-thread-tasks",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "diagnostics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "metrics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "screenshot-thumbnails",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "final-screenshot",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "script-treemap-data",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "resource-summary",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "redirects",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "server-response-time",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "layout-shifts",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "performance",
      "score": 0.53
    },
    "accessibility": {
      "title": "Accessibility",
      "description": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/articles/how-to-review) is also encouraged.",
      "manualDescription": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/articles/how-to-review).",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "accesskeys",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "aria-allowed-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-command-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-conditional-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-deprecated-role",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-dialog-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-body",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-focus",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-input-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-meter-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-progressbar-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-prohibited-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-attr",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-children",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-parent",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-roles",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-text",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-toggle-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-tooltip-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-treeitem-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr-value",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "button-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "bypass",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "color-contrast",
          "weight": 7,
          "group": "a11y-color-contrast"
        },
        {
          "id": "definition-list",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "dlitem",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "document-title",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "duplicate-id-aria",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "form-field-multiple-labels",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "frame-title",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "heading-order",
          "weight": 3,
          "group": "a11y-navigation"
        },
        {
          "id": "html-has-lang",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-lang-valid",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-xml-lang-mismatch",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "image-alt",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-button-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-image-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "label",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "link-in-text-block",
          "weight": 0,
          "group": "a11y-color-contrast"
        },
        {
          "id": "link-name",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "list",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "listitem",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "meta-refresh",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "meta-viewport",
          "weight": 10,
          "group": "a11y-best-practices"
        },
        {
          "id": "object-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "select-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "skip-link",
          "weight": 3,
          "group": "a11y-names-labels"
        },
        {
          "id": "tabindex",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "target-size",
          "weight": 7,
          "group": "a11y-best-practices"
        },
        {
          "id": "td-headers-attr",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "th-has-data-cells",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "valid-lang",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "video-caption",
          "weight": 0,
          "group": "a11y-audio-video"
        },
        {
          "id": "landmark-one-main",
          "weight": 3,
          "group": "a11y-best-practices"
        },
        {
          "id": "focusable-controls",
          "weight": 0
        },
        {
          "id": "interactive-element-affordance",
          "weight": 0
        },
        {
          "id": "logical-tab-order",
          "weight": 0
        },
        {
          "id": "visual-order-follows-dom",
          "weight": 0
        },
        {
          "id": "focus-traps",
          "weight": 0
        },
        {
          "id": "managed-focus",
          "weight": 0
        },
        {
          "id": "use-landmarks",
          "weight": 0
        },
        {
          "id": "offscreen-content-hidden",
          "weight": 0
        },
        {
          "id": "custom-controls-labels",
          "weight": 0
        },
        {
          "id": "custom-controls-roles",
          "weight": 0
        },
        {
          "id": "table-duplicate-name",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "empty-heading",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "aria-allowed-role",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "image-redundant-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "identical-links-same-purpose",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "label-content-name-mismatch",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "table-fake-caption",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "td-has-header",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "accessibility",
      "score": 0.83
    },
    "best-practices": {
      "title": "Best Practices",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-on-https",
          "weight": 5,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "redirects-http",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "geolocation-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "notification-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "csp-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "has-hsts",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "origin-isolation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "clickjacking-mitigation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "trusted-types-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "paste-preventing-inputs",
          "weight": 3,
          "group": "best-practices-ux"
        },
        {
          "id": "image-aspect-ratio",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "image-size-responsive",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "doctype",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "charset",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "js-libraries",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "deprecations",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "third-party-cookies",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "errors-in-console",
          "weight": 1,
          "group": "best-practices-general"
        },
        {
          "id": "valid-source-maps",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "inspector-issues",
          "weight": 1,
          "group": "best-practices-general"
        }
      ],
      "id": "best-practices",
      "score": 0.92
    },
    "seo": {
      "title": "SEO",
      "description": "These checks ensure that your page is following basic search engine optimization advice. There are many additional factors Lighthouse does not score here that may affect your search ranking, including performance on [Core Web Vitals](https://web.dev/explore/vitals). [Learn more about Google Search Essentials](https://support.google.com/webmasters/answer/35769).",
      "manualDescription": "Run these additional validators on your site to check additional SEO best practices.",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-crawlable",
          "weight": 4.043478260869565,
          "group": "seo-crawl"
        },
        {
          "id": "document-title",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "meta-description",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "http-status-code",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "link-text",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "crawlable-anchors",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "robots-txt",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "image-alt",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "hreflang",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "canonical",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "structured-data",
          "weight": 0
        }
      ],
      "id": "seo",
      "score": 0.46
    }
  },
  "categoryGroups": {
    "metrics": {
      "title": "Metrics"
    },
    "insights": {
      "title": "Insights",
      "description": "These insights are also available in the Chrome DevTools Performance Panel - [record a trace](https://developer.chrome.com/docs/devtools/performance/reference) to view more detailed information."
    },
    "diagnostics": {
      "title": "Diagnostics",
      "description": "More information about the performance of your application. These numbers don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score."
    },
    "a11y-best-practices": {
      "title": "Best practices",
      "description": "These items highlight common accessibility best practices."
    },
    "a11y-color-contrast": {
      "title": "Contrast",
      "description": "These are opportunities to improve the legibility of your content."
    },
    "a11y-names-labels": {
      "title": "Names and labels",
      "description": "These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-navigation": {
      "title": "Navigation",
      "description": "These are opportunities to improve keyboard navigation in your application."
    },
    "a11y-aria": {
      "title": "ARIA",
      "description": "These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-language": {
      "title": "Internationalization and localization",
      "description": "These are opportunities to improve the interpretation of your content by users in different locales."
    },
    "a11y-audio-video": {
      "title": "Audio and video",
      "description": "These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments."
    },
    "a11y-tables-lists": {
      "title": "Tables and lists",
      "description": "These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader."
    },
    "seo-mobile": {
      "title": "Mobile Friendly",
      "description": "Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn how to make pages mobile-friendly](https://developers.google.com/search/mobile-sites/)."
    },
    "seo-content": {
      "title": "Content Best Practices",
      "description": "Format your HTML in a way that enables crawlers to better understand your app’s content."
    },
    "seo-crawl": {
      "title": "Crawling and Indexing",
      "description": "To appear in search results, crawlers need access to your app."
    },
    "best-practices-trust-safety": {
      "title": "Trust and Safety"
    },
    "best-practices-ux": {
      "title": "User Experience"
    },
    "best-practices-browser-compat": {
      "title": "Browser Compatibility"
    },
    "best-practices-general": {
      "title": "General"
    },
    "hidden": {
      "title": ""
    }
  },
  "stackPacks": [],
  "entities": [
    {
      "name": "cincinnati.com",
      "origins": [
        "https://cincinnati.com",
        "https://www.cincinnati.com",
        "https://eu.cincinnati.com",
        "https://user.cincinnati.com",
        "https://atoms.cincinnati.com"
      ],
      "isFirstParty": true,
      "isUnrecognized": true
    },
    {
      "name": "polyfill-fastly.io",
      "origins": [
        "https://polyfill-fastly.io"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannettdigital.com",
      "origins": [
        "https://cpt-static.gannettdigital.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannett-cdn.com",
      "origins": [
        "https://www.gannett-cdn.com",
        "https://api.gannett-cdn.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "Optanon",
      "homepage": "https://www.cookielaw.org/",
      "origins": [
        "https://cdn.cookielaw.org"
      ],
      "category": "consent-provider"
    }
  ],
  "fullPageScreenshot": {
    "screenshot": {
      "data": "data:image/webp;base64,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KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJTkp7fw2lE475KclOSnJKAA/v5gAAAI+v2MNmMjnrVF7CWlJzyfDmsCmpW5lmxhyXV88h+THr0/QMRV9tpZX9dr2+UAI/dHOr2FMV2hm9B6a8sv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",
      "width": 412,
      "height": 4884
    },
    "nodes": {
      "page-0-IMG": {
        "id": "",
        "top": 1594,
        "bottom": 1664,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 70
      },
      "page-1-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "page-2-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "page-3-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "page-4-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "page-5-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "page-6-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "page-7-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "page-8-DIV": {
        "id": "",
        "top": 778,
        "bottom": 824,
        "left": 34,
        "right": 349,
        "width": 315,
        "height": 46
      },
      "page-9-DIV": {
        "id": "section-stories",
        "top": 864,
        "bottom": 2158,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 1294
      },
      "page-10-DIV": {
        "id": "itemWrapper",
        "top": 0,
        "bottom": 55,
        "left": 248,
        "right": 385,
        "width": 137,
        "height": 55
      },
      "page-11-DIV": {
        "id": "",
        "top": 872,
        "bottom": 976,
        "left": 263,
        "right": 378,
        "width": 114,
        "height": 104
      },
      "page-12-DIV": {
        "id": "",
        "top": 364,
        "bottom": 848,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 485
      },
      "page-13-DIV": {
        "id": "",
        "top": 327,
        "bottom": 364,
        "left": 0,
        "right": 410,
        "width": 410,
        "height": 37
      },
      "page-14-DIV": {
        "id": "",
        "top": 253,
        "bottom": 327,
        "left": 0,
        "right": 378,
        "width": 378,
        "height": 74
      },
      "page-15-IMG": {
        "id": "",
        "top": 606,
        "bottom": 799,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 193
      },
      "page-16-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-17-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-18-UL": {
        "id": "tagItemWrapper",
        "top": 0,
        "bottom": 55,
        "left": 248,
        "right": 248,
        "width": 0,
        "height": 55
      },
      "page-19-path": {
        "id": "",
        "top": 3274,
        "bottom": 3290,
        "left": 20,
        "right": 42,
        "width": 21,
        "height": 16
      },
      "1-0-H5": {
        "id": "",
        "top": 2193,
        "bottom": 2213,
        "left": 0,
        "right": 193,
        "width": 193,
        "height": 20
      },
      "1-1-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-2-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-3-IMG": {
        "id": "",
        "top": 2546,
        "bottom": 2615,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-4-IMG": {
        "id": "",
        "top": 2775,
        "bottom": 2858,
        "left": 12,
        "right": 160,
        "width": 148,
        "height": 83
      },
      "1-5-IMG": {
        "id": "",
        "top": 2775,
        "bottom": 2838,
        "left": 168,
        "right": 280,
        "width": 112,
        "height": 63
      },
      "1-6-IMG": {
        "id": "",
        "top": 2775,
        "bottom": 2838,
        "left": 288,
        "right": 400,
        "width": 112,
        "height": 63
      },
      "1-7-IMG": {
        "id": "",
        "top": 2779,
        "bottom": 2848,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-8-IMG": {
        "id": "",
        "top": 2779,
        "bottom": 2848,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-9-IMG": {
        "id": "",
        "top": 2779,
        "bottom": 2848,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-10-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-11-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-12-IMG": {
        "id": "",
        "top": 3201,
        "bottom": 3271,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-13-IMG": {
        "id": "",
        "top": 3430,
        "bottom": 3500,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-14-IMG": {
        "id": "",
        "top": 3430,
        "bottom": 3500,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-15-IMG": {
        "id": "",
        "top": 3430,
        "bottom": 3500,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-16-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 70
      },
      "1-17-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 70
      },
      "1-18-IMG": {
        "id": "",
        "top": 3434,
        "bottom": 3504,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 70
      },
      "1-19-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-20-IMG": {
        "id": "",
        "top": 364,
        "bottom": 557,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 193
      },
      "1-21-IMG": {
        "id": "",
        "top": 606,
        "bottom": 799,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 193
      },
      "1-22-HTML": {
        "id": "",
        "top": 0,
        "bottom": 3748,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 3748
      },
      "1-23-A": {
        "id": "Facebook",
        "top": 3657,
        "bottom": 3686,
        "left": 26,
        "right": 75,
        "width": 49,
        "height": 29
      },
      "1-24-A": {
        "id": "Twitter",
        "top": 3657,
        "bottom": 3686,
        "left": 75,
        "right": 124,
        "width": 49,
        "height": 29
      },
      "1-25-A": {
        "id": "Pinterest",
        "top": 3657,
        "bottom": 3686,
        "left": 173,
        "right": 197,
        "width": 24,
        "height": 29
      },
      "1-26-A": {
        "id": "skipToMain",
        "top": 10,
        "bottom": 28,
        "left": -999,
        "right": -866,
        "width": 133,
        "height": 18
      },
      "1-27-INPUT": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -362,
        "right": -74,
        "width": 287,
        "height": 56
      },
      "1-28-DIV": {
        "id": "",
        "top": 268,
        "bottom": 314,
        "left": 34,
        "right": 318,
        "width": 284,
        "height": 46
      },
      "1-29-A": {
        "id": "logoContainer",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 200,
        "width": 140,
        "height": 32
      },
      "1-30-A": {
        "id": "homeLink",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-31-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-32-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-33-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-34-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-35-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-36-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-37-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-38-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-39-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-40-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-41-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-42-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-43-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-44-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-45-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-46-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-47-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-48-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-49-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-50-A": {
        "id": "hubLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -181,
        "width": 197,
        "height": 45
      },
      "1-51-A": {
        "id": "",
        "top": 236,
        "bottom": 293,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 57
      },
      "1-52-A": {
        "id": "",
        "top": 309,
        "bottom": 367,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 57
      },
      "1-53-A": {
        "id": "",
        "top": 383,
        "bottom": 440,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 57
      },
      "1-54-A": {
        "id": "",
        "top": 56,
        "bottom": 327,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 271
      },
      "1-55-A": {
        "id": "",
        "top": 364,
        "bottom": 582,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 218
      },
      "1-56-A": {
        "id": "",
        "top": 606,
        "bottom": 824,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 218
      },
      "1-57-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-58-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-59-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-60-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-61-A": {
        "id": "",
        "top": 872,
        "bottom": 976,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-62-A": {
        "id": "",
        "top": 992,
        "bottom": 1097,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-63-A": {
        "id": "",
        "top": 1113,
        "bottom": 1217,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-64-A": {
        "id": "",
        "top": 1233,
        "bottom": 1338,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-65-A": {
        "id": "",
        "top": 1354,
        "bottom": 1458,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-66-A": {
        "id": "",
        "top": 1474,
        "bottom": 1578,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-67-A": {
        "id": "",
        "top": 1594,
        "bottom": 1668,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 74
      },
      "1-68-A": {
        "id": "",
        "top": 1684,
        "bottom": 1789,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-69-A": {
        "id": "",
        "top": 1805,
        "bottom": 1909,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-70-A": {
        "id": "",
        "top": 1925,
        "bottom": 2030,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-71-A": {
        "id": "",
        "top": 2046,
        "bottom": 2150,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-72-A": {
        "id": "",
        "top": 2174,
        "bottom": 2226,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-73-A": {
        "id": "",
        "top": 2226,
        "bottom": 2545,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 319
      },
      "1-74-A": {
        "id": "",
        "top": 2546,
        "bottom": 2771,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 225
      },
      "1-75-A": {
        "id": "",
        "top": 2546,
        "bottom": 2771,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 225
      },
      "1-76-A": {
        "id": "",
        "top": 2546,
        "bottom": 2771,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 225
      },
      "1-77-A": {
        "id": "",
        "top": 2775,
        "bottom": 2995,
        "left": 12,
        "right": 160,
        "width": 148,
        "height": 220
      },
      "1-78-A": {
        "id": "",
        "top": 2775,
        "bottom": 2995,
        "left": 168,
        "right": 280,
        "width": 112,
        "height": 220
      },
      "1-79-A": {
        "id": "",
        "top": 2775,
        "bottom": 2995,
        "left": 288,
        "right": 400,
        "width": 112,
        "height": 220
      },
      "1-80-A": {
        "id": "",
        "top": 2779,
        "bottom": 2999,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-81-A": {
        "id": "",
        "top": 2779,
        "bottom": 2999,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-82-A": {
        "id": "",
        "top": 2779,
        "bottom": 2999,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-83-A": {
        "id": "",
        "top": 2786,
        "bottom": 2814,
        "left": 72,
        "right": 340,
        "width": 267,
        "height": 28
      },
      "1-84-A": {
        "id": "",
        "top": 2830,
        "bottom": 2882,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-85-A": {
        "id": "",
        "top": 2882,
        "bottom": 3200,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 319
      },
      "1-86-A": {
        "id": "",
        "top": 3201,
        "bottom": 3426,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 225
      },
      "1-87-A": {
        "id": "",
        "top": 3201,
        "bottom": 3426,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 225
      },
      "1-88-A": {
        "id": "",
        "top": 3201,
        "bottom": 3426,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 225
      },
      "1-89-A": {
        "id": "",
        "top": 3430,
        "bottom": 3650,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-90-A": {
        "id": "",
        "top": 3430,
        "bottom": 3650,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-91-A": {
        "id": "",
        "top": 3430,
        "bottom": 3650,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-92-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 12,
        "right": 136,
        "width": 124,
        "height": 220
      },
      "1-93-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 144,
        "right": 268,
        "width": 124,
        "height": 220
      },
      "1-94-A": {
        "id": "",
        "top": 3434,
        "bottom": 3654,
        "left": 276,
        "right": 400,
        "width": 124,
        "height": 220
      },
      "1-95-A": {
        "id": "",
        "top": 3441,
        "bottom": 3469,
        "left": 65,
        "right": 347,
        "width": 281,
        "height": 28
      },
      "1-96-A": {
        "id": "",
        "top": 3525,
        "bottom": 3543,
        "left": 26,
        "right": 69,
        "width": 43,
        "height": 18
      },
      "1-97-A": {
        "id": "",
        "top": 3525,
        "bottom": 3543,
        "left": 76,
        "right": 198,
        "width": 123,
        "height": 18
      },
      "1-98-A": {
        "id": "",
        "top": 3553,
        "bottom": 3571,
        "left": 26,
        "right": 256,
        "width": 230,
        "height": 18
      },
      "1-99-A": {
        "id": "",
        "top": 3553,
        "bottom": 3571,
        "left": 263,
        "right": 366,
        "width": 102,
        "height": 18
      },
      "1-100-A": {
        "id": "",
        "top": 3581,
        "bottom": 3599,
        "left": 26,
        "right": 96,
        "width": 70,
        "height": 18
      },
      "1-101-A": {
        "id": "",
        "top": 3581,
        "bottom": 3599,
        "left": 103,
        "right": 198,
        "width": 95,
        "height": 18
      },
      "1-102-A": {
        "id": "",
        "top": 3581,
        "bottom": 3599,
        "left": 205,
        "right": 358,
        "width": 153,
        "height": 18
      },
      "1-103-A": {
        "id": "",
        "top": 3609,
        "bottom": 3627,
        "left": 26,
        "right": 192,
        "width": 166,
        "height": 18
      },
      "1-104-A": {
        "id": "",
        "top": 3609,
        "bottom": 3627,
        "left": 199,
        "right": 375,
        "width": 177,
        "height": 18
      },
      "1-105-A": {
        "id": "Instagram",
        "top": 3657,
        "bottom": 3686,
        "left": 124,
        "right": 173,
        "width": 49,
        "height": 29
      },
      "1-106-LABEL": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -378,
        "right": -58,
        "width": 319,
        "height": 56
      },
      "1-107-IMG": {
        "id": "logo",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 200,
        "width": 140,
        "height": 32
      },
      "1-108-IMG": {
        "id": "sidebarLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -181,
        "width": 197,
        "height": 45
      },
      "1-109-IMG": {
        "id": "",
        "top": 872,
        "bottom": 976,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-110-IMG": {
        "id": "",
        "top": 992,
        "bottom": 1097,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-111-IMG": {
        "id": "",
        "top": 1113,
        "bottom": 1217,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-112-IMG": {
        "id": "",
        "top": 1233,
        "bottom": 1338,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-113-IMG": {
        "id": "",
        "top": 1354,
        "bottom": 1458,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-114-IMG": {
        "id": "",
        "top": 1474,
        "bottom": 1578,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-115-IMG": {
        "id": "",
        "top": 1594,
        "bottom": 1664,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 70
      },
      "1-116-IMG": {
        "id": "",
        "top": 1684,
        "bottom": 1789,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-117-IMG": {
        "id": "",
        "top": 1805,
        "bottom": 1909,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-118-IMG": {
        "id": "",
        "top": 1925,
        "bottom": 2030,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-119-IMG": {
        "id": "",
        "top": 2046,
        "bottom": 2150,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-120-IMG": {
        "id": "",
        "top": 2226,
        "bottom": 2458,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-121-IMG": {
        "id": "",
        "top": 2882,
        "bottom": 3113,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-122-IMG": {
        "id": "",
        "top": 3657,
        "bottom": 3681,
        "left": 124,
        "right": 148,
        "width": 24,
        "height": 24
      },
      "1-123-DIV": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-124-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-125-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-126-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-127-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-128-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-129-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-130-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-131-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-132-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-133-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-134-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-135-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-136-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-137-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-138-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-139-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-140-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-141-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-142-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-143-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-144-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-145-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-146-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-147-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-148-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-149-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-150-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-151-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-152-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-153-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-154-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-155-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-156-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-157-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-158-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-159-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-160-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-161-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-162-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-163-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-164-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-165-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-166-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-167-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-168-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-169-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-170-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-171-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-172-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-173-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-174-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-175-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-176-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-177-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-178-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-179-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-180-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-181-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-182-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-183-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-184-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-185-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-186-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-187-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-188-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-189-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-190-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-191-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-192-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-193-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-194-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-195-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-196-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-197-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-198-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-199-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-200-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-201-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-202-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-203-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-204-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-205-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-206-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-207-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-208-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-209-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-210-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-211-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-212-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-213-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-214-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-215-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-216-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-217-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-218-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-219-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-220-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-221-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-222-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-223-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-224-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-225-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-226-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-227-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-228-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-229-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-230-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-231-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-232-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-233-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-234-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-235-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-236-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-237-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-238-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-239-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-240-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-241-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-242-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-243-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-244-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-245-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-246-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-247-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-248-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-249-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-250-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-251-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      }
    }
  },
  "timing": {
    "entries": [
      {
        "startTime": 1324.8,
        "name": "lh:config",
        "duration": 437.88,
        "entryType": "measure"
      },
      {
        "startTime": 1327.25,
        "name": "lh:config:resolveArtifactsToDefns",
        "duration": 34.92,
        "entryType": "measure"
      },
      {
        "startTime": 1762.88,
        "name": "lh:runner:gather",
        "duration": 8043.66,
        "entryType": "measure"
      },
      {
        "startTime": 1868.86,
        "name": "lh:driver:connect",
        "duration": 6.75,
        "entryType": "measure"
      },
      {
        "startTime": 1875.91,
        "name": "lh:driver:navigate",
        "duration": 8.57,
        "entryType": "measure"
      },
      {
        "startTime": 1884.86,
        "name": "lh:gather:getBenchmarkIndex",
        "duration": 1008.67,
        "entryType": "measure"
      },
      {
        "startTime": 2893.97,
        "name": "lh:gather:getVersion",
        "duration": 2.17,
        "entryType": "measure"
      },
      {
        "startTime": 2896.3,
        "name": "lh:gather:getDevicePixelRatio",
        "duration": 1.64,
        "entryType": "measure"
      },
      {
        "startTime": 2898.41,
        "name": "lh:prepare:navigationMode",
        "duration": 31.11,
        "entryType": "measure"
      },
      {
        "startTime": 2899.43,
        "name": "lh:gather:getVersion",
        "duration": 0.57,
        "entryType": "measure"
      },
      {
        "startTime": 2916.9,
        "name": "lh:storage:clearDataForOrigin",
        "duration": 2.72,
        "entryType": "measure"
      },
      {
        "startTime": 2919.77,
        "name": "lh:storage:clearBrowserCaches",
        "duration": 7.27,
        "entryType": "measure"
      },
      {
        "startTime": 2928.08,
        "name": "lh:gather:prepareThrottlingAndNetwork",
        "duration": 1.31,
        "entryType": "measure"
      },
      {
        "startTime": 2964.39,
        "name": "lh:driver:navigate",
        "duration": 3248.74,
        "entryType": "measure"
      },
      {
        "startTime": 6645.59,
        "name": "lh:computed:NetworkRecords",
        "duration": 6.02,
        "entryType": "measure"
      },
      {
        "startTime": 6652.17,
        "name": "lh:gather:getArtifact:DevtoolsLog",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 6652.22,
        "name": "lh:gather:getArtifact:Trace",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 6652.25,
        "name": "lh:gather:getArtifact:Accessibility",
        "duration": 414.38,
        "entryType": "measure"
      },
      {
        "startTime": 7066.69,
        "name": "lh:gather:getArtifact:AnchorElements",
        "duration": 102.4,
        "entryType": "measure"
      },
      {
        "startTime": 7169.15,
        "name": "lh:gather:getArtifact:ConsoleMessages",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 7169.28,
        "name": "lh:gather:getArtifact:CSSUsage",
        "duration": 36.49,
        "entryType": "measure"
      },
      {
        "startTime": 7205.83,
        "name": "lh:gather:getArtifact:Doctype",
        "duration": 1.36,
        "entryType": "measure"
      },
      {
        "startTime": 7207.22,
        "name": "lh:gather:getArtifact:Inputs",
        "duration": 5.25,
        "entryType": "measure"
      },
      {
        "startTime": 7212.5,
        "name": "lh:gather:getArtifact:ImageElements",
        "duration": 214.91,
        "entryType": "measure"
      },
      {
        "startTime": 7427.68,
        "name": "lh:gather:getArtifact:InspectorIssues",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 7427.93,
        "name": "lh:gather:getArtifact:JsUsage",
        "duration": 0.09,
        "entryType": "measure"
      },
      {
        "startTime": 7428.06,
        "name": "lh:gather:getArtifact:LinkElements",
        "duration": 16,
        "entryType": "measure"
      },
      {
        "startTime": 7443.69,
        "name": "lh:computed:MainResource",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 7444.08,
        "name": "lh:gather:getArtifact:MainDocumentContent",
        "duration": 5.26,
        "entryType": "measure"
      },
      {
        "startTime": 7449.38,
        "name": "lh:gather:getArtifact:MetaElements",
        "duration": 4.43,
        "entryType": "measure"
      },
      {
        "startTime": 7453.84,
        "name": "lh:gather:getArtifact:NetworkUserAgent",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 7453.97,
        "name": "lh:gather:getArtifact:RobotsTxt",
        "duration": 7.91,
        "entryType": "measure"
      },
      {
        "startTime": 7461.92,
        "name": "lh:gather:getArtifact:Scripts",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 7462.22,
        "name": "lh:gather:getArtifact:SourceMaps",
        "duration": 199.23,
        "entryType": "measure"
      },
      {
        "startTime": 7661.5,
        "name": "lh:gather:getArtifact:Stacks",
        "duration": 17.71,
        "entryType": "measure"
      },
      {
        "startTime": 7661.8,
        "name": "lh:gather:collectStacks",
        "duration": 17.38,
        "entryType": "measure"
      },
      {
        "startTime": 7679.23,
        "name": "lh:gather:getArtifact:Stylesheets",
        "duration": 19.93,
        "entryType": "measure"
      },
      {
        "startTime": 7699.41,
        "name": "lh:gather:getArtifact:TraceElements",
        "duration": 535.56,
        "entryType": "measure"
      },
      {
        "startTime": 7699.71,
        "name": "lh:computed:TraceEngineResult",
        "duration": 470.21,
        "entryType": "measure"
      },
      {
        "startTime": 7699.81,
        "name": "lh:computed:ProcessedTrace",
        "duration": 30.9,
        "entryType": "measure"
      },
      {
        "startTime": 7732.96,
        "name": "lh:computed:TraceEngineResult:total",
        "duration": 428.92,
        "entryType": "measure"
      },
      {
        "startTime": 7732.99,
        "name": "lh:computed:TraceEngineResult:parse",
        "duration": 223.02,
        "entryType": "measure"
      },
      {
        "startTime": 7733.94,
        "name": "lh:computed:TraceEngineResult:parse:handleEvent",
        "duration": 138.29,
        "entryType": "measure"
      },
      {
        "startTime": 7872.29,
        "name": "lh:computed:TraceEngineResult:parse:Meta:finalize",
        "duration": 1.67,
        "entryType": "measure"
      },
      {
        "startTime": 7874.4,
        "name": "lh:computed:TraceEngineResult:parse:AnimationFrames:finalize",
        "duration": 1.3,
        "entryType": "measure"
      },
      {
        "startTime": 7875.74,
        "name": "lh:computed:TraceEngineResult:parse:Animations:finalize",
        "duration": 3.97,
        "entryType": "measure"
      },
      {
        "startTime": 7879.78,
        "name": "lh:computed:TraceEngineResult:parse:Samples:finalize",
        "duration": 1.3,
        "entryType": "measure"
      },
      {
        "startTime": 7881.11,
        "name": "lh:computed:TraceEngineResult:parse:AuctionWorklets:finalize",
        "duration": 1.27,
        "entryType": "measure"
      },
      {
        "startTime": 7882.43,
        "name": "lh:computed:TraceEngineResult:parse:NetworkRequests:finalize",
        "duration": 7.02,
        "entryType": "measure"
      },
      {
        "startTime": 7889.52,
        "name": "lh:computed:TraceEngineResult:parse:Renderer:finalize",
        "duration": 19.94,
        "entryType": "measure"
      },
      {
        "startTime": 7909.52,
        "name": "lh:computed:TraceEngineResult:parse:Flows:finalize",
        "duration": 5.01,
        "entryType": "measure"
      },
      {
        "startTime": 7914.56,
        "name": "lh:computed:TraceEngineResult:parse:AsyncJSCalls:finalize",
        "duration": 1.61,
        "entryType": "measure"
      },
      {
        "startTime": 7916.21,
        "name": "lh:computed:TraceEngineResult:parse:DOMStats:finalize",
        "duration": 1.16,
        "entryType": "measure"
      },
      {
        "startTime": 7917.42,
        "name": "lh:computed:TraceEngineResult:parse:UserTimings:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 7918.67,
        "name": "lh:computed:TraceEngineResult:parse:ExtensionTraceData:finalize",
        "duration": 1.64,
        "entryType": "measure"
      },
      {
        "startTime": 7920.33,
        "name": "lh:computed:TraceEngineResult:parse:LayerTree:finalize",
        "duration": 1.58,
        "entryType": "measure"
      },
      {
        "startTime": 7921.93,
        "name": "lh:computed:TraceEngineResult:parse:Frames:finalize",
        "duration": 7.18,
        "entryType": "measure"
      },
      {
        "startTime": 7929.15,
        "name": "lh:computed:TraceEngineResult:parse:GPU:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 7930.39,
        "name": "lh:computed:TraceEngineResult:parse:ImagePainting:finalize",
        "duration": 1.51,
        "entryType": "measure"
      },
      {
        "startTime": 7931.94,
        "name": "lh:computed:TraceEngineResult:parse:Initiators:finalize",
        "duration": 1.68,
        "entryType": "measure"
      },
      {
        "startTime": 7933.66,
        "name": "lh:computed:TraceEngineResult:parse:Invalidations:finalize",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 7934.94,
        "name": "lh:computed:TraceEngineResult:parse:PageLoadMetrics:finalize",
        "duration": 2.29,
        "entryType": "measure"
      },
      {
        "startTime": 7937.25,
        "name": "lh:computed:TraceEngineResult:parse:LargestImagePaint:finalize",
        "duration": 1.32,
        "entryType": "measure"
      },
      {
        "startTime": 7938.59,
        "name": "lh:computed:TraceEngineResult:parse:LargestTextPaint:finalize",
        "duration": 1.15,
        "entryType": "measure"
      },
      {
        "startTime": 7939.76,
        "name": "lh:computed:TraceEngineResult:parse:Screenshots:finalize",
        "duration": 2.85,
        "entryType": "measure"
      },
      {
        "startTime": 7942.64,
        "name": "lh:computed:TraceEngineResult:parse:LayoutShifts:finalize",
        "duration": 2.19,
        "entryType": "measure"
      },
      {
        "startTime": 7944.84,
        "name": "lh:computed:TraceEngineResult:parse:Memory:finalize",
        "duration": 1.16,
        "entryType": "measure"
      },
      {
        "startTime": 7946.02,
        "name": "lh:computed:TraceEngineResult:parse:PageFrames:finalize",
        "duration": 1.16,
        "entryType": "measure"
      },
      {
        "startTime": 7947.2,
        "name": "lh:computed:TraceEngineResult:parse:Scripts:finalize",
        "duration": 2.87,
        "entryType": "measure"
      },
      {
        "startTime": 7950.12,
        "name": "lh:computed:TraceEngineResult:parse:SelectorStats:finalize",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 7951.31,
        "name": "lh:computed:TraceEngineResult:parse:UserInteractions:finalize",
        "duration": 1.53,
        "entryType": "measure"
      },
      {
        "startTime": 7952.86,
        "name": "lh:computed:TraceEngineResult:parse:Workers:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 7954.1,
        "name": "lh:computed:TraceEngineResult:parse:Warnings:finalize",
        "duration": 1.33,
        "entryType": "measure"
      },
      {
        "startTime": 7955.45,
        "name": "lh:computed:TraceEngineResult:parse:handler.data()",
        "duration": 0.53,
        "entryType": "measure"
      },
      {
        "startTime": 7956.01,
        "name": "lh:computed:TraceEngineResult:insights",
        "duration": 205.85,
        "entryType": "measure"
      },
      {
        "startTime": 7956.44,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 0.63,
        "entryType": "measure"
      },
      {
        "startTime": 7957.08,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 7957.35,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.47,
        "entryType": "measure"
      },
      {
        "startTime": 7957.84,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 7958.01,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 0.63,
        "entryType": "measure"
      },
      {
        "startTime": 7958.67,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 7958.96,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 7959.25,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 7959.45,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 0.3,
        "entryType": "measure"
      },
      {
        "startTime": 7959.76,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 7959.91,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 7960.06,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 7960.36,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 0.4,
        "entryType": "measure"
      },
      {
        "startTime": 7960.77,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 7960.89,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 7961.04,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 7961.24,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.15,
        "entryType": "measure"
      },
      {
        "startTime": 7961.42,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.29,
        "entryType": "measure"
      },
      {
        "startTime": 7961.89,
        "name": "lh:computed:TraceEngineResult:insights:createLanternContext",
        "duration": 53.36,
        "entryType": "measure"
      },
      {
        "startTime": 8015.32,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 0.66,
        "entryType": "measure"
      },
      {
        "startTime": 8016.01,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 5.63,
        "entryType": "measure"
      },
      {
        "startTime": 8021.67,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.3,
        "entryType": "measure"
      },
      {
        "startTime": 8021.99,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.46,
        "entryType": "measure"
      },
      {
        "startTime": 8022.47,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 39.78,
        "entryType": "measure"
      },
      {
        "startTime": 8062.29,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.15,
        "entryType": "measure"
      },
      {
        "startTime": 8062.57,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 8062.61,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 8062.64,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 3.74,
        "entryType": "measure"
      },
      {
        "startTime": 8066.4,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.39,
        "entryType": "measure"
      },
      {
        "startTime": 8066.8,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.06,
        "entryType": "measure"
      },
      {
        "startTime": 8066.86,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 85.91,
        "entryType": "measure"
      },
      {
        "startTime": 8152.81,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 3.38,
        "entryType": "measure"
      },
      {
        "startTime": 8156.23,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 3.51,
        "entryType": "measure"
      },
      {
        "startTime": 8159.78,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 1.12,
        "entryType": "measure"
      },
      {
        "startTime": 8160.92,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.03,
        "entryType": "measure"
      },
      {
        "startTime": 8160.96,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.07,
        "entryType": "measure"
      },
      {
        "startTime": 8161.04,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 8172.88,
        "name": "lh:computed:CumulativeLayoutShift",
        "duration": 1.09,
        "entryType": "measure"
      },
      {
        "startTime": 8235.01,
        "name": "lh:gather:getArtifact:ViewportDimensions",
        "duration": 1.08,
        "entryType": "measure"
      },
      {
        "startTime": 8236.11,
        "name": "lh:gather:getArtifact:FullPageScreenshot",
        "duration": 1287.81,
        "entryType": "measure"
      },
      {
        "startTime": 9515,
        "name": "lh:gather:getVersion",
        "duration": 1.46,
        "entryType": "measure"
      },
      {
        "startTime": 9523.98,
        "name": "lh:gather:getArtifact:BFCacheFailures",
        "duration": 251.11,
        "entryType": "measure"
      },
      {
        "startTime": 9806.96,
        "name": "lh:runner:audit",
        "duration": 749.19,
        "entryType": "measure"
      },
      {
        "startTime": 9807.08,
        "name": "lh:runner:auditing",
        "duration": 748.59,
        "entryType": "measure"
      },
      {
        "startTime": 9808.19,
        "name": "lh:audit:is-on-https",
        "duration": 1.69,
        "entryType": "measure"
      },
      {
        "startTime": 9810.06,
        "name": "lh:audit:redirects-http",
        "duration": 0.65,
        "entryType": "measure"
      },
      {
        "startTime": 9810.9,
        "name": "lh:audit:first-contentful-paint",
        "duration": 15.86,
        "entryType": "measure"
      },
      {
        "startTime": 9811.3,
        "name": "lh:computed:FirstContentfulPaint",
        "duration": 13.61,
        "entryType": "measure"
      },
      {
        "startTime": 9811.46,
        "name": "lh:computed:ProcessedNavigation",
        "duration": 2.55,
        "entryType": "measure"
      },
      {
        "startTime": 9814.19,
        "name": "lh:computed:LanternFirstContentfulPaint",
        "duration": 10.7,
        "entryType": "measure"
      },
      {
        "startTime": 9814.36,
        "name": "lh:computed:PageDependencyGraph",
        "duration": 7.7,
        "entryType": "measure"
      },
      {
        "startTime": 9822.12,
        "name": "lh:computed:LoadSimulator",
        "duration": 1.06,
        "entryType": "measure"
      },
      {
        "startTime": 9822.2,
        "name": "lh:computed:NetworkAnalysis",
        "duration": 0.89,
        "entryType": "measure"
      },
      {
        "startTime": 9827,
        "name": "lh:audit:largest-contentful-paint",
        "duration": 9.86,
        "entryType": "measure"
      },
      {
        "startTime": 9827.44,
        "name": "lh:computed:LargestContentfulPaint",
        "duration": 8.66,
        "entryType": "measure"
      },
      {
        "startTime": 9827.56,
        "name": "lh:computed:LanternLargestContentfulPaint",
        "duration": 8.53,
        "entryType": "measure"
      },
      {
        "startTime": 9837.06,
        "name": "lh:audit:speed-index",
        "duration": 174.52,
        "entryType": "measure"
      },
      {
        "startTime": 9837.52,
        "name": "lh:computed:SpeedIndex",
        "duration": 173.25,
        "entryType": "measure"
      },
      {
        "startTime": 9837.61,
        "name": "lh:computed:LanternSpeedIndex",
        "duration": 173.14,
        "entryType": "measure"
      },
      {
        "startTime": 9837.66,
        "name": "lh:computed:Speedline",
        "duration": 163.48,
        "entryType": "measure"
      },
      {
        "startTime": 10011.61,
        "name": "lh:audit:screenshot-thumbnails",
        "duration": 0.41,
        "entryType": "measure"
      },
      {
        "startTime": 10012.04,
        "name": "lh:audit:final-screenshot",
        "duration": 1.69,
        "entryType": "measure"
      },
      {
        "startTime": 10012.25,
        "name": "lh:computed:Screenshots",
        "duration": 1.44,
        "entryType": "measure"
      },
      {
        "startTime": 10013.93,
        "name": "lh:audit:total-blocking-time",
        "duration": 17.08,
        "entryType": "measure"
      },
      {
        "startTime": 10014.21,
        "name": "lh:computed:TotalBlockingTime",
        "duration": 15.7,
        "entryType": "measure"
      },
      {
        "startTime": 10014.27,
        "name": "lh:computed:LanternTotalBlockingTime",
        "duration": 15.58,
        "entryType": "measure"
      },
      {
        "startTime": 10014.35,
        "name": "lh:computed:LanternInteractive",
        "duration": 5.53,
        "entryType": "measure"
      },
      {
        "startTime": 10031.22,
        "name": "lh:audit:max-potential-fid",
        "duration": 7.9,
        "entryType": "measure"
      },
      {
        "startTime": 10031.65,
        "name": "lh:computed:MaxPotentialFID",
        "duration": 5.82,
        "entryType": "measure"
      },
      {
        "startTime": 10031.76,
        "name": "lh:computed:LanternMaxPotentialFID",
        "duration": 5.69,
        "entryType": "measure"
      },
      {
        "startTime": 10039.29,
        "name": "lh:audit:cumulative-layout-shift",
        "duration": 0.85,
        "entryType": "measure"
      },
      {
        "startTime": 10040.34,
        "name": "lh:audit:errors-in-console",
        "duration": 24.67,
        "entryType": "measure"
      },
      {
        "startTime": 10040.7,
        "name": "lh:computed:JSBundles",
        "duration": 22.15,
        "entryType": "measure"
      },
      {
        "startTime": 10065.22,
        "name": "lh:audit:server-response-time",
        "duration": 1.78,
        "entryType": "measure"
      },
      {
        "startTime": 10065.54,
        "name": "lh:computed:NavigationInsights",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 10067.18,
        "name": "lh:audit:interactive",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 10067.63,
        "name": "lh:computed:Interactive",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 10068.57,
        "name": "lh:audit:user-timings",
        "duration": 2.36,
        "entryType": "measure"
      },
      {
        "startTime": 10068.86,
        "name": "lh:computed:UserTimings",
        "duration": 1.58,
        "entryType": "measure"
      },
      {
        "startTime": 10071.07,
        "name": "lh:audit:redirects",
        "duration": 8.7,
        "entryType": "measure"
      },
      {
        "startTime": 10079.98,
        "name": "lh:audit:image-aspect-ratio",
        "duration": 1.49,
        "entryType": "measure"
      },
      {
        "startTime": 10081.68,
        "name": "lh:audit:image-size-responsive",
        "duration": 2.29,
        "entryType": "measure"
      },
      {
        "startTime": 10082.13,
        "name": "lh:computed:ImageRecords",
        "duration": 0.62,
        "entryType": "measure"
      },
      {
        "startTime": 10084.13,
        "name": "lh:audit:deprecations",
        "duration": 0.8,
        "entryType": "measure"
      },
      {
        "startTime": 10085.09,
        "name": "lh:audit:third-party-cookies",
        "duration": 0.82,
        "entryType": "measure"
      },
      {
        "startTime": 10086.11,
        "name": "lh:audit:mainthread-work-breakdown",
        "duration": 19.2,
        "entryType": "measure"
      },
      {
        "startTime": 10086.59,
        "name": "lh:computed:MainThreadTasks",
        "duration": 16.91,
        "entryType": "measure"
      },
      {
        "startTime": 10105.51,
        "name": "lh:audit:bootup-time",
        "duration": 30.99,
        "entryType": "measure"
      },
      {
        "startTime": 10108.82,
        "name": "lh:computed:TBTImpactTasks",
        "duration": 23.84,
        "entryType": "measure"
      },
      {
        "startTime": 10136.54,
        "name": "lh:audit:diagnostics",
        "duration": 0.89,
        "entryType": "measure"
      },
      {
        "startTime": 10137.45,
        "name": "lh:audit:network-requests",
        "duration": 42.99,
        "entryType": "measure"
      },
      {
        "startTime": 10137.66,
        "name": "lh:computed:EntityClassification",
        "duration": 4.38,
        "entryType": "measure"
      },
      {
        "startTime": 10180.81,
        "name": "lh:audit:network-rtt",
        "duration": 0.96,
        "entryType": "measure"
      },
      {
        "startTime": 10181.91,
        "name": "lh:audit:network-server-latency",
        "duration": 0.74,
        "entryType": "measure"
      },
      {
        "startTime": 10182.67,
        "name": "lh:audit:main-thread-tasks",
        "duration": 0.34,
        "entryType": "measure"
      },
      {
        "startTime": 10183.03,
        "name": "lh:audit:metrics",
        "duration": 3.65,
        "entryType": "measure"
      },
      {
        "startTime": 10183.19,
        "name": "lh:computed:TimingSummary",
        "duration": 3.32,
        "entryType": "measure"
      },
      {
        "startTime": 10183.7,
        "name": "lh:computed:FirstContentfulPaintAllFrames",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 10183.85,
        "name": "lh:computed:LargestContentfulPaintAllFrames",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 10184.11,
        "name": "lh:computed:LCPBreakdown",
        "duration": 1.92,
        "entryType": "measure"
      },
      {
        "startTime": 10184.26,
        "name": "lh:computed:TimeToFirstByte",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 10184.53,
        "name": "lh:computed:LCPImageRecord",
        "duration": 1.43,
        "entryType": "measure"
      },
      {
        "startTime": 10186.71,
        "name": "lh:audit:resource-summary",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 10186.85,
        "name": "lh:computed:ResourceSummary",
        "duration": 0.65,
        "entryType": "measure"
      },
      {
        "startTime": 10188.25,
        "name": "lh:audit:layout-shifts",
        "duration": 2.47,
        "entryType": "measure"
      },
      {
        "startTime": 10191,
        "name": "lh:audit:long-tasks",
        "duration": 6.43,
        "entryType": "measure"
      },
      {
        "startTime": 10197.61,
        "name": "lh:audit:non-composited-animations",
        "duration": 1.09,
        "entryType": "measure"
      },
      {
        "startTime": 10198.96,
        "name": "lh:audit:unsized-images",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 10200.33,
        "name": "lh:audit:valid-source-maps",
        "duration": 2.67,
        "entryType": "measure"
      },
      {
        "startTime": 10203.18,
        "name": "lh:audit:csp-xss",
        "duration": 2.46,
        "entryType": "measure"
      },
      {
        "startTime": 10205.79,
        "name": "lh:audit:has-hsts",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 10207.1,
        "name": "lh:audit:origin-isolation",
        "duration": 0.83,
        "entryType": "measure"
      },
      {
        "startTime": 10208.16,
        "name": "lh:audit:clickjacking-mitigation",
        "duration": 0.94,
        "entryType": "measure"
      },
      {
        "startTime": 10209.26,
        "name": "lh:audit:trusted-types-xss",
        "duration": 2.32,
        "entryType": "measure"
      },
      {
        "startTime": 10211.6,
        "name": "lh:audit:script-treemap-data",
        "duration": 45.44,
        "entryType": "measure"
      },
      {
        "startTime": 10211.92,
        "name": "lh:computed:ModuleDuplication",
        "duration": 0.71,
        "entryType": "measure"
      },
      {
        "startTime": 10212.71,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.55,
        "entryType": "measure"
      },
      {
        "startTime": 10213.35,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.07,
        "entryType": "measure"
      },
      {
        "startTime": 10213.45,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.08,
        "entryType": "measure"
      },
      {
        "startTime": 10213.56,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 10213.7,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.06,
        "entryType": "measure"
      },
      {
        "startTime": 10213.79,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.38,
        "entryType": "measure"
      },
      {
        "startTime": 10214.21,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 10214.3,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 10214.5,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.44,
        "entryType": "measure"
      },
      {
        "startTime": 10214.99,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 3.18,
        "entryType": "measure"
      },
      {
        "startTime": 10218.25,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.73,
        "entryType": "measure"
      },
      {
        "startTime": 10219.06,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 17.77,
        "entryType": "measure"
      },
      {
        "startTime": 10238.3,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 10238.5,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 10238.67,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 2.81,
        "entryType": "measure"
      },
      {
        "startTime": 10241.81,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.09,
        "entryType": "measure"
      },
      {
        "startTime": 10241.98,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.07,
        "entryType": "measure"
      },
      {
        "startTime": 10242.13,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10242.34,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10242.61,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10242.94,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 10243.21,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 10243.47,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.1,
        "entryType": "measure"
      },
      {
        "startTime": 10243.68,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 10243.9,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10244.16,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 10244.54,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 10244.89,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 10245.29,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 10245.65,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 10245.97,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 10246.32,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.58,
        "entryType": "measure"
      },
      {
        "startTime": 10247.04,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 10247.3,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 10247.73,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 10248.19,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 10248.57,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.37,
        "entryType": "measure"
      },
      {
        "startTime": 10249.2,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 10249.55,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 10250.03,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 10250.4,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.15,
        "entryType": "measure"
      },
      {
        "startTime": 10250.69,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 10250.96,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 10251.26,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 10251.59,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10251.86,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 10252.26,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 10252.75,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 10253.13,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 10253.43,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 10253.78,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 10254.18,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 10254.45,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 10254.72,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 10254.99,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 10255.28,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.29,
        "entryType": "measure"
      },
      {
        "startTime": 10255.72,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.17,
        "entryType": "measure"
      },
      {
        "startTime": 10256.02,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.21,
        "entryType": "measure"
      },
      {
        "startTime": 10256.39,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 10256.7,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.22,
        "entryType": "measure"
      },
      {
        "startTime": 10257.35,
        "name": "lh:audit:accesskeys",
        "duration": 0.81,
        "entryType": "measure"
      },
      {
        "startTime": 10258.34,
        "name": "lh:audit:aria-allowed-attr",
        "duration": 2.56,
        "entryType": "measure"
      },
      {
        "startTime": 10261.07,
        "name": "lh:audit:aria-allowed-role",
        "duration": 5.17,
        "entryType": "measure"
      },
      {
        "startTime": 10266.45,
        "name": "lh:audit:aria-command-name",
        "duration": 0.65,
        "entryType": "measure"
      },
      {
        "startTime": 10267.27,
        "name": "lh:audit:aria-conditional-attr",
        "duration": 2.85,
        "entryType": "measure"
      },
      {
        "startTime": 10270.29,
        "name": "lh:audit:aria-deprecated-role",
        "duration": 0.62,
        "entryType": "measure"
      },
      {
        "startTime": 10271.07,
        "name": "lh:audit:aria-dialog-name",
        "duration": 0.66,
        "entryType": "measure"
      },
      {
        "startTime": 10271.91,
        "name": "lh:audit:aria-hidden-body",
        "duration": 2.82,
        "entryType": "measure"
      },
      {
        "startTime": 10274.93,
        "name": "lh:audit:aria-hidden-focus",
        "duration": 0.75,
        "entryType": "measure"
      },
      {
        "startTime": 10275.85,
        "name": "lh:audit:aria-input-field-name",
        "duration": 0.75,
        "entryType": "measure"
      },
      {
        "startTime": 10276.79,
        "name": "lh:audit:aria-meter-name",
        "duration": 0.83,
        "entryType": "measure"
      },
      {
        "startTime": 10277.82,
        "name": "lh:audit:aria-progressbar-name",
        "duration": 0.88,
        "entryType": "measure"
      },
      {
        "startTime": 10278.87,
        "name": "lh:audit:aria-prohibited-attr",
        "duration": 2.44,
        "entryType": "measure"
      },
      {
        "startTime": 10281.49,
        "name": "lh:audit:aria-required-attr",
        "duration": 0.97,
        "entryType": "measure"
      },
      {
        "startTime": 10282.63,
        "name": "lh:audit:aria-required-children",
        "duration": 0.99,
        "entryType": "measure"
      },
      {
        "startTime": 10283.77,
        "name": "lh:audit:aria-required-parent",
        "duration": 0.88,
        "entryType": "measure"
      },
      {
        "startTime": 10284.81,
        "name": "lh:audit:aria-roles",
        "duration": 0.86,
        "entryType": "measure"
      },
      {
        "startTime": 10285.86,
        "name": "lh:audit:aria-text",
        "duration": 1.07,
        "entryType": "measure"
      },
      {
        "startTime": 10287.12,
        "name": "lh:audit:aria-toggle-field-name",
        "duration": 0.97,
        "entryType": "measure"
      },
      {
        "startTime": 10288.24,
        "name": "lh:audit:aria-tooltip-name",
        "duration": 1.01,
        "entryType": "measure"
      },
      {
        "startTime": 10289.43,
        "name": "lh:audit:aria-treeitem-name",
        "duration": 5.4,
        "entryType": "measure"
      },
      {
        "startTime": 10295.02,
        "name": "lh:audit:aria-valid-attr-value",
        "duration": 2.56,
        "entryType": "measure"
      },
      {
        "startTime": 10297.76,
        "name": "lh:audit:aria-valid-attr",
        "duration": 2.48,
        "entryType": "measure"
      },
      {
        "startTime": 10300.41,
        "name": "lh:audit:button-name",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 10301.78,
        "name": "lh:audit:bypass",
        "duration": 2.31,
        "entryType": "measure"
      },
      {
        "startTime": 10304.23,
        "name": "lh:audit:color-contrast",
        "duration": 2.28,
        "entryType": "measure"
      },
      {
        "startTime": 10306.71,
        "name": "lh:audit:definition-list",
        "duration": 8.05,
        "entryType": "measure"
      },
      {
        "startTime": 10314.93,
        "name": "lh:audit:dlitem",
        "duration": 1.14,
        "entryType": "measure"
      },
      {
        "startTime": 10316.22,
        "name": "lh:audit:document-title",
        "duration": 2.37,
        "entryType": "measure"
      },
      {
        "startTime": 10318.75,
        "name": "lh:audit:duplicate-id-aria",
        "duration": 1.09,
        "entryType": "measure"
      },
      {
        "startTime": 10319.99,
        "name": "lh:audit:empty-heading",
        "duration": 2.5,
        "entryType": "measure"
      },
      {
        "startTime": 10322.64,
        "name": "lh:audit:form-field-multiple-labels",
        "duration": 2.18,
        "entryType": "measure"
      },
      {
        "startTime": 10324.97,
        "name": "lh:audit:frame-title",
        "duration": 1.19,
        "entryType": "measure"
      },
      {
        "startTime": 10326.31,
        "name": "lh:audit:heading-order",
        "duration": 2.27,
        "entryType": "measure"
      },
      {
        "startTime": 10328.76,
        "name": "lh:audit:html-has-lang",
        "duration": 2.24,
        "entryType": "measure"
      },
      {
        "startTime": 10331.15,
        "name": "lh:audit:html-lang-valid",
        "duration": 7.35,
        "entryType": "measure"
      },
      {
        "startTime": 10338.68,
        "name": "lh:audit:html-xml-lang-mismatch",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 10340.17,
        "name": "lh:audit:identical-links-same-purpose",
        "duration": 2.14,
        "entryType": "measure"
      },
      {
        "startTime": 10342.5,
        "name": "lh:audit:image-alt",
        "duration": 2.06,
        "entryType": "measure"
      },
      {
        "startTime": 10344.75,
        "name": "lh:audit:image-redundant-alt",
        "duration": 2.15,
        "entryType": "measure"
      },
      {
        "startTime": 10347.06,
        "name": "lh:audit:input-button-name",
        "duration": 1.46,
        "entryType": "measure"
      },
      {
        "startTime": 10348.7,
        "name": "lh:audit:input-image-alt",
        "duration": 1.22,
        "entryType": "measure"
      },
      {
        "startTime": 10350.06,
        "name": "lh:audit:label-content-name-mismatch",
        "duration": 1.28,
        "entryType": "measure"
      },
      {
        "startTime": 10351.48,
        "name": "lh:audit:label",
        "duration": 7.84,
        "entryType": "measure"
      },
      {
        "startTime": 10359.5,
        "name": "lh:audit:landmark-one-main",
        "duration": 2.02,
        "entryType": "measure"
      },
      {
        "startTime": 10361.67,
        "name": "lh:audit:link-name",
        "duration": 2.16,
        "entryType": "measure"
      },
      {
        "startTime": 10363.97,
        "name": "lh:audit:link-in-text-block",
        "duration": 1.36,
        "entryType": "measure"
      },
      {
        "startTime": 10365.5,
        "name": "lh:audit:list",
        "duration": 2.19,
        "entryType": "measure"
      },
      {
        "startTime": 10367.84,
        "name": "lh:audit:listitem",
        "duration": 2.15,
        "entryType": "measure"
      },
      {
        "startTime": 10370.14,
        "name": "lh:audit:meta-refresh",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 10371.63,
        "name": "lh:audit:meta-viewport",
        "duration": 7.15,
        "entryType": "measure"
      },
      {
        "startTime": 10378.94,
        "name": "lh:audit:object-alt",
        "duration": 1.39,
        "entryType": "measure"
      },
      {
        "startTime": 10380.48,
        "name": "lh:audit:select-name",
        "duration": 1.4,
        "entryType": "measure"
      },
      {
        "startTime": 10382.03,
        "name": "lh:audit:skip-link",
        "duration": 2.08,
        "entryType": "measure"
      },
      {
        "startTime": 10384.26,
        "name": "lh:audit:tabindex",
        "duration": 1.67,
        "entryType": "measure"
      },
      {
        "startTime": 10386.08,
        "name": "lh:audit:table-duplicate-name",
        "duration": 1.55,
        "entryType": "measure"
      },
      {
        "startTime": 10387.78,
        "name": "lh:audit:table-fake-caption",
        "duration": 1.7,
        "entryType": "measure"
      },
      {
        "startTime": 10389.63,
        "name": "lh:audit:target-size",
        "duration": 2.07,
        "entryType": "measure"
      },
      {
        "startTime": 10391.84,
        "name": "lh:audit:td-has-header",
        "duration": 1.62,
        "entryType": "measure"
      },
      {
        "startTime": 10398.76,
        "name": "lh:audit:td-headers-attr",
        "duration": 1.86,
        "entryType": "measure"
      },
      {
        "startTime": 10400.83,
        "name": "lh:audit:th-has-data-cells",
        "duration": 1.73,
        "entryType": "measure"
      },
      {
        "startTime": 10402.7,
        "name": "lh:audit:valid-lang",
        "duration": 1.7,
        "entryType": "measure"
      },
      {
        "startTime": 10404.56,
        "name": "lh:audit:video-caption",
        "duration": 1.83,
        "entryType": "measure"
      },
      {
        "startTime": 10406.44,
        "name": "lh:audit:custom-controls-labels",
        "duration": 0.14,
        "entryType": "measure"
      },
      {
        "startTime": 10406.59,
        "name": "lh:audit:custom-controls-roles",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 10406.62,
        "name": "lh:audit:focus-traps",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.63,
        "name": "lh:audit:focusable-controls",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.65,
        "name": "lh:audit:interactive-element-affordance",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.67,
        "name": "lh:audit:logical-tab-order",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.69,
        "name": "lh:audit:managed-focus",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.7,
        "name": "lh:audit:offscreen-content-hidden",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.72,
        "name": "lh:audit:use-landmarks",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 10406.75,
        "name": "lh:audit:visual-order-follows-dom",
        "duration": 0.01,
        "entryType": "measure"
      },
      {
        "startTime": 10406.95,
        "name": "lh:audit:total-byte-weight",
        "duration": 1.24,
        "entryType": "measure"
      },
      {
        "startTime": 10408.31,
        "name": "lh:audit:unminified-css",
        "duration": 42.24,
        "entryType": "measure"
      },
      {
        "startTime": 10450.69,
        "name": "lh:audit:unminified-javascript",
        "duration": 39.15,
        "entryType": "measure"
      },
      {
        "startTime": 10490.01,
        "name": "lh:audit:unused-css-rules",
        "duration": 24.49,
        "entryType": "measure"
      },
      {
        "startTime": 10490.32,
        "name": "lh:computed:UnusedCSS",
        "duration": 21.91,
        "entryType": "measure"
      },
      {
        "startTime": 10514.72,
        "name": "lh:audit:unused-javascript",
        "duration": 5.69,
        "entryType": "measure"
      },
      {
        "startTime": 10520.63,
        "name": "lh:audit:doctype",
        "duration": 0.61,
        "entryType": "measure"
      },
      {
        "startTime": 10521.42,
        "name": "lh:audit:charset",
        "duration": 0.8,
        "entryType": "measure"
      },
      {
        "startTime": 10522.38,
        "name": "lh:audit:geolocation-on-start",
        "duration": 0.69,
        "entryType": "measure"
      },
      {
        "startTime": 10523.22,
        "name": "lh:audit:inspector-issues",
        "duration": 0.58,
        "entryType": "measure"
      },
      {
        "startTime": 10523.91,
        "name": "lh:audit:js-libraries",
        "duration": 0.54,
        "entryType": "measure"
      },
      {
        "startTime": 10524.61,
        "name": "lh:audit:notification-on-start",
        "duration": 0.57,
        "entryType": "measure"
      },
      {
        "startTime": 10525.33,
        "name": "lh:audit:paste-preventing-inputs",
        "duration": 0.6,
        "entryType": "measure"
      },
      {
        "startTime": 10526.08,
        "name": "lh:audit:meta-description",
        "duration": 0.57,
        "entryType": "measure"
      },
      {
        "startTime": 10526.81,
        "name": "lh:audit:http-status-code",
        "duration": 0.51,
        "entryType": "measure"
      },
      {
        "startTime": 10527.53,
        "name": "lh:audit:link-text",
        "duration": 1.17,
        "entryType": "measure"
      },
      {
        "startTime": 10528.84,
        "name": "lh:audit:crawlable-anchors",
        "duration": 1.1,
        "entryType": "measure"
      },
      {
        "startTime": 10530.1,
        "name": "lh:audit:is-crawlable",
        "duration": 2.51,
        "entryType": "measure"
      },
      {
        "startTime": 10532.8,
        "name": "lh:audit:robots-txt",
        "duration": 1.03,
        "entryType": "measure"
      },
      {
        "startTime": 10533.99,
        "name": "lh:audit:hreflang",
        "duration": 0.62,
        "entryType": "measure"
      },
      {
        "startTime": 10534.77,
        "name": "lh:audit:canonical",
        "duration": 0.82,
        "entryType": "measure"
      },
      {
        "startTime": 10535.72,
        "name": "lh:audit:structured-data",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 10536.13,
        "name": "lh:audit:bf-cache",
        "duration": 0.62,
        "entryType": "measure"
      },
      {
        "startTime": 10536.9,
        "name": "lh:audit:cache-insight",
        "duration": 1.26,
        "entryType": "measure"
      },
      {
        "startTime": 10538.31,
        "name": "lh:audit:cls-culprits-insight",
        "duration": 1.44,
        "entryType": "measure"
      },
      {
        "startTime": 10539.92,
        "name": "lh:audit:document-latency-insight",
        "duration": 0.78,
        "entryType": "measure"
      },
      {
        "startTime": 10540.86,
        "name": "lh:audit:dom-size-insight",
        "duration": 0.75,
        "entryType": "measure"
      },
      {
        "startTime": 10541.79,
        "name": "lh:audit:duplicated-javascript-insight",
        "duration": 2.71,
        "entryType": "measure"
      },
      {
        "startTime": 10544.71,
        "name": "lh:audit:font-display-insight",
        "duration": 0.62,
        "entryType": "measure"
      },
      {
        "startTime": 10545.51,
        "name": "lh:audit:forced-reflow-insight",
        "duration": 0.63,
        "entryType": "measure"
      },
      {
        "startTime": 10546.29,
        "name": "lh:audit:image-delivery-insight",
        "duration": 1.65,
        "entryType": "measure"
      },
      {
        "startTime": 10548.08,
        "name": "lh:audit:inp-breakdown-insight",
        "duration": 0.61,
        "entryType": "measure"
      },
      {
        "startTime": 10548.84,
        "name": "lh:audit:lcp-breakdown-insight",
        "duration": 0.8,
        "entryType": "measure"
      },
      {
        "startTime": 10549.83,
        "name": "lh:audit:lcp-discovery-insight",
        "duration": 0.56,
        "entryType": "measure"
      },
      {
        "startTime": 10550.55,
        "name": "lh:audit:legacy-javascript-insight",
        "duration": 0.67,
        "entryType": "measure"
      },
      {
        "startTime": 10551.36,
        "name": "lh:audit:modern-http-insight",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 10552.15,
        "name": "lh:audit:network-dependency-tree-insight",
        "duration": 1.19,
        "entryType": "measure"
      },
      {
        "startTime": 10553.52,
        "name": "lh:audit:render-blocking-insight",
        "duration": 0.73,
        "entryType": "measure"
      },
      {
        "startTime": 10554.4,
        "name": "lh:audit:third-parties-insight",
        "duration": 0.57,
        "entryType": "measure"
      },
      {
        "startTime": 10555.11,
        "name": "lh:audit:viewport-insight",
        "duration": 0.55,
        "entryType": "measure"
      },
      {
        "startTime": 10555.68,
        "name": "lh:runner:generate",
        "duration": 0.45,
        "entryType": "measure"
      }
    ],
    "total": 8792.85
  },
  "i18n": {
    "rendererFormattedStrings": {
      "calculatorLink": "See calculator.",
      "collapseView": "Collapse view",
      "crcInitialNavigation": "Initial Navigation",
      "crcLongestDurationLabel": "Maximum critical path latency:",
      "dropdownCopyJSON": "Copy JSON",
      "dropdownDarkTheme": "Toggle Dark Theme",
      "dropdownPrintExpanded": "Print Expanded",
      "dropdownPrintSummary": "Print Summary",
      "dropdownSaveGist": "Save as Gist",
      "dropdownSaveHTML": "Save as HTML",
      "dropdownSaveJSON": "Save as JSON",
      "dropdownViewUnthrottledTrace": "View Unthrottled Trace",
      "dropdownViewer": "Open in Viewer",
      "errorLabel": "Error!",
      "errorMissingAuditInfo": "Report error: no audit information",
      "expandView": "Expand view",
      "firstPartyChipLabel": "1st party",
      "footerIssue": "File an issue",
      "hide": "Hide",
      "labDataTitle": "Lab Data",
      "lsPerformanceCategoryDescription": "[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",
      "manualAuditsGroupTitle": "Additional items to manually check",
      "notApplicableAuditsGroupTitle": "Not applicable",
      "openInANewTabTooltip": "Open in a new tab",
      "opportunityResourceColumnLabel": "Opportunity",
      "opportunitySavingsColumnLabel": "Estimated Savings",
      "passedAuditsGroupTitle": "Passed audits",
      "runtimeAnalysisWindow": "Initial page load",
      "runtimeAnalysisWindowSnapshot": "Point-in-time snapshot",
      "runtimeAnalysisWindowTimespan": "User interactions timespan",
      "runtimeCustom": "Custom throttling",
      "runtimeDesktopEmulation": "Emulated Desktop",
      "runtimeMobileEmulation": "Emulated Moto G Power",
      "runtimeNoEmulation": "No emulation",
      "runtimeSettingsAxeVersion": "Axe version",
      "runtimeSettingsBenchmark": "Unthrottled CPU/Memory Power",
      "runtimeSettingsCPUThrottling": "CPU throttling",
      "runtimeSettingsDevice": "Device",
      "runtimeSettingsNetworkThrottling": "Network throttling",
      "runtimeSettingsScreenEmulation": "Screen emulation",
      "runtimeSettingsUANetwork": "User agent (network)",
      "runtimeSingleLoad": "Single page session",
      "runtimeSingleLoadTooltip": "This data is taken from a single page session, as opposed to field data summarizing many sessions.",
      "runtimeSlow4g": "Slow 4G throttling",
      "runtimeUnknown": "Unknown",
      "show": "Show",
      "showRelevantAudits": "Show audits relevant to:",
      "snippetCollapseButtonLabel": "Collapse snippet",
      "snippetExpandButtonLabel": "Expand snippet",
      "thirdPartyResourcesLabel": "Show 3rd-party resources",
      "throttlingProvided": "Provided by environment",
      "toplevelWarningsMessage": "There were issues affecting this run of Lighthouse:",
      "unattributable": "Unattributable",
      "unscoredLabel": "Unscored",
      "unscoredTitle": "This audit does not contribute to the overall category score.",
      "varianceDisclaimer": "Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",
      "viewTraceLabel": "View Trace",
      "viewTreemapLabel": "View Treemap",
      "warningAuditsGroupTitle": "Passed audits but with warnings",
      "warningHeader": "Warnings: "
    },
    "icuMessagePaths": {
      "core/gather/driver/navigation.js | warningRedirected": [
        {
          "values": {
            "requested": "https://cincinnati.com/",
            "final": "https://eu.cincinnati.com/"
          },
          "path": "runWarnings[0]"
        }
      ],
      "core/audits/is-on-https.js | title": [
        "audits[is-on-https].title"
      ],
      "core/audits/is-on-https.js | description": [
        "audits[is-on-https].description"
      ],
      "core/audits/is-on-https.js | columnInsecureURL": [
        "audits[is-on-https].details.headings[0].label"
      ],
      "core/audits/is-on-https.js | columnResolution": [
        "audits[is-on-https].details.headings[1].label"
      ],
      "core/audits/redirects-http.js | title": [
        "audits[redirects-http].title"
      ],
      "core/audits/redirects-http.js | description": [
        "audits[redirects-http].description"
      ],
      "core/lib/i18n/i18n.js | firstContentfulPaintMetric": [
        "audits[first-contentful-paint].title"
      ],
      "core/audits/metrics/first-contentful-paint.js | description": [
        "audits[first-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | seconds": [
        {
          "values": {
            "timeInMs": 3894.670329999999
          },
          "path": "audits[first-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 10933.635330000001
          },
          "path": "audits[largest-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 3894.670329999999
          },
          "path": "audits[speed-index].displayValue"
        },
        {
          "values": {
            "timeInMs": 10933.635330000001
          },
          "path": "audits.interactive.displayValue"
        },
        {
          "values": {
            "timeInMs": 2307.7119999999977
          },
          "path": "audits[mainthread-work-breakdown].displayValue"
        },
        {
          "values": {
            "timeInMs": 621.2920000000026
          },
          "path": "audits[bootup-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | largestContentfulPaintMetric": [
        "audits[largest-contentful-paint].title"
      ],
      "core/audits/metrics/largest-contentful-paint.js | description": [
        "audits[largest-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | speedIndexMetric": [
        "audits[speed-index].title"
      ],
      "core/audits/metrics/speed-index.js | description": [
        "audits[speed-index].description"
      ],
      "core/lib/i18n/i18n.js | totalBlockingTimeMetric": [
        "audits[total-blocking-time].title"
      ],
      "core/audits/metrics/total-blocking-time.js | description": [
        "audits[total-blocking-time].description"
      ],
      "core/lib/i18n/i18n.js | ms": [
        {
          "values": {
            "timeInMs": 67
          },
          "path": "audits[total-blocking-time].displayValue"
        },
        {
          "values": {
            "timeInMs": 107
          },
          "path": "audits[max-potential-fid].displayValue"
        },
        {
          "values": {
            "timeInMs": 29.831999999999997
          },
          "path": "audits[network-rtt].displayValue"
        },
        {
          "values": {
            "timeInMs": 51.1055
          },
          "path": "audits[network-server-latency].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | maxPotentialFIDMetric": [
        "audits[max-potential-fid].title"
      ],
      "core/audits/metrics/max-potential-fid.js | description": [
        "audits[max-potential-fid].description"
      ],
      "core/lib/i18n/i18n.js | cumulativeLayoutShiftMetric": [
        "audits[cumulative-layout-shift].title"
      ],
      "core/audits/metrics/cumulative-layout-shift.js | description": [
        "audits[cumulative-layout-shift].description"
      ],
      "core/audits/errors-in-console.js | failureTitle": [
        "audits[errors-in-console].title"
      ],
      "core/audits/errors-in-console.js | description": [
        "audits[errors-in-console].description"
      ],
      "core/lib/i18n/i18n.js | columnSource": [
        "audits[errors-in-console].details.headings[0].label",
        "audits.deprecations.details.headings[1].label",
        "audits[geolocation-on-start].details.headings[0].label",
        "audits[notification-on-start].details.headings[0].label",
        "audits[forced-reflow-insight].details.items[0].headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnDescription": [
        "audits[errors-in-console].details.headings[1].label",
        "audits[csp-xss].details.headings[0].label",
        "audits[has-hsts].details.headings[0].label",
        "audits[origin-isolation].details.headings[0].label",
        "audits[clickjacking-mitigation].details.headings[0].label",
        "audits[trusted-types-xss].details.headings[0].label"
      ],
      "core/audits/server-response-time.js | title": [
        "audits[server-response-time].title"
      ],
      "core/audits/server-response-time.js | description": [
        "audits[server-response-time].description"
      ],
      "core/audits/server-response-time.js | displayValue": [
        {
          "values": {
            "timeInMs": 29
          },
          "path": "audits[server-response-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnURL": [
        "audits[server-response-time].details.headings[0].label",
        "audits.redirects.details.headings[0].label",
        "audits[image-aspect-ratio].details.headings[1].label",
        "audits[image-size-responsive].details.headings[1].label",
        "audits[third-party-cookies].details.headings[1].label",
        "audits[bootup-time].details.headings[0].label",
        "audits[network-rtt].details.headings[0].label",
        "audits[network-server-latency].details.headings[0].label",
        "audits[long-tasks].details.headings[0].label",
        "audits[unsized-images].details.headings[1].label",
        "audits[valid-source-maps].details.headings[0].label",
        "audits[total-byte-weight].details.headings[0].label",
        "audits[unminified-javascript].details.headings[0].label",
        "audits[unused-javascript].details.headings[0].label",
        "audits[font-display-insight].details.headings[0].label",
        "audits[image-delivery-insight].details.headings[1].label",
        "audits[modern-http-insight].details.headings[0].label",
        "audits[render-blocking-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnTimeSpent": [
        "audits[server-response-time].details.headings[1].label",
        "audits.redirects.details.headings[1].label",
        "audits[mainthread-work-breakdown].details.headings[1].label",
        "audits[network-rtt].details.headings[1].label",
        "audits[network-server-latency].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | interactiveMetric": [
        "audits.interactive.title"
      ],
      "core/audits/metrics/interactive.js | description": [
        "audits.interactive.description"
      ],
      "core/audits/user-timings.js | title": [
        "audits[user-timings].title"
      ],
      "core/audits/user-timings.js | description": [
        "audits[user-timings].description"
      ],
      "core/lib/i18n/i18n.js | columnName": [
        "audits[user-timings].details.headings[0].label",
        "audits[third-party-cookies].details.headings[0].label",
        "audits[js-libraries].details.headings[0].label"
      ],
      "core/audits/user-timings.js | columnType": [
        "audits[user-timings].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnStartTime": [
        "audits[user-timings].details.headings[2].label",
        "audits[long-tasks].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnDuration": [
        "audits[user-timings].details.headings[3].label",
        "audits[long-tasks].details.headings[2].label",
        "audits[lcp-breakdown-insight].details.items[0].headings[1].label",
        "audits[render-blocking-insight].details.headings[2].label"
      ],
      "core/audits/redirects.js | title": [
        "audits.redirects.title"
      ],
      "core/audits/redirects.js | description": [
        "audits.redirects.description"
      ],
      "core/lib/i18n/i18n.js | displayValueMsSavings": [
        {
          "values": {
            "wastedMs": 1593.3429999999996
          },
          "path": "audits.redirects.displayValue"
        },
        {
          "values": {
            "wastedMs": 114
          },
          "path": "audits[document-latency-insight].displayValue"
        }
      ],
      "core/audits/image-aspect-ratio.js | title": [
        "audits[image-aspect-ratio].title"
      ],
      "core/audits/image-aspect-ratio.js | description": [
        "audits[image-aspect-ratio].description"
      ],
      "core/audits/image-aspect-ratio.js | columnDisplayed": [
        "audits[image-aspect-ratio].details.headings[2].label"
      ],
      "core/audits/image-aspect-ratio.js | columnActual": [
        "audits[image-aspect-ratio].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | failureTitle": [
        "audits[image-size-responsive].title"
      ],
      "core/audits/image-size-responsive.js | description": [
        "audits[image-size-responsive].description"
      ],
      "core/audits/image-size-responsive.js | columnDisplayed": [
        "audits[image-size-responsive].details.headings[2].label"
      ],
      "core/audits/image-size-responsive.js | columnActual": [
        "audits[image-size-responsive].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | columnExpected": [
        "audits[image-size-responsive].details.headings[4].label"
      ],
      "core/audits/deprecations.js | title": [
        "audits.deprecations.title"
      ],
      "core/audits/deprecations.js | description": [
        "audits.deprecations.description"
      ],
      "core/audits/deprecations.js | columnDeprecate": [
        "audits.deprecations.details.headings[0].label"
      ],
      "core/audits/third-party-cookies.js | title": [
        "audits[third-party-cookies].title"
      ],
      "core/audits/third-party-cookies.js | description": [
        "audits[third-party-cookies].description"
      ],
      "core/audits/mainthread-work-breakdown.js | failureTitle": [
        "audits[mainthread-work-breakdown].title"
      ],
      "core/audits/mainthread-work-breakdown.js | description": [
        "audits[mainthread-work-breakdown].description"
      ],
      "core/audits/mainthread-work-breakdown.js | columnCategory": [
        "audits[mainthread-work-breakdown].details.headings[0].label"
      ],
      "core/audits/bootup-time.js | title": [
        "audits[bootup-time].title"
      ],
      "core/audits/bootup-time.js | description": [
        "audits[bootup-time].description"
      ],
      "core/audits/bootup-time.js | columnTotal": [
        "audits[bootup-time].details.headings[1].label"
      ],
      "core/audits/bootup-time.js | columnScriptEval": [
        "audits[bootup-time].details.headings[2].label"
      ],
      "core/audits/bootup-time.js | columnScriptParse": [
        "audits[bootup-time].details.headings[3].label"
      ],
      "core/audits/network-rtt.js | title": [
        "audits[network-rtt].title"
      ],
      "core/audits/network-rtt.js | description": [
        "audits[network-rtt].description"
      ],
      "core/audits/network-server-latency.js | title": [
        "audits[network-server-latency].title"
      ],
      "core/audits/network-server-latency.js | description": [
        "audits[network-server-latency].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceType": [
        "audits[resource-summary].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnRequests": [
        "audits[resource-summary].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnTransferSize": [
        "audits[resource-summary].details.headings[2].label",
        "audits[total-byte-weight].details.headings[1].label",
        "audits[unminified-javascript].details.headings[1].label",
        "audits[unused-javascript].details.headings[1].label",
        "audits[cache-insight].details.headings[2].label",
        "audits[render-blocking-insight].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | total": [
        "audits[resource-summary].details.items[0].label",
        "audits[cls-culprits-insight].details.items[0].items[0].node.value"
      ],
      "core/lib/i18n/i18n.js | imageResourceType": [
        "audits[resource-summary].details.items[1].label"
      ],
      "core/lib/i18n/i18n.js | otherResourceType": [
        "audits[resource-summary].details.items[2].label"
      ],
      "core/lib/i18n/i18n.js | scriptResourceType": [
        "audits[resource-summary].details.items[3].label"
      ],
      "core/lib/i18n/i18n.js | fontResourceType": [
        "audits[resource-summary].details.items[4].label"
      ],
      "core/lib/i18n/i18n.js | documentResourceType": [
        "audits[resource-summary].details.items[5].label"
      ],
      "core/lib/i18n/i18n.js | stylesheetResourceType": [
        "audits[resource-summary].details.items[6].label"
      ],
      "core/lib/i18n/i18n.js | mediaResourceType": [
        "audits[resource-summary].details.items[7].label"
      ],
      "core/lib/i18n/i18n.js | thirdPartyResourceType": [
        "audits[resource-summary].details.items[8].label"
      ],
      "core/audits/layout-shifts.js | title": [
        "audits[layout-shifts].title"
      ],
      "core/audits/layout-shifts.js | description": [
        "audits[layout-shifts].description"
      ],
      "core/audits/layout-shifts.js | displayValueShiftsFound": [
        {
          "values": {
            "shiftCount": 2
          },
          "path": "audits[layout-shifts].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnElement": [
        "audits[layout-shifts].details.headings[0].label",
        "audits[non-composited-animations].details.headings[0].label",
        "audits[cls-culprits-insight].details.items[0].headings[0].label",
        "audits[dom-size-insight].details.headings[1].label"
      ],
      "core/audits/layout-shifts.js | columnScore": [
        "audits[layout-shifts].details.headings[1].label"
      ],
      "core/audits/layout-shifts.js | rootCauseUnsizedMedia": [
        "audits[layout-shifts].details.items[0].subItems.items[0].cause",
        "audits[layout-shifts].details.items[1].subItems.items[0].cause"
      ],
      "core/audits/long-tasks.js | title": [
        "audits[long-tasks].title"
      ],
      "core/audits/long-tasks.js | description": [
        "audits[long-tasks].description"
      ],
      "core/audits/long-tasks.js | displayValue": [
        {
          "values": {
            "itemCount": 4
          },
          "path": "audits[long-tasks].displayValue"
        }
      ],
      "core/audits/non-composited-animations.js | title": [
        "audits[non-composited-animations].title"
      ],
      "core/audits/non-composited-animations.js | description": [
        "audits[non-composited-animations].description"
      ],
      "core/audits/unsized-images.js | failureTitle": [
        "audits[unsized-images].title"
      ],
      "core/audits/unsized-images.js | description": [
        "audits[unsized-images].description"
      ],
      "core/audits/valid-source-maps.js | title": [
        "audits[valid-source-maps].title"
      ],
      "core/audits/valid-source-maps.js | description": [
        "audits[valid-source-maps].description"
      ],
      "core/audits/valid-source-maps.js | columnMapURL": [
        "audits[valid-source-maps].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | title": [
        "audits[csp-xss].title"
      ],
      "core/audits/csp-xss.js | description": [
        "audits[csp-xss].description"
      ],
      "core/audits/csp-xss.js | columnDirective": [
        "audits[csp-xss].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | columnSeverity": [
        "audits[csp-xss].details.headings[2].label"
      ],
      "core/lib/csp-evaluator.js | missingScriptSrc": [
        "audits[csp-xss].details.items[0].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityHigh": [
        "audits[csp-xss].details.items[0].severity",
        "audits[csp-xss].details.items[1].severity",
        "audits[has-hsts].details.items[0].severity",
        "audits[origin-isolation].details.items[0].severity",
        "audits[clickjacking-mitigation].details.items[0].severity",
        "audits[trusted-types-xss].details.items[0].severity"
      ],
      "core/lib/csp-evaluator.js | missingObjectSrc": [
        "audits[csp-xss].details.items[1].description"
      ],
      "core/audits/has-hsts.js | title": [
        "audits[has-hsts].title"
      ],
      "core/audits/has-hsts.js | description": [
        "audits[has-hsts].description"
      ],
      "core/audits/has-hsts.js | columnDirective": [
        "audits[has-hsts].details.headings[1].label"
      ],
      "core/audits/has-hsts.js | columnSeverity": [
        "audits[has-hsts].details.headings[2].label"
      ],
      "core/audits/has-hsts.js | lowMaxAge": [
        "audits[has-hsts].details.items[0].description"
      ],
      "core/audits/has-hsts.js | noSubdomain": [
        "audits[has-hsts].details.items[1].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityMedium": [
        "audits[has-hsts].details.items[1].severity",
        "audits[has-hsts].details.items[2].severity"
      ],
      "core/audits/has-hsts.js | noPreload": [
        "audits[has-hsts].details.items[2].description"
      ],
      "core/audits/origin-isolation.js | title": [
        "audits[origin-isolation].title"
      ],
      "core/audits/origin-isolation.js | description": [
        "audits[origin-isolation].description"
      ],
      "core/audits/origin-isolation.js | columnDirective": [
        "audits[origin-isolation].details.headings[1].label"
      ],
      "core/audits/origin-isolation.js | columnSeverity": [
        "audits[origin-isolation].details.headings[2].label"
      ],
      "core/audits/origin-isolation.js | noCoop": [
        "audits[origin-isolation].details.items[0].description"
      ],
      "core/audits/clickjacking-mitigation.js | title": [
        "audits[clickjacking-mitigation].title"
      ],
      "core/audits/clickjacking-mitigation.js | description": [
        "audits[clickjacking-mitigation].description"
      ],
      "core/audits/clickjacking-mitigation.js | columnSeverity": [
        "audits[clickjacking-mitigation].details.headings[1].label"
      ],
      "core/audits/clickjacking-mitigation.js | noClickjackingMitigation": [
        "audits[clickjacking-mitigation].details.items[0].description"
      ],
      "core/audits/trusted-types-xss.js | title": [
        "audits[trusted-types-xss].title"
      ],
      "core/audits/trusted-types-xss.js | description": [
        "audits[trusted-types-xss].description"
      ],
      "core/audits/trusted-types-xss.js | columnSeverity": [
        "audits[trusted-types-xss].details.headings[1].label"
      ],
      "core/audits/trusted-types-xss.js | noTrustedTypesToMitigateXss": [
        "audits[trusted-types-xss].details.items[0].description"
      ],
      "core/audits/accessibility/accesskeys.js | title": [
        "audits.accesskeys.title"
      ],
      "core/audits/accessibility/accesskeys.js | description": [
        "audits.accesskeys.description"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | title": [
        "audits[aria-allowed-attr].title"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | description": [
        "audits[aria-allowed-attr].description"
      ],
      "core/lib/i18n/i18n.js | columnFailingElem": [
        "audits[aria-allowed-attr].details.headings[0].label",
        "audits[aria-conditional-attr].details.headings[0].label",
        "audits[aria-hidden-body].details.headings[0].label",
        "audits[aria-prohibited-attr].details.headings[0].label",
        "audits[aria-valid-attr-value].details.headings[0].label",
        "audits[aria-valid-attr].details.headings[0].label",
        "audits[color-contrast].details.headings[0].label",
        "audits[document-title].details.headings[0].label",
        "audits[heading-order].details.headings[0].label",
        "audits[html-has-lang].details.headings[0].label",
        "audits[html-lang-valid].details.headings[0].label",
        "audits[image-alt].details.headings[0].label",
        "audits[image-redundant-alt].details.headings[0].label",
        "audits.label.details.headings[0].label",
        "audits[landmark-one-main].details.headings[0].label",
        "audits[link-name].details.headings[0].label",
        "audits.list.details.headings[0].label",
        "audits.listitem.details.headings[0].label",
        "audits[meta-viewport].details.headings[0].label",
        "audits[skip-link].details.headings[0].label",
        "audits[target-size].details.headings[0].label",
        "audits[paste-preventing-inputs].details.headings[0].label"
      ],
      "core/audits/accessibility/aria-allowed-role.js | title": [
        "audits[aria-allowed-role].title"
      ],
      "core/audits/accessibility/aria-allowed-role.js | description": [
        "audits[aria-allowed-role].description"
      ],
      "core/audits/accessibility/aria-command-name.js | title": [
        "audits[aria-command-name].title"
      ],
      "core/audits/accessibility/aria-command-name.js | description": [
        "audits[aria-command-name].description"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | title": [
        "audits[aria-conditional-attr].title"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | description": [
        "audits[aria-conditional-attr].description"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | title": [
        "audits[aria-deprecated-role].title"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | description": [
        "audits[aria-deprecated-role].description"
      ],
      "core/audits/accessibility/aria-dialog-name.js | title": [
        "audits[aria-dialog-name].title"
      ],
      "core/audits/accessibility/aria-dialog-name.js | description": [
        "audits[aria-dialog-name].description"
      ],
      "core/audits/accessibility/aria-hidden-body.js | title": [
        "audits[aria-hidden-body].title"
      ],
      "core/audits/accessibility/aria-hidden-body.js | description": [
        "audits[aria-hidden-body].description"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | title": [
        "audits[aria-hidden-focus].title"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | description": [
        "audits[aria-hidden-focus].description"
      ],
      "core/audits/accessibility/aria-input-field-name.js | title": [
        "audits[aria-input-field-name].title"
      ],
      "core/audits/accessibility/aria-input-field-name.js | description": [
        "audits[aria-input-field-name].description"
      ],
      "core/audits/accessibility/aria-meter-name.js | title": [
        "audits[aria-meter-name].title"
      ],
      "core/audits/accessibility/aria-meter-name.js | description": [
        "audits[aria-meter-name].description"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | title": [
        "audits[aria-progressbar-name].title"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | description": [
        "audits[aria-progressbar-name].description"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | title": [
        "audits[aria-prohibited-attr].title"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | description": [
        "audits[aria-prohibited-attr].description"
      ],
      "core/audits/accessibility/aria-required-attr.js | title": [
        "audits[aria-required-attr].title"
      ],
      "core/audits/accessibility/aria-required-attr.js | description": [
        "audits[aria-required-attr].description"
      ],
      "core/audits/accessibility/aria-required-children.js | title": [
        "audits[aria-required-children].title"
      ],
      "core/audits/accessibility/aria-required-children.js | description": [
        "audits[aria-required-children].description"
      ],
      "core/audits/accessibility/aria-required-parent.js | title": [
        "audits[aria-required-parent].title"
      ],
      "core/audits/accessibility/aria-required-parent.js | description": [
        "audits[aria-required-parent].description"
      ],
      "core/audits/accessibility/aria-roles.js | title": [
        "audits[aria-roles].title"
      ],
      "core/audits/accessibility/aria-roles.js | description": [
        "audits[aria-roles].description"
      ],
      "core/audits/accessibility/aria-text.js | title": [
        "audits[aria-text].title"
      ],
      "core/audits/accessibility/aria-text.js | description": [
        "audits[aria-text].description"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | title": [
        "audits[aria-toggle-field-name].title"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | description": [
        "audits[aria-toggle-field-name].description"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | title": [
        "audits[aria-tooltip-name].title"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | description": [
        "audits[aria-tooltip-name].description"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | title": [
        "audits[aria-treeitem-name].title"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | description": [
        "audits[aria-treeitem-name].description"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | title": [
        "audits[aria-valid-attr-value].title"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | description": [
        "audits[aria-valid-attr-value].description"
      ],
      "core/audits/accessibility/aria-valid-attr.js | title": [
        "audits[aria-valid-attr].title"
      ],
      "core/audits/accessibility/aria-valid-attr.js | description": [
        "audits[aria-valid-attr].description"
      ],
      "core/audits/accessibility/button-name.js | title": [
        "audits[button-name].title"
      ],
      "core/audits/accessibility/button-name.js | description": [
        "audits[button-name].description"
      ],
      "core/audits/accessibility/bypass.js | title": [
        "audits.bypass.title"
      ],
      "core/audits/accessibility/bypass.js | description": [
        "audits.bypass.description"
      ],
      "core/audits/accessibility/color-contrast.js | title": [
        "audits[color-contrast].title"
      ],
      "core/audits/accessibility/color-contrast.js | description": [
        "audits[color-contrast].description"
      ],
      "core/audits/accessibility/definition-list.js | title": [
        "audits[definition-list].title"
      ],
      "core/audits/accessibility/definition-list.js | description": [
        "audits[definition-list].description"
      ],
      "core/audits/accessibility/dlitem.js | title": [
        "audits.dlitem.title"
      ],
      "core/audits/accessibility/dlitem.js | description": [
        "audits.dlitem.description"
      ],
      "core/audits/accessibility/document-title.js | title": [
        "audits[document-title].title"
      ],
      "core/audits/accessibility/document-title.js | description": [
        "audits[document-title].description"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | title": [
        "audits[duplicate-id-aria].title"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | description": [
        "audits[duplicate-id-aria].description"
      ],
      "core/audits/accessibility/empty-heading.js | title": [
        "audits[empty-heading].title"
      ],
      "core/audits/accessibility/empty-heading.js | description": [
        "audits[empty-heading].description"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | title": [
        "audits[form-field-multiple-labels].title"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | description": [
        "audits[form-field-multiple-labels].description"
      ],
      "core/audits/accessibility/frame-title.js | title": [
        "audits[frame-title].title"
      ],
      "core/audits/accessibility/frame-title.js | description": [
        "audits[frame-title].description"
      ],
      "core/audits/accessibility/heading-order.js | failureTitle": [
        "audits[heading-order].title"
      ],
      "core/audits/accessibility/heading-order.js | description": [
        "audits[heading-order].description"
      ],
      "core/audits/accessibility/html-has-lang.js | title": [
        "audits[html-has-lang].title"
      ],
      "core/audits/accessibility/html-has-lang.js | description": [
        "audits[html-has-lang].description"
      ],
      "core/audits/accessibility/html-lang-valid.js | title": [
        "audits[html-lang-valid].title"
      ],
      "core/audits/accessibility/html-lang-valid.js | description": [
        "audits[html-lang-valid].description"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | title": [
        "audits[html-xml-lang-mismatch].title"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | description": [
        "audits[html-xml-lang-mismatch].description"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | title": [
        "audits[identical-links-same-purpose].title"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | description": [
        "audits[identical-links-same-purpose].description"
      ],
      "core/audits/accessibility/image-alt.js | failureTitle": [
        "audits[image-alt].title"
      ],
      "core/audits/accessibility/image-alt.js | description": [
        "audits[image-alt].description"
      ],
      "core/audits/accessibility/image-redundant-alt.js | title": [
        "audits[image-redundant-alt].title"
      ],
      "core/audits/accessibility/image-redundant-alt.js | description": [
        "audits[image-redundant-alt].description"
      ],
      "core/audits/accessibility/input-button-name.js | title": [
        "audits[input-button-name].title"
      ],
      "core/audits/accessibility/input-button-name.js | description": [
        "audits[input-button-name].description"
      ],
      "core/audits/accessibility/input-image-alt.js | title": [
        "audits[input-image-alt].title"
      ],
      "core/audits/accessibility/input-image-alt.js | description": [
        "audits[input-image-alt].description"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | title": [
        "audits[label-content-name-mismatch].title"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | description": [
        "audits[label-content-name-mismatch].description"
      ],
      "core/audits/accessibility/label.js | title": [
        "audits.label.title"
      ],
      "core/audits/accessibility/label.js | description": [
        "audits.label.description"
      ],
      "core/audits/accessibility/landmark-one-main.js | failureTitle": [
        "audits[landmark-one-main].title"
      ],
      "core/audits/accessibility/landmark-one-main.js | description": [
        "audits[landmark-one-main].description"
      ],
      "core/audits/accessibility/link-name.js | failureTitle": [
        "audits[link-name].title"
      ],
      "core/audits/accessibility/link-name.js | description": [
        "audits[link-name].description"
      ],
      "core/audits/accessibility/link-in-text-block.js | title": [
        "audits[link-in-text-block].title"
      ],
      "core/audits/accessibility/link-in-text-block.js | description": [
        "audits[link-in-text-block].description"
      ],
      "core/audits/accessibility/list.js | title": [
        "audits.list.title"
      ],
      "core/audits/accessibility/list.js | description": [
        "audits.list.description"
      ],
      "core/audits/accessibility/listitem.js | title": [
        "audits.listitem.title"
      ],
      "core/audits/accessibility/listitem.js | description": [
        "audits.listitem.description"
      ],
      "core/audits/accessibility/meta-refresh.js | title": [
        "audits[meta-refresh].title"
      ],
      "core/audits/accessibility/meta-refresh.js | description": [
        "audits[meta-refresh].description"
      ],
      "core/audits/accessibility/meta-viewport.js | title": [
        "audits[meta-viewport].title"
      ],
      "core/audits/accessibility/meta-viewport.js | description": [
        "audits[meta-viewport].description"
      ],
      "core/audits/accessibility/object-alt.js | title": [
        "audits[object-alt].title"
      ],
      "core/audits/accessibility/object-alt.js | description": [
        "audits[object-alt].description"
      ],
      "core/audits/accessibility/select-name.js | title": [
        "audits[select-name].title"
      ],
      "core/audits/accessibility/select-name.js | description": [
        "audits[select-name].description"
      ],
      "core/audits/accessibility/skip-link.js | failureTitle": [
        "audits[skip-link].title"
      ],
      "core/audits/accessibility/skip-link.js | description": [
        "audits[skip-link].description"
      ],
      "core/audits/accessibility/tabindex.js | title": [
        "audits.tabindex.title"
      ],
      "core/audits/accessibility/tabindex.js | description": [
        "audits.tabindex.description"
      ],
      "core/audits/accessibility/table-duplicate-name.js | title": [
        "audits[table-duplicate-name].title"
      ],
      "core/audits/accessibility/table-duplicate-name.js | description": [
        "audits[table-duplicate-name].description"
      ],
      "core/audits/accessibility/table-fake-caption.js | title": [
        "audits[table-fake-caption].title"
      ],
      "core/audits/accessibility/table-fake-caption.js | description": [
        "audits[table-fake-caption].description"
      ],
      "core/audits/accessibility/target-size.js | title": [
        "audits[target-size].title"
      ],
      "core/audits/accessibility/target-size.js | description": [
        "audits[target-size].description"
      ],
      "core/audits/accessibility/td-has-header.js | title": [
        "audits[td-has-header].title"
      ],
      "core/audits/accessibility/td-has-header.js | description": [
        "audits[td-has-header].description"
      ],
      "core/audits/accessibility/td-headers-attr.js | title": [
        "audits[td-headers-attr].title"
      ],
      "core/audits/accessibility/td-headers-attr.js | description": [
        "audits[td-headers-attr].description"
      ],
      "core/audits/accessibility/th-has-data-cells.js | title": [
        "audits[th-has-data-cells].title"
      ],
      "core/audits/accessibility/th-has-data-cells.js | description": [
        "audits[th-has-data-cells].description"
      ],
      "core/audits/accessibility/valid-lang.js | title": [
        "audits[valid-lang].title"
      ],
      "core/audits/accessibility/valid-lang.js | description": [
        "audits[valid-lang].description"
      ],
      "core/audits/accessibility/video-caption.js | title": [
        "audits[video-caption].title"
      ],
      "core/audits/accessibility/video-caption.js | description": [
        "audits[video-caption].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | failureTitle": [
        "audits[total-byte-weight].title"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | description": [
        "audits[total-byte-weight].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | displayValue": [
        {
          "values": {
            "totalBytes": 5584583
          },
          "path": "audits[total-byte-weight].displayValue"
        }
      ],
      "core/audits/byte-efficiency/unminified-css.js | title": [
        "audits[unminified-css].title"
      ],
      "core/audits/byte-efficiency/unminified-css.js | description": [
        "audits[unminified-css].description"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | title": [
        "audits[unminified-javascript].title"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | description": [
        "audits[unminified-javascript].description"
      ],
      "core/lib/i18n/i18n.js | displayValueByteSavings": [
        {
          "values": {
            "wastedBytes": 290619
          },
          "path": "audits[unminified-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 76074
          },
          "path": "audits[unused-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 174043.05
          },
          "path": "audits[cache-insight].displayValue"
        },
        {
          "values": {
            "wastedBytes": 4799427
          },
          "path": "audits[image-delivery-insight].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnWastedBytes": [
        "audits[unminified-javascript].details.headings[2].label",
        "audits[unused-javascript].details.headings[2].label",
        "audits[font-display-insight].details.headings[1].label",
        "audits[image-delivery-insight].details.headings[3].label"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | title": [
        "audits[unused-css-rules].title"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | description": [
        "audits[unused-css-rules].description"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | title": [
        "audits[unused-javascript].title"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | description": [
        "audits[unused-javascript].description"
      ],
      "core/audits/dobetterweb/doctype.js | title": [
        "audits.doctype.title"
      ],
      "core/audits/dobetterweb/doctype.js | description": [
        "audits.doctype.description"
      ],
      "core/audits/dobetterweb/charset.js | title": [
        "audits.charset.title"
      ],
      "core/audits/dobetterweb/charset.js | description": [
        "audits.charset.description"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | title": [
        "audits[geolocation-on-start].title"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | description": [
        "audits[geolocation-on-start].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | title": [
        "audits[inspector-issues].title"
      ],
      "core/audits/dobetterweb/inspector-issues.js | description": [
        "audits[inspector-issues].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | columnIssueType": [
        "audits[inspector-issues].details.headings[0].label"
      ],
      "core/audits/dobetterweb/js-libraries.js | title": [
        "audits[js-libraries].title"
      ],
      "core/audits/dobetterweb/js-libraries.js | description": [
        "audits[js-libraries].description"
      ],
      "core/audits/dobetterweb/js-libraries.js | columnVersion": [
        "audits[js-libraries].details.headings[1].label"
      ],
      "core/audits/dobetterweb/notification-on-start.js | title": [
        "audits[notification-on-start].title"
      ],
      "core/audits/dobetterweb/notification-on-start.js | description": [
        "audits[notification-on-start].description"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | title": [
        "audits[paste-preventing-inputs].title"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | description": [
        "audits[paste-preventing-inputs].description"
      ],
      "core/audits/seo/meta-description.js | failureTitle": [
        "audits[meta-description].title"
      ],
      "core/audits/seo/meta-description.js | description": [
        "audits[meta-description].description"
      ],
      "core/audits/seo/meta-description.js | explanation": [
        "audits[meta-description].explanation"
      ],
      "core/audits/seo/http-status-code.js | title": [
        "audits[http-status-code].title"
      ],
      "core/audits/seo/http-status-code.js | description": [
        "audits[http-status-code].description"
      ],
      "core/audits/seo/link-text.js | title": [
        "audits[link-text].title"
      ],
      "core/audits/seo/link-text.js | description": [
        "audits[link-text].description"
      ],
      "core/audits/seo/crawlable-anchors.js | failureTitle": [
        "audits[crawlable-anchors].title"
      ],
      "core/audits/seo/crawlable-anchors.js | description": [
        "audits[crawlable-anchors].description"
      ],
      "core/audits/seo/crawlable-anchors.js | columnFailingLink": [
        "audits[crawlable-anchors].details.headings[0].label"
      ],
      "core/audits/seo/is-crawlable.js | failureTitle": [
        "audits[is-crawlable].title"
      ],
      "core/audits/seo/is-crawlable.js | description": [
        "audits[is-crawlable].description"
      ],
      "core/audits/seo/robots-txt.js | title": [
        "audits[robots-txt].title"
      ],
      "core/audits/seo/robots-txt.js | description": [
        "audits[robots-txt].description"
      ],
      "core/audits/seo/hreflang.js | title": [
        "audits.hreflang.title"
      ],
      "core/audits/seo/hreflang.js | description": [
        "audits.hreflang.description"
      ],
      "core/audits/seo/canonical.js | title": [
        "audits.canonical.title"
      ],
      "core/audits/seo/canonical.js | description": [
        "audits.canonical.description"
      ],
      "core/audits/seo/manual/structured-data.js | title": [
        "audits[structured-data].title"
      ],
      "core/audits/seo/manual/structured-data.js | description": [
        "audits[structured-data].description"
      ],
      "core/audits/bf-cache.js | title": [
        "audits[bf-cache].title"
      ],
      "core/audits/bf-cache.js | description": [
        "audits[bf-cache].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | title": [
        "audits[cache-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | description": [
        "audits[cache-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | requestColumn": [
        "audits[cache-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnCacheTTL": [
        "audits[cache-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | title": [
        "audits[cls-culprits-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": [
        "audits[cls-culprits-insight].description"
      ],
      "core/audits/insights/cls-culprits-insight.js | columnScore": [
        "audits[cls-culprits-insight].details.items[0].headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | unsizedImage": [
        "audits[cls-culprits-insight].details.items[0].items[1].subItems.items[0].cause",
        "audits[cls-culprits-insight].details.items[0].items[2].subItems.items[0].cause"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | title": [
        "audits[document-latency-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | description": [
        "audits[document-latency-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | failedRedirects": [
        {
          "values": {
            "PH1": 2,
            "PH2": "114 ms"
          },
          "path": "audits[document-latency-insight].details.items.noRedirects.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingServerResponseTime": [
        {
          "values": {
            "PH1": "29 ms"
          },
          "path": "audits[document-latency-insight].details.items.serverResponseIsFast.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingTextCompression": [
        "audits[document-latency-insight].details.items.usesCompression.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | title": [
        "audits[dom-size-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | description": [
        "audits[dom-size-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | statistic": [
        "audits[dom-size-insight].details.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | value": [
        "audits[dom-size-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | totalElements": [
        "audits[dom-size-insight].details.items[0].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxDOMDepth": [
        "audits[dom-size-insight].details.items[1].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxChildren": [
        "audits[dom-size-insight].details.items[2].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | title": [
        "audits[duplicated-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | description": [
        "audits[duplicated-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | title": [
        "audits[font-display-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | description": [
        "audits[font-display-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | title": [
        "audits[forced-reflow-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | description": [
        "audits[forced-reflow-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | totalReflowTime": [
        "audits[forced-reflow-insight].details.items[0].headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | title": [
        "audits[image-delivery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | description": [
        "audits[image-delivery-insight].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceSize": [
        "audits[image-delivery-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useModernFormat": [
        "audits[image-delivery-insight].details.items[0].subItems.items[0].reason"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useResponsiveSize": [
        {
          "values": {
            "PH1": "2219x1479",
            "PH2": "183x122"
          },
          "path": "audits[image-delivery-insight].details.items[0].subItems.items[1].reason"
        },
        {
          "values": {
            "PH1": "3899x2193",
            "PH2": "721x406"
          },
          "path": "audits[image-delivery-insight].details.items[1].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "217x122"
          },
          "path": "audits[image-delivery-insight].details.items[2].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "217x122"
          },
          "path": "audits[image-delivery-insight].details.items[3].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "217x122"
          },
          "path": "audits[image-delivery-insight].details.items[4].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "217x122"
          },
          "path": "audits[image-delivery-insight].details.items[5].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x217",
            "PH2": "217x123"
          },
          "path": "audits[image-delivery-insight].details.items[6].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "217x122"
          },
          "path": "audits[image-delivery-insight].details.items[7].subItems.items[0].reason"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | title": [
        "audits[inp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | description": [
        "audits[inp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | title": [
        "audits[lcp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | description": [
        "audits[lcp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | subpart": [
        "audits[lcp-breakdown-insight].details.items[0].headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | timeToFirstByte": [
        "audits[lcp-breakdown-insight].details.items[0].items[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDuration": [
        "audits[lcp-breakdown-insight].details.items[0].items[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | elementRenderDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[3].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": [
        "audits[lcp-discovery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": [
        "audits[lcp-discovery-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | fetchPriorityShouldBeApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.priorityHinted.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | requestDiscoverable": [
        "audits[lcp-discovery-insight].details.items[0].items.requestDiscoverable.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | lazyLoadNotApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.eagerlyLoaded.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | title": [
        "audits[legacy-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | description": [
        "audits[legacy-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | title": [
        "audits[modern-http-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | description": [
        "audits[modern-http-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | protocol": [
        "audits[modern-http-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | title": [
        "audits[network-dependency-tree-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | description": [
        "audits[network-dependency-tree-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableTitle": [
        "audits[network-dependency-tree-insight].details.items[1].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableDescription": [
        "audits[network-dependency-tree-insight].details.items[1].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnOrigin": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnSource": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableTitle": [
        "audits[network-dependency-tree-insight].details.items[2].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableDescription": [
        "audits[network-dependency-tree-insight].details.items[2].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | noPreconnectCandidates": [
        "audits[network-dependency-tree-insight].details.items[2].value.value"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | title": [
        "audits[render-blocking-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | description": [
        "audits[render-blocking-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | title": [
        "audits[third-parties-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | description": [
        "audits[third-parties-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | title": [
        "audits[viewport-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | description": [
        "audits[viewport-insight].description"
      ],
      "core/config/default-config.js | performanceCategoryTitle": [
        "categories.performance.title"
      ],
      "core/config/default-config.js | a11yCategoryTitle": [
        "categories.accessibility.title"
      ],
      "core/config/default-config.js | a11yCategoryDescription": [
        "categories.accessibility.description"
      ],
      "core/config/default-config.js | a11yCategoryManualDescription": [
        "categories.accessibility.manualDescription"
      ],
      "core/config/default-config.js | bestPracticesCategoryTitle": [
        "categories[best-practices].title"
      ],
      "core/config/default-config.js | seoCategoryTitle": [
        "categories.seo.title"
      ],
      "core/config/default-config.js | seoCategoryDescription": [
        "categories.seo.description"
      ],
      "core/config/default-config.js | seoCategoryManualDescription": [
        "categories.seo.manualDescription"
      ],
      "core/config/default-config.js | metricGroupTitle": [
        "categoryGroups.metrics.title"
      ],
      "core/config/default-config.js | insightsGroupTitle": [
        "categoryGroups.insights.title"
      ],
      "core/config/default-config.js | insightsGroupDescription": [
        "categoryGroups.insights.description"
      ],
      "core/config/default-config.js | diagnosticsGroupTitle": [
        "categoryGroups.diagnostics.title"
      ],
      "core/config/default-config.js | diagnosticsGroupDescription": [
        "categoryGroups.diagnostics.description"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupTitle": [
        "categoryGroups[a11y-best-practices].title"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupDescription": [
        "categoryGroups[a11y-best-practices].description"
      ],
      "core/config/default-config.js | a11yColorContrastGroupTitle": [
        "categoryGroups[a11y-color-contrast].title"
      ],
      "core/config/default-config.js | a11yColorContrastGroupDescription": [
        "categoryGroups[a11y-color-contrast].description"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupTitle": [
        "categoryGroups[a11y-names-labels].title"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupDescription": [
        "categoryGroups[a11y-names-labels].description"
      ],
      "core/config/default-config.js | a11yNavigationGroupTitle": [
        "categoryGroups[a11y-navigation].title"
      ],
      "core/config/default-config.js | a11yNavigationGroupDescription": [
        "categoryGroups[a11y-navigation].description"
      ],
      "core/config/default-config.js | a11yAriaGroupTitle": [
        "categoryGroups[a11y-aria].title"
      ],
      "core/config/default-config.js | a11yAriaGroupDescription": [
        "categoryGroups[a11y-aria].description"
      ],
      "core/config/default-config.js | a11yLanguageGroupTitle": [
        "categoryGroups[a11y-language].title"
      ],
      "core/config/default-config.js | a11yLanguageGroupDescription": [
        "categoryGroups[a11y-language].description"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupTitle": [
        "categoryGroups[a11y-audio-video].title"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupDescription": [
        "categoryGroups[a11y-audio-video].description"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupTitle": [
        "categoryGroups[a11y-tables-lists].title"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupDescription": [
        "categoryGroups[a11y-tables-lists].description"
      ],
      "core/config/default-config.js | seoMobileGroupTitle": [
        "categoryGroups[seo-mobile].title"
      ],
      "core/config/default-config.js | seoMobileGroupDescription": [
        "categoryGroups[seo-mobile].description"
      ],
      "core/config/default-config.js | seoContentGroupTitle": [
        "categoryGroups[seo-content].title"
      ],
      "core/config/default-config.js | seoContentGroupDescription": [
        "categoryGroups[seo-content].description"
      ],
      "core/config/default-config.js | seoCrawlingGroupTitle": [
        "categoryGroups[seo-crawl].title"
      ],
      "core/config/default-config.js | seoCrawlingGroupDescription": [
        "categoryGroups[seo-crawl].description"
      ],
      "core/config/default-config.js | bestPracticesTrustSafetyGroupTitle": [
        "categoryGroups[best-practices-trust-safety].title"
      ],
      "core/config/default-config.js | bestPracticesUXGroupTitle": [
        "categoryGroups[best-practices-ux].title"
      ],
      "core/config/default-config.js | bestPracticesBrowserCompatGroupTitle": [
        "categoryGroups[best-practices-browser-compat].title"
      ],
      "core/config/default-config.js | bestPracticesGeneralGroupTitle": [
        "categoryGroups[best-practices-general].title"
      ]
    }
  }
}
