Card Layout Engine (React)

This example demonstrates the DataViews Card Layout Engine.

This example uses React.

<p>This example demonstrates the DataViews Card Layout Engine. The card layout engine places each row in a defined block, or card. Each card is formatted in a row template and placed in a cell in a layout grid. This example shows two forms of card layout: a typical grid and a list. Use the buttons on the top right to switch between the two.</p> <p>In this sample, the following code is used to initialize the object:</p> <pre><code class="hljs js language-js">dataView = <span class="hljs-keyword">new</span> GC.DataViews.DataView( <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'grid'</span>), data, columns, <span class="hljs-keyword">new</span> GC.DataViews.CardLayout({ <span class="hljs-attr">cardHeight</span>: <span class="hljs-number">250</span>, <span class="hljs-attr">cardWidth</span>: <span class="hljs-number">290</span>, <span class="hljs-attr">rowTemplate</span>: <span class="hljs-string">'#filmDisplay'</span>, <span class="hljs-attr">direction</span>: <span class="hljs-string">'horizontal'</span>, }) ); </code></pre> <p>Note the following:</p> <ul> <li>A reference <strong>cardlayout.js</strong> is used.</li> <li>The key component is the <strong>CardLayout</strong> constructor. It loads the card layout engine.</li> <li>The <strong>rowTemplate</strong> option names the <strong><code>&lt;template&gt;</code></strong> element that lays out the cards.</li> <li>The <strong>direction</strong> option determines how the cards are arranged.</li> </ul>
<!DOCTYPE html> <html lang="en"> <head> <base href="/dataviewsjs/demos/en/sample/DataViews/Card/CardLayoutEngine/react/" /> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="description" content="This example demonstrates the DataViews Card Layout Engine." /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Card Layout Engine | Data Views | GrapeCity DataViewsJS React Demos</title> <link href="/dataviewsjs/demos/node_modules/normalize.css/normalize.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/css/base.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/css/bootstrap-snippet.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.core.min.css" rel="stylesheet" type="text/css" /> <link href="/dataviewsjs/demos/static/dataviews/gc.dataviews.cardlayout.min.css" rel="stylesheet" type="text/css" /> <link href="styles.css" rel="stylesheet" type="text/css" /> <!-- Google Tag Manager --> <script> (function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-WT462SJ'); </script> <!-- End Google Tag Manager --> <script src="/dataviewsjs/demos/static/js/app-polyfills.min.js" type="text/javascript"></script> <script type="text/javascript"> window.process = { env: { NODE_ENV: 'production', USE_NPM: false, USE_CDN: false, SITE_ROOT: '/dataviewsjs/demos', FRAMEWORK: 'react', DVJS_LICENSE_KEY: 'E674186349827489#B0LYWQMpFdP3WSHlVaGdjTFtyLCxUQjdFV5MHey9kTyBnY0pkY6tWcr34caJjSPlEVlR6QpJnZEdjSj9kbkRUZChzMsRFS99mN4ZGO72yK7FXe5tmN59Eai5UM7dEVvgUeYN5MqdUTIpWTpBnSTJEWv24YwoFWr9mWEl6UNVmVMxUd5ckUQdlUNV4MDhENaV5KNNWbJtiSwFUYCVUax4GUuBjZDN7T5dWdDpFNyJjSxJkes3mUt94QrdnMK5mZORGeFZ4QyFTMmdWOWdlMmJ4ZJhTS5MmZatyZ7k5c0JXVB3mWVNke7AFRiojITJCLikjNBNjNzcjI0ICSiwSN8AjN9YjMwUTM0IicfJye35XX3JSWUVVOiojIDJCLiEjdgMlSzdXZpZVY4FGRiojIOJyebpjIkJHUiwiI9MDMykDMggDM8ATOxAjMiojI4J7QiwiIt36YukHdpNWZwFmcn9iKiojIz5GRiwiIj9WSgkHdpNUZwFmcHJiOiEmTDJCLlVnc4pjIsZXRiwiI9gDN7IDO9QzM6gTM4cjNiojIklkI1pjIEJCLi4TPn3UZuJ7cPZTW5hUMtN7MJN6aQFnT5gmd9FEZ4EETlFmW63kU8IGdiRGTJZle5UDbZJHTR34T0JzZoZmbalXQwNmM8EndEFEdSVlMiVnckFmQUJTOahmc7AzRHhlU4I4Vs3kN6lHaHR4LuhWULNIe', SJS_LICENSE_KEY: '*.grapecity.com,E613631884219496#B0qRgJHWSJ7NyBlc8BjNMRHW7g7YldTZXFTQuFnW4hVOCplVSlVV09ERlhEZuVTVKlTazE4Q6VGSw2CdWZUWSVmbjVXbrxmWFVWR8ZzQro7U84WMGdlbuVHb73kS5kjUTN4NvFVdLdXWVR4Nox6Z7UUSysEcXJEMsN6bDN4TxMDVwVmWBRzKxhkTzAXTaJmdD3CRFJTd8R4R6M5RklWa6oUaLlXMwR4R8ZUdtRWVxUUaQh6VXNDdEhlZ7FHR6QXTPJTVvkWcyZnbSdHRtZHcYF6TKN4axYGcZNjTDF7TvFTTr24VqZjVHVjcLd7QkRmdNxkI0IyUiwiI5gDOEF4QGVjI0ICSiwiMzkTO9kTOyMTM0IicfJye35XX3JSSGljQiojIDJCLiITMuYHITpEIkFWZyB7UiojIOJyebpjIkJHUiwiI4MDMyEDMgkDM8ATOxAjMiojI4J7QiwiIt36YukHdpNWZwFmcn9iKiojIz5GRiwiIj9WagkHdpNUZwFmcHJiOiEmTDJCLlVnc4pjIsZXRiwiI6kDN9EjM4gDOxMjNzEjNiojIklkIs4XZzxWYmpjIyNHZisnOiwmbBJye0ICRiwiI34TQ72kNBV6YXpXdGxGWxdHcol4MyUGUHJVbQVHRx44Sw84YxRkS4QnZadDNmhWWxV5QxFlTlZEbBJ5N8gUNQlDb7J6Kl36YHVnb4NGN92UMFdlNORFU8VDSaFlQSVlS4EHTrA5Ohh', }, }; </script> <script src="/dataviewsjs/demos/static/js/license.js" type="text/javascript"></script> <script src="/dataviewsjs/demos/node_modules/systemjs/dist/system.js" type="text/javascript"></script> <script src="systemjs.config.js" type="text/javascript"></script> </head> <body class="theme-default"> <!-- Google Tag Manager (noscript) --> <noscript ><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WT462SJ" height="0" width="0" style="display: none; visibility: hidden;" ></iframe ></noscript> <!-- End Google Tag Manager (noscript) --> <noscript>You need to enable JavaScript to run this app.</noscript> <template id="filmDisplay" style="display: none;"> <div class="film-container"> <div class="film-cover"> <div data-column="filmCover"></div> </div> <div class="film-content"> <div data-column="filmTitleLink"></div> <div data-column="filmCategory"></div> <div data-column="filmDescription"></div> </div> </div> </template> <template id="filmDisplayList" style="display: none;"> <div class="film-container"> <div class="film-cover film-cover-list"> <div data-column="filmCover"></div> </div> <div class="film-content film-content-list"> <div data-column="filmTitleLink"></div> <div data-column="filmCategory"></div> <div data-column="filmDescription"></div> </div> </div> </template> <div id="root"></div> <script type="text/javascript"> System.import('./app.js'); </script> </body> </html>
import React from 'react'; import ReactDOM from 'react-dom'; import DataView from '@grapecity/dataviews.react'; import CardLayout from '@grapecity/dataviews.cardlayout'; import { data } from './data'; const filmCoverPresenter = '<img src="{{=it.filmCover.posterUrl}}" alt="{{=it.filmCover.posterTitle}}">'; const filmCoverListPresenter = '<img src="{{=it.filmCover.posterUrl}}" alt="{{=it.filmCover.posterTitle}}" class="poster-list-resize">'; const filmCategoryPresenter = `<div> <span class="film-certification"><b>{{=it.filmCategory.certification}}</b></span> <span class="film-time">{{=it.filmCategory.time}} min - </span> <span class="film-genre">{{=it.filmCategory.genre}}</span> </div>`; const filmCategoryListPresenter = `<span class="film-genre">{{=it.filmCategory.genre}}</span> <div> <span class="film-time">{{=it.filmCategory.time}} min </span> <span class="film-certification"><b>{{=it.filmCategory.certification}}</b></span> </div>`; const filmTitleLinkPresenter = '<a href="{{=it.filmTitleLink.link}}" class="film-title-link"><b>{{=it.filmTitleLink.title}}</b></a>'; const filmDescriptionPresenter = '<div class="film-description">{{=it.filmDescription}}</div>'; const filmDescriptionListPresenter = '<div class="film-description-list">{{=it.filmDescription}}</div>'; export const cols = (asList) => [ { id: 'filmCover', dataField: 'filmCover', presenter: asList ? filmCoverListPresenter : filmCoverPresenter, }, { id: 'filmTitleLink', dataField: 'filmTitleLink', presenter: filmTitleLinkPresenter, }, { id: 'filmCategory', dataField: 'filmCategory', presenter: asList ? filmCategoryListPresenter : filmCategoryPresenter, }, { id: 'filmDescription', dataField: 'filmDescription', presenter: asList ? filmDescriptionListPresenter : filmDescriptionPresenter, }, ]; const { useState } = React; const cardLayoutOptions = { cardHeight: 250, cardWidth: 290, rowTemplate: '#filmDisplay', direction: 'horizontal', }; const listLayoutOptions = { cardHeight: 125, cardWidth: 650, rowTemplate: '#filmDisplayList', direction: 'horizontal', }; const layout = new CardLayout(cardLayoutOptions); const App = () => { const [view, setView] = useState('card'); const toggle = (view) => { setView(view); }; const options = view === 'list' ? listLayoutOptions : cardLayoutOptions; const btnClass = (target) => { const active = view === target ? ' active' : ''; return `btn btn-default display-button${active}`; }; return ( <div className="main-container"> <div className="sample-options"> <div className="btn-group"> <button className={btnClass('list')} onClick={() => toggle('list')}> <span className="demo-icon icon-th-list" /> </button> <button className={btnClass('card')} onClick={() => toggle('card')}> <span className="demo-icon icon-th" /> </button> </div> </div> <DataView id="grid" className="grid" data={data} cols={cols(view === 'list')} layout={layout} options={options} /> </div> ); }; ReactDOM.render(<App />, document.getElementById('root'));
// films dataset const SITE_ROOT = window.process.env.SITE_ROOT; export const data = [ { filmCover: { posterUrl: SITE_ROOT + '/images/True_Story.jpg', posterTitle: 'True Story (2015)', }, filmTitleLink: { title: 'True Story (2015)', link: '#', }, filmCategory: { certification: 'R', time: '100', genre: 'Drama | Mystery | Thriller', }, filmDescription: "The relationship between journalist Michael Finkel and Christian Longo, an FBI Most Wanted List murderer who for years lived outside the U.S. under Finkel's name.", filmDirector: 'Rupert Goold', filmActors: ' James Franco, Jonah Hill, Felicity Jones, Ethan Suplee', filmTimes: '2015', filmType: 'mystery', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Ex_Machina.jpg', posterTitle: 'Ex Machina (2015)', }, filmTitleLink: { title: 'Ex Machina (2015)', link: '#', }, filmCategory: { certification: 'R', time: '108', genre: 'Drama | Sci-Fi', }, filmDescription: 'A young programmer is selected to participate in a breakthrough experiment in artificial intelligence by evaluating the human qualities of a breathtaking female A.I.', filmDirector: 'Alex Garland', filmActors: 'Alicia Vikander, Domhnall Gleeson, Oscar Isaac, Corey Johnson', filmTimes: '2015', filmType: 'sci-fi', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Desert_Dancer.jpg', posterTitle: 'Desert Dancer (2014)', }, filmTitleLink: { title: 'Desert Dancer (2014)', link: '#', }, filmCategory: { certification: 'PG-13', time: '98', genre: 'Biography | Drama', }, filmDescription: "Afshin Ghaffarian risks everything to start a dance company amidst his home country of Iran's politically volatile climate and the nation's ban on dancing.", filmDirector: 'Richard Raymond', filmActors: 'Freida Pinto, Nazanin Boniadi, Tom Cullen, Reece Ritchie', filmTimes: '2014', filmType: 'biography', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Clouds_of_Sils_Maria.jpg', posterTitle: 'Clouds of Sils Maria (2014)', }, filmTitleLink: { title: 'Clouds of Sils Maria (2014)', link: '#', }, filmCategory: { certification: 'R', time: '104', genre: 'Drama', }, filmDescription: 'A veteran actress comes face-to-face with an uncomfortable reflection of herself when she agrees to take part in a revival of the play that launched her career 20 years earlier.', filmDirector: 'Olivier Assayas', filmActors: 'Juliette Binoche, Kristen Stewart, Chloë Grace Moretz, Lars Eidinger', filmTimes: '2014', filmType: 'documentary', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Kill_Me_Three_Times.jpg', posterTitle: 'Kill Me Three Times (2014)', }, filmTitleLink: { title: 'Kill Me Three Times (2014)', link: '#', }, filmCategory: { certification: 'R', time: '90', genre: 'Action | Thriller', }, filmDescription: 'Professional hit-man Charlie Wolfe finds himself in three tales of murder, blackmail and revenge after a botched contract assignment.', filmDirector: 'Kriv Stenders', filmActors: 'Simon Pegg, Teresa Palmer, Alice Braga, Luke Hemsworth', filmTimes: '2014', filmType: 'action', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Self_Less.jpg', posterTitle: 'Self/less (2015)', }, filmTitleLink: { title: 'Self/less (2015)', link: '#', }, filmCategory: { certification: 'PG-13', time: '120', genre: 'Drama | Sci-Fi | Thriller', }, filmDescription: 'An extremely wealthy man, dying from cancer, undergoes a radical medical procedure transferring his consciousness into the body of a healthy young man. But all is not as it seems.', filmDirector: 'Tarsem Singh', filmActors: 'Ryan Reynolds, Matthew Goode, Michelle Dockery', filmTimes: '2015', filmType: 'sci-fi|thriller', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Unfirended.jpg', posterTitle: 'Unfriended (2014)', }, filmTitleLink: { title: 'Unfriended (2014)', link: '#', }, filmCategory: { certification: 'R', time: '82', genre: 'Horror | Thriller', }, filmDescription: 'A group of online chat room friends find themselves haunted by a mysterious, supernatural force using the account of their dead friend.', filmDirector: 'Levan Gabriadze', filmActors: 'Cal Barnes, Matthew Bohrer, Courtney Halverson, Shelley Hennig', filmTimes: '2014', filmType: 'horror|thriller', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Paul_Blart_Mall_Cop_2.jpg', posterTitle: 'Paul Blart: Mall Cop 2 (2015)', }, filmTitleLink: { title: 'Paul Blart: Mall Cop 2 (2015)', link: '#', }, filmCategory: { certification: 'PG', time: '94', genre: 'Action | Comedy', }, filmDescription: 'After six years of keeping our malls safe, Paul Blart has earned a well-deserved vacation. Safety never takes a holiday and when duty calls.', filmDirector: 'Andy Fickman', filmActors: 'Kevin James, Raini Rodriguez, Eduardo Verástegui, Daniella Alonso', filmTimes: '2015', filmType: 'action', }, { filmCover: { posterUrl: SITE_ROOT + '/images/The_Longest_Ride.jpg', posterTitle: 'The Longest Ride (2015)', }, filmTitleLink: { title: 'The Longest Ride (2015)', link: '#', }, filmCategory: { certification: 'PG-13', time: '139', genre: 'Drama | Romance', }, filmDescription: "The lives of a young couple intertwine with a much older man as he reflects back on a lost love while he's trapped in an automobile crash.", filmDirector: 'George Tillman Jr.', filmActors: 'Scott Eastwood, Britt Robertson, Melissa Benoist, Jack Huston', filmTimes: '2015', filmType: 'romance', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Child_44.jpg', posterTitle: 'Child 44 (2015)', }, filmTitleLink: { title: 'Child 44 (2015)', link: '#', }, filmCategory: { certification: 'R', time: '137', genre: 'Drama | Thriller', }, filmDescription: 'A disgraced member of the military police investigates a series of nasty child murders during the Stalin-era Soviet Union.', filmDirector: 'Daniel Espinosa', filmActors: 'Tom Hardy, Gary Oldman, Joel Kinnaman, Noomi Rapace', filmTimes: '2015', filmType: 'thriller', }, { filmCover: { posterUrl: SITE_ROOT + '/images/Monkey_Kindom.jpg', posterTitle: 'Monkey Kingdom (2015)', }, filmTitleLink: { title: 'Monkey Kingdom (2015)', link: '#', }, filmCategory: { certification: 'G', time: '78', genre: 'Documentary', }, filmDescription: 'A nature documentary that follows a newborn monkey and its mother as they struggle to survive within the competitive social hierarchy of the Temple Troop.', filmDirector: 'Mark Linfield | Alastair Fothergill', filmActors: 'Tina Fey', filmTimes: '2015', filmType: 'documentary', }, ];
@charset "UTF-8"; @font-face { font-family: "spreadview-demo-icon"; src: url(data:application/font-woff;base64,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) format("woff"); } .demo-icon { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: inline-block; font-family: "spreadview-demo-icon"; font-style: normal; font-variant: normal; text-align: center; text-transform: none; } .icon-th:before { content: ""; } /* '' */ .icon-th-list:before { content: ""; } /* '' */ .main-container { display: flex; flex-direction: column; width: 100%; height: 100%; } .sample-options { flex-grow: 0; flex-shrink: 0; display: flex; background: #fbfbfb; box-sizing: border-box; overflow: hidden; padding: 10px; } .grid { width: 100%; height: calc(100% - 54px); flex-grow: 1; flex-shrink: 1; } .gc-grid { border: 0; } .film-container { background: #f1f1f1; border: solid 1px #e0e0e0; border-radius: 2px; margin-right: 1em; max-height: 210px; overflow: hidden; } .film-cover { display: inline-block; margin-right: 1em; vertical-align: top; } .film-content { display: inline-block; padding: 0.4em 0; vertical-align: top; width: 40%; } .film-content-list { width: 87%; } .c1 { margin-bottom: 0.4em; } .c2 { color: #666; font-size: 10px; margin-bottom: 0.4em; text-transform: uppercase; } .film-description { font-size: 10px; text-overflow: ellipsis; } .film-content-list { font-size: 10px; text-overflow: ellipsis; } .film-content-list .c2 { justify-content: space-between; } .poster-list-resize { height: 96px; width: auto; } .film-title-link { color: #136cb2; font-size: 13px; text-decoration: none; } .film-title-link:visited { color: #70579d; } .film-title-link:hover { color: #136cb2; text-decoration: underline; } .film-certification { background-color: #ddd; border: 1px solid #aaa; border-radius: 3px; display: inline-block; margin-right: 5px; } @media only screen and (max-width: 768px) { .sample-options { display: none; } } /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFWaWV3cy9DYXJkL0NhcmRMYXlvdXRFbmdpbmUvcmVhY3Qvc3R5bGVzLmNzcyIsIkRhdGFWaWV3cy9DYXJkL0NhcmRMYXlvdXRFbmdpbmUvcmVhY3Qvc3R5bGVzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0JBQWdCO0FDQWhCO0VBQ0UsbUNBQUE7RUFDQSxtMkxBQUE7QURFRjtBQ0VBO0VBQ0Usa0NBQUE7RUFDQSxtQ0FBQTtFQUNBLHFCQUFBO0VBQ0EsbUNBQUE7RUFDQSxrQkFBQTtFQUNBLG9CQUFBO0VBQ0Esa0JBQUE7RUFDQSxvQkFBQTtBREFGOztBQ0dBO0VBQ0UsWUFBQTtBREFGOztBQ0NFLFFBQUE7QUFFRjtFQUNFLFlBQUE7QURDRjs7QUNBRSxRQUFBO0FBRUY7RUFDRSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSxXQUFBO0VBQ0EsWUFBQTtBREVGOztBQ0NBO0VBQ0UsWUFBQTtFQUNBLGNBQUE7RUFDQSxhQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGdCQUFBO0VBQ0EsYUFBQTtBREVGOztBQ0NBO0VBQ0UsV0FBQTtFQUNBLHlCQUFBO0VBQ0EsWUFBQTtFQUNBLGNBQUE7QURFRjs7QUNHQTtFQUNFLFNBQUE7QURBRjs7QUNHQTtFQUNFLG1CQUFBO0VBQ0EseUJBQUE7RUFDQSxrQkFBQTtFQUNBLGlCQUFBO0VBQ0EsaUJBQUE7RUFDQSxnQkFBQTtBREFGOztBQ0dBO0VBQ0UscUJBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0FEQUY7O0FDTUE7RUFDRSxxQkFBQTtFQUNBLGdCQUFBO0VBQ0EsbUJBQUE7RUFDQSxVQUFBO0FESEY7O0FDTUE7RUFDRSxVQUFBO0FESEY7O0FDTUE7RUFDRSxvQkFBQTtBREhGOztBQ01BO0VBQ0UsV0FBQTtFQUNBLGVBQUE7RUFDQSxvQkFBQTtFQUNBLHlCQUFBO0FESEY7O0FDTUE7RUFDRSxlQUFBO0VBQ0EsdUJBQUE7QURIRjs7QUNNQTtFQUNFLGVBQUE7RUFDQSx1QkFBQTtBREhGO0FDS0U7RUFDRSw4QkFBQTtBREhKOztBQ1NBO0VBQ0UsWUFBQTtFQUNBLFdBQUE7QURORjs7QUNXQTtFQUNFLGNBQUE7RUFDQSxlQUFBO0VBQ0EscUJBQUE7QURSRjs7QUNXQTtFQUNFLGNBQUE7QURSRjs7QUNXQTtFQUNFLGNBQUE7RUFDQSwwQkFBQTtBRFJGOztBQ2FBO0VBQ0Usc0JBQUE7RUFDQSxzQkFBQTtFQUNBLGtCQUFBO0VBQ0EscUJBQUE7RUFDQSxpQkFBQTtBRFZGOztBQ2FBO0VBQ0U7SUFDRSxhQUFBO0VEVkY7QUFDRiIsImZpbGUiOiJEYXRhVmlld3MvQ2FyZC9DYXJkTGF5b3V0RW5naW5lL3JlYWN0L3N0eWxlcy5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJAY2hhcnNldCBcIlVURi04XCI7XG5AZm9udC1mYWNlIHtcbiAgZm9udC1mYW1pbHk6IFwic3ByZWFkdmlldy1kZW1vLWljb25cIjtcbiAgc3JjOiB1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRmNBQThBQUFBQUhkd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCV0FBQUFETUFBQUJDc1A2ejdVOVRMeklBQUFHTUFBQUFRd0FBQUZZK0lVa3lZMjFoY0FBQUFkQUFBQUIyQUFBQjdnbFA3UTFqZG5RZ0FBQUNTQUFBQUJNQUFBQWdCdFgvQW1ad1oyMEFBQUpjQUFBRmtBQUFDM0NLa1pCWloyRnpjQUFBQit3QUFBQUlBQUFBQ0FBQUFCQm5iSGxtQUFBSDlBQUFCbVlBQUFvVUxwcXlsR2hsWVdRQUFBNWNBQUFBTUFBQUFEWUpvcWZZYUdobFlRQUFEb3dBQUFBZEFBQUFKQWM5QTExb2JYUjRBQUFPckFBQUFCZ0FBQUFzSjUwQUFHeHZZMkVBQUE3RUFBQUFHQUFBQUJnTk1BOU1iV0Y0Y0FBQUR0d0FBQUFnQUFBQUlBRWhERFp1WVcxbEFBQU8vQUFBQVhjQUFBTE56SjBjSG5CdmMzUUFBQkIwQUFBQWJBQUFBSkM4dDltaGNISmxjQUFBRU9BQUFBQjZBQUFBaHVWQks3eDRuR05nWkdCZzRHS1FZOUJoWUhSeDh3bGg0R0JnWVlBQWtBeGpUbVo2SWxBTXlnUEtzWUJwRGlCbWc0Z0NBSW9qQTA4QWVKeGpZR1NleFRpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpDODRHUU8rcC9GRU1VY3hEQWRLTXdJa2dNQThjZ0wwUUI0bk8yUjBRM0NRQXhEMzlGUTZLbWo4TWxBZkRFTG8yYUwxa2s5QnBHZXBWaTUrN0NCTzdDSWx3Z1lYd1kxSDdtai9ZWFpmdkR1bXlnL3QrT1FVcW85V20rNkRmMjQ4dURKMXU5Vy9yTzMvcnpOeXUyaWt6UktqelRWU0pyS05rMjFsVVlwazBaNWswYkprMFlkcUtrTDVnbDNYeHROQUFCNG5HTmdRQU1TRU1nYzlEOFRoQUVTWmdQYkFIaWNyVlpwZDlOR0ZCMTVTWnlFTENVTExXcGh4TVJwc0VZbWJNR0FDVUd5WXlCZG5LMlZvSXNVTyttKzhZbmY0Ri96Wk5wejZEZCtXdThiTHlTUXRPZHdtcE9qZCtmTjFjemJaUkpha3RnTDY1R1VteS9GMU5ZbWpldzhDZW1HVGN0UmZDZzdleUZsaXNuZkJWRVFyWmJhdHgySFJFUWlVTFd1c0VRUSt4NVptbVI4NkZGR3k3YWtWMDNLTFQzcExsdmpRYjFWMzM0YU9zcXhPNkdrWmpOMGFEMnlKVlVZVmFKSXBqMVMwcVpscVBvclNTdTh2OExNVjgxUXdvaE9JbW04R2NiUVNONGJaN1RLYURXMjR5aUtiTExjS0ZJa211RkJGSG1VMVJMbjVJb0pETW9IelpEeXlxY1I1Y1A4aUt6WW81eFdzRXUyMC95K0wzbW5kemsvc1Y5dlViYmtRQi9JanV6ZzdIUWxYNFJiVzJIY3RKUHRLRlFSZHRkM1Ftelo3RlQvWm8veW1rWUR0eXN5dmRDTVlLbDhoUkFyUDZITS9pRlpMWnhQK1pKSG8xcXlrUk5CNjJWTzdFcytnZGJqaUNseHpSaFowTjNSQ1JIVS9aSXpEUGFZUGg3ODhkNHBsZ3NUQW5nY3kzcEhKWndJRXlsaGN6UkoyakJ5WUNWbGl5cXA5YTZZT09WMVdzUmJ3bjd0MnRHWHptampVSGRpUEZzUEhWczVVY254YUZLbm1VeWQya25Ob3lrTm9wUjBKbmpNcndNb1A2SkpYbTFqTlltVlI5TTRac2FFUkNJQ0xkeExVMEVzTzdHa0tRVE5veG05dVJ1bXVYWXRXcVRKQS9YY28vZjA1bGE0dWROVDJnNzBzMFovVnFkaU90Z0wwK2xwNUMveGFkcmxJa1hwK3VrWmZremlRZFlDTXBFdE5zT1Vnd2R2L1E3U3k5ZVdISVhYQnRqdTdmTXJxSDNXUlBDa0Fmc2IwQjVQMVNrSlRJV1lWWWhXUUdLdGExbVd5ZFdzRnFuSTFIZERtbGErck5NRWluSWNGOGUrakhIOVh6TXpscGdTdnQrSjA3TWpMajF6N1VzSTB4eDhtM1U5bXRlcHhYSUJjV1o1VHFkWmx1L3JOTWZ5QTUzbVdaN1g2UWhMVzZlakxEL1VhWUhsUnpvZFkzbEJDNXAwMzhHUWl6RGtBZzZRTUlTbEEwTllYb0loTEJVTVlia0lRMWdXWVFqTEpSakM4bU1Zd25JWmhyQzhyR1hWMUZOSjQ5cVpXQVpzUW1CaWpoNjV6RVhsYWlxNVZFSzdhRlJxUTU0U2JwVlVGTStxZjJXZ1hqenloam13RmtpWHlKcGZNYzZWajBibCtOWVZMVzhhTzFmQXNlcHZINDcyT2ZGUzFvdUZQd1gvMWRaVUpiMWl6Y09UcS9BYmhwNXNKNm8ycVhoMFRaZlBWVDI2L2w5VVZGZ0w5QnRJaFZnb3lySnNjR2NpaEk4Nm5ZWnFvSlZEekd6TVBMVHJkY3VhbjhQOU56RkNGbEQ5K0RjVUdndmNnMDVaU1ZudDRLelYxOXV5M0R1RGNqZ1RMRWt4Ti9QNlZ2Z2lJN1BTZnBGWnlwNlBmQjV3Qll4S1pkaHFBNjBWdk5rbk1RK1ozaVRQQkhGYlVUWkkydGpPQklrTkhQT0FlZk9kQkNaaDZxb041RTdoaGczNEJXRnV3WGtuWEtKNm95eUg3a1hzOHlpay9GdW40a1QycUdpTXdMUFpHMkd2NzBMS2IzRU1KRFQ1cFg0TVZCV2hxUmcxRmRBMFVtNm9CbC9HMmJwdFFzWU85Q01xZHNPeXJPTER4eGIzbFpKdEdZUjhwSWpWbzZPZjFsNmlUcXJjZm1ZVWwrK2R2Z1hCSURVeGYzdmZkSEdReXJ0YXlUSkhiUU5UdHhxVlU5ZWFRK05WaCtybVVmVzk0K3dUT1d1YWJyb25IbnBmMDZyYndjVmNMTEQyYlE3U1VpWVgxUFZoaFEyaXk4V2xVT3BsTkVudnVBY1lGaGpRNzFDS2pmK3IrdGg4bml0VmhkRnhKTjlPMUxmUjUyQU0vQS9ZZjBmMUE5RDNZK2h5RFM3UDk1b1RuMjcwNFd5WnJxSVg2NmZvTnpCcnJibFp1Z2JjMEhRRDRpRkhyWTY0eWcxOHB3WnhlcVM1SE9raDRHUGRGZUlCd0NhQXhlQVQzYldNNWxNQW8vbU1PVDdBNTh4aDBHUU9neTNtTU5obXpockFEbk1ZN0RLSHdSNXpHSHpCbkhXQUw1bkRJR1FPZzRnNURKNHdKd0I0eWh3R1h6R0h3ZGZNWWZBTmMrNERmTXNjQmpGekdDVE1ZYkN2NmRZd3pDMWUwRjJndGtGVm9BTlRUMWpjdytKUVUyWEkvbzRYaHYyOVFjeit3U0NtL3FqcDlwRDZFeThNOVdlRG1QcUxRVXo5VmRPZElmVTNYaGpxN3dZeDlRK0RtUHBNdnhqTFpRYS9qSHlYQ2dlVVhXdys1KytKOXcvYnhVQzVBQUVBQWYvL0FBOTRuS1ZWV1c4YjF4VSs1OTdaT0J5dW1vV3l5REUzY1d4U2tGeXVpcXhTbEJmUWt1a0Z0cERRU2FUUWpxeTJrRzNKRGVDZzZQYWd3TFhSSmdLeUZLaGJCQWlzeHdhdCt0S1hBSDFvbjdvQWJYNUNId0laUlpHblByU0l4ajJYWWhVN2licWdRODY5NTd2bnpNeTU1enZuWEFnQVBQNDczK0ZCaU1CaG1JQVp1QUF2d1JwOEZ6YmhRcXNUQ3pFMWFqQ0ZxMG92RW1BOHJER0duUFdDTWtNQVhCQXpRbGVYR0NCMDN2aiszWTN2ZlBQT0s3ZFdWMTVlZXVIWnkrZlAxZ1pYSlM2blNxT1dxYWk1Yk1HclZldE9wV3pIQ0hzRDNDQ01uOUVMWE1JOWZCejM4QmZaZnhuL3ZiM1FDL3VoZ1Y3Z3Z0NU4yNzl3WEtUUlRqOGg0dlY5NExqK1R3N1M0TXFuRHo1aDliVGlpWmMvdUdFVHRHN1FhMXhVVnNYa3JBb0wvdzlQYUZoK1ZkaUx3Zi85LzJxRTJ2NDZBQ2hmeU8xMDY1a2dxanIyT1EwZzE3RFBxSXg5UW1raVBpVVVkSDZHUXVPL3BUQXowR2NPb0dTZ2IyVDJLTWtOY0NWek1DWHN0Mmw3OTFFZk1jZHhkeHNINi9BcDlQOEYvZWw0VW9BZTMrTlgyRjhoQmZsV0JoaG5hN1NJNjhBQitBSndEbDBTb0ZOdzdKd2tKMHJZMzUxam14RlVzaDRXcWcyc2x3K2p3TFJYZmlXZjhsL2RzcXlpZGR6eTN6Wk52R0ZOMlVYTDJzTDdxVHd1dGQzaWxqbHRsZ1lLWEJXV1UvYldFZGozcFVhK3VIMWZPT05yWW5VZHFDRFpBbENaZG9HWTdkaWpCYlB2aTZtU0V4UGt4QXhtQmpXVDhRU3FseDIwZWMzMDM3R25yS0p0UC9SZlRlWHpLYnovMExhTC9RK2JPT1dhd3NPaU5XMDlMTHJrR1c1WjB3UXQveDJ6Nzh2M0tNOXFNQVJlSzY5VEJtRTdnSEE2U002Y0lxOFFGb1RMWFJHc1RyN0FaTHRrVlp0eXBSYkFXRFlzSHp0enAvZjJ4WlA0aXYvNnlyVUg4OWZLWTkvWS9QT2JLK1ZEMHQvOEgvaXZvOEhpMlZQWGZ0ai96dGY0RHZzMUZDRFpHaDZodDJFN2hIQkt2SmQyRHl2NWJJN0pGdTAxakxtc3A2ajBvOVFxMUF1MHl4bHNzaGtjUjYvYVpKV3lpM3puN2tmM3ZPS3R0MGJ5ZXBnemlYRkRDcG1xR1ZVajNXVzgrTm9IeS9jK3VvdExWN2Q2MHRXQ0pxR2hJOU1rSHBIRHRwWk1EaFhMYnk3TXZkYWI3RzBKOWg5djgrZjVKZENnQ2JmZ1hHdCticmJCdVl4dGtDbEpaSDRUZEFDbVE0OHNtS3l4SlhwR2xiamFBd2tVU1htUk5oTG9RaUJnNE56TjFaWGwwVW96V2YvU1lhc1VwSkpyVk1kUk1lMG1ZclhnNWFwMWo2WXdVNVVJaGhuZDZPVml0QjNKc2FtK2FsV3ZpVld2WGlPYkpqWk0xYmIyN2tFVkZzUllpNGxhckRmcWpTWnIxRVVveUlCcWQ5Tk8ydlJuRzJQSjM5UXgyd2lIVFNma2hvTGhoRzRicGg2UHEzWTRhU1RabmJtVHF5eHE2aWs5RUUrMFIyUUxNNzN6WitwZlBUMXJ2SmNxRmxNL01wOUpKME9HbmJDVEUvTkhScTVOUGJzY01WbmlVSUtaZURGVnhQVFgwNDBxUms3TUowS0ZXRGlhRGd6cEJ2by9ab3FpS2V6b1lpUWFLQjZKSjcxUVhzT3lWVDRhTjBzRnc1Z3NuWC8ra09NVVUzamRMWWJtaW03NFJNZTI4dWRuSzVNaXR5aU9nb056N0RGMVBST0dJUTkzVzFUQlRFN1pZWW8wRzZZQ0FTNmFtOVErKy9QNHhXN0xJMjdrdGIwaUp0VmFQMDlmVmhBbENTL1JoTkp6SUtGMGRxUlYrTHdsckgzZThFb3JEcEJKSjV4b0pLQ1JHNHFwVWk0NkRVKzFLaFpXYzFrcVFNdXNsS2tKZUE3bWFraHR3R3YwRzhMdnlodVZNL2lTSVV2K242U1FMT0VFZDNmOFl6djhuTG00czJnZXR6ZUlvWTNLZEpzcGh1Ui9LTkdJNDlMdEhYL2lFVDVJV1l1UFhyU3NEUnNHUFgrYngvZDcvbkU0Q1YrQjVkYlY1MDR6UlR1YUdZNEZVS0hHMEpZNUkwRkJ1Q2t4QnFvQzZpcUVJYUNGQTcxSWlHbUd6aFRVbENWUWcwRjFBVlExMklXZ0d1eGNYNzY2OU1LVnk1Y3VkT2Jhc3pObTNpeUlLeGVsUk1YWVhwYnQ1VmZaZHY0REhvcGxZcWFMMVBZcHR5c2VKYmRDQVJNMnNjR2hFTXY5NjdCdVVEWlRpaDVHY2NhNHVwYlg5UDZ3K2FuNGhxN3VpYXAreGpjMGplRWZtYWI1OS84eElzbmJpb1IvMGJWNmRkUS9ObHJGbXJEN3FSY1lvK05qVFBQZTEzVDhwZjhyc1lpellqeEE5cGRaYlBkaktnWGRaTmRuNmFTVUw5TVhkejhlUDNWaW5BMzFuVmkwa3VpYWkzcWZoM2Y1SmsrSlNvY2dSQ2tuWFpodnRVVVg0d2lpQTFCam9FNGdnNlRJMHBKdWFGeFJWV1doTHlocU54aWdJbGM3OFppYlNvN1lWbXc0UGh5THg4UVZEY25KRW1acW1mMjdXamF6bzJVN2pPT3M3Z2pBTnovWjROLzJ0M2MvWk9ONFFjaWZiS3l2WThMT012ZFltdVUvV0Y5bjc2LzcyK3YrejliOGIwM2V2cDBkeTJOMlBOMll2QTMvQkxrMHB0d0FBSGljWTJCa1lHQUE0Z2MzRXFiSDg5dDhaZUJtZmdFVVlianN1MGtHUWYvUFpIN0JIQVRrY2pBd2dVUUJZVzRMMVhpY1kyQmtZR0FPK3A4RkpGOHdNUHovRHlTQklpaUFHd0NIMUFXZ0FBQUFlSnhqZnNIQXdBekRrVkNNemhjRTRnVU1EQUN5NXdhL0FBQUFBQUR1QVpZQjNBSWlBbFlDb2dOa0ErZ0VyQVVLQUFFQUFBQUxBSkFBQ1FBQUFBQUFBZ0FrQURRQWN3QUFBSFVMY0FBQUFBQjRuSFdReTA3Q1FCU0cvNUdMQ29rYVRkdzZLd014bGtzaUN4SVNFZ3hzZEVNTVcxTkthVXRLaDB3SEVsN0RkL0JoZkFtZnhaOTJNQVppbStsODU1c3paMDRId0RXK0laQS9UeHc1QzV3eHl2a0VwK2haTHRBL1d5NlNYeXlYVU1XYjVUTDl1K1VLSGhCWXJ1SUdINndnaXVlTUZ2aTBMSEFsTGkyZjRFTGNXUzdRUDFvdWtudVdTN2dWcjViTDlKN2xDaVlpdFZ6RnZmZ2FxTlZXUjBGb1pHMVFsKzFtcXlPblc2bW9vc1NOcGJzMm9kS3A3TXU1U293Zng4cngxSExQWXo5WXg2N2VoL3Q1NHVzMFVvbHNPYzI5R3ZtSnIxM2p6M2JWMDAzUU5tWXU1MW90NWRCbXlKVldDOTh6VG1qTXF0dG8vRDBQQXlpc3NJVkd4S3NLWVNCUm82MXpicU9KRmpxa0tUTWtNL09zQ0FsY3hEUXUxdHdSWmlzcDR6N0huRkZDNnpNakpqdncrRjBlK1RFcDRQNllWZlRSNm1FOEllM09pREl2MlpmRDdnNnpScVFreTNRek8vdnRQY1dHcDdWcERYZnR1dFJaVnhMRGd4cVM5N0ZiVzlCNDlFNTJLNGEyaXdiZmYvN3ZCK05waEU4QWVKeHR4a0VPZ3lBUUJkRDV0SXBJcjhLaGtJd09DVmdDNDZLM2I5SnVmYXRIaHY1V3V1ZGg4TUFURTJaWUxIQlk0ZkVpbzJKVlFzbERsOEs3aGkwZnJ1ZERmcHVHeE00MnZXdmxVNTNLVmJjUnJqWTNQbE11WG5zY0VyZzIvZmpZTmFmQ0lSWWwrZ0pmcEI3WmVKeGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3hsWW5UWXhNREpvZ1JpYnVaZ1lPU0FzUGdZd2k4MXBGOU1Cb0RRbmtNM3V0SXZCQWNKbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPWmhZdVRSMnNINHYzVURTKzlHSmdZWEFBeDJJL1FBQUE9PSkgZm9ybWF0KFwid29mZlwiKTtcbn1cbi5kZW1vLWljb24ge1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LWZhbWlseTogXCJzcHJlYWR2aWV3LWRlbW8taWNvblwiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4uaWNvbi10aDpiZWZvcmUge1xuICBjb250ZW50OiBcIu6ggFwiO1xufVxuXG4vKiAn7qCAJyAqL1xuLmljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiBcIu6ggVwiO1xufVxuXG4vKiAn7qCBJyAqL1xuLm1haW4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnNhbXBsZS1vcHRpb25zIHtcbiAgZmxleC1ncm93OiAwO1xuICBmbGV4LXNocmluazogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZDogI2ZiZmJmYjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTBweDtcbn1cblxuLmdyaWQge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NHB4KTtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LXNocmluazogMTtcbn1cblxuLmdjLWdyaWQge1xuICBib3JkZXI6IDA7XG59XG5cbi5maWxtLWNvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6ICNmMWYxZjE7XG4gIGJvcmRlcjogc29saWQgMXB4ICNlMGUwZTA7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIG1heC1oZWlnaHQ6IDIxMHB4O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZmlsbS1jb3ZlciB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLXJpZ2h0OiAxZW07XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG59XG5cbi5maWxtLWNvbnRlbnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuNGVtIDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiA0MCU7XG59XG5cbi5maWxtLWNvbnRlbnQtbGlzdCB7XG4gIHdpZHRoOiA4NyU7XG59XG5cbi5jMSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNGVtO1xufVxuXG4uYzIge1xuICBjb2xvcjogIzY2NjtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwLjRlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmZpbG0tZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDEwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4uZmlsbS1jb250ZW50LWxpc3Qge1xuICBmb250LXNpemU6IDEwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuLmZpbG0tY29udGVudC1saXN0IC5jMiB7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2Vlbjtcbn1cblxuLnBvc3Rlci1saXN0LXJlc2l6ZSB7XG4gIGhlaWdodDogOTZweDtcbiAgd2lkdGg6IGF1dG87XG59XG5cbi5maWxtLXRpdGxlLWxpbmsge1xuICBjb2xvcjogIzEzNmNiMjtcbiAgZm9udC1zaXplOiAxM3B4O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5maWxtLXRpdGxlLWxpbms6dmlzaXRlZCB7XG4gIGNvbG9yOiAjNzA1NzlkO1xufVxuXG4uZmlsbS10aXRsZS1saW5rOmhvdmVyIHtcbiAgY29sb3I6ICMxMzZjYjI7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uZmlsbS1jZXJ0aWZpY2F0aW9uIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDtcbiAgYm9yZGVyOiAxcHggc29saWQgI2FhYTtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hcmdpbi1yaWdodDogNXB4O1xufVxuXG5AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5zYW1wbGUtb3B0aW9ucyB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufSIsIkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ3NwcmVhZHZpZXctZGVtby1pY29uJztcbiAgc3JjOiB1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7YmFzZTY0LGQwOUdSZ0FCQUFBQUFCRmNBQThBQUFBQUhkd0FBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCSFUxVkNBQUFCV0FBQUFETUFBQUJDc1A2ejdVOVRMeklBQUFHTUFBQUFRd0FBQUZZK0lVa3lZMjFoY0FBQUFkQUFBQUIyQUFBQjdnbFA3UTFqZG5RZ0FBQUNTQUFBQUJNQUFBQWdCdFgvQW1ad1oyMEFBQUpjQUFBRmtBQUFDM0NLa1pCWloyRnpjQUFBQit3QUFBQUlBQUFBQ0FBQUFCQm5iSGxtQUFBSDlBQUFCbVlBQUFvVUxwcXlsR2hsWVdRQUFBNWNBQUFBTUFBQUFEWUpvcWZZYUdobFlRQUFEb3dBQUFBZEFBQUFKQWM5QTExb2JYUjRBQUFPckFBQUFCZ0FBQUFzSjUwQUFHeHZZMkVBQUE3RUFBQUFHQUFBQUJnTk1BOU1iV0Y0Y0FBQUR0d0FBQUFnQUFBQUlBRWhERFp1WVcxbEFBQU8vQUFBQVhjQUFBTE56SjBjSG5CdmMzUUFBQkIwQUFBQWJBQUFBSkM4dDltaGNISmxjQUFBRU9BQUFBQjZBQUFBaHVWQks3eDRuR05nWkdCZzRHS1FZOUJoWUhSeDh3bGg0R0JnWVlBQWtBeGpUbVo2SWxBTXlnUEtzWUJwRGlCbWc0Z0NBSW9qQTA4QWVKeGpZR1NleFRpQmdaV0JnYW1LYVE4REEwTVBoR1o4d0dESXlBUVVaV0JsWnNBS0F0SmNVeGdjWGpDODRHUU8rcC9GRU1VY3hEQWRLTXdJa2dNQThjZ0wwUUI0bk8yUjBRM0NRQXhEMzlGUTZLbWo4TWxBZkRFTG8yYUwxa2s5QnBHZXBWaTUrN0NCTzdDSWx3Z1lYd1kxSDdtai9ZWFpmdkR1bXlnL3QrT1FVcW85V20rNkRmMjQ4dURKMXU5Vy9yTzMvcnpOeXUyaWt6UktqelRWU0pyS05rMjFsVVlwazBaNWswYkprMFlkcUtrTDVnbDNYeHROQUFCNG5HTmdRQU1TRU1nYzlEOFRoQUVTWmdQYkFIaWNyVlpwZDlOR0ZCMTVTWnlFTENVTExXcGh4TVJwc0VZbWJNR0FDVUd5WXlCZG5LMlZvSXNVTyttKzhZbmY0Ri96Wk5wejZEZCtXdThiTHlTUXRPZHdtcE9qZCtmTjFjemJaUkpha3RnTDY1R1VteS9GMU5ZbWpldzhDZW1HVGN0UmZDZzdleUZsaXNuZkJWRVFyWmJhdHgySFJFUWlVTFd1c0VRUSt4NVptbVI4NkZGR3k3YWtWMDNLTFQzcExsdmpRYjFWMzM0YU9zcXhPNkdrWmpOMGFEMnlKVlVZVmFKSXBqMVMwcVpscVBvclNTdTh2OExNVjgxUXdvaE9JbW04R2NiUVNONGJaN1RLYURXMjR5aUtiTExjS0ZJa211RkJGSG1VMVJMbjVJb0pETW9IelpEeXlxY1I1Y1A4aUt6WW81eFdzRXUyMC95K0wzbW5kemsvc1Y5dlViYmtRQi9JanV6ZzdIUWxYNFJiVzJIY3RKUHRLRlFSZHRkM1Ftelo3RlQvWm8veW1rWUR0eXN5dmRDTVlLbDhoUkFyUDZITS9pRlpMWnhQK1pKSG8xcXlrUk5CNjJWTzdFcytnZGJqaUNseHpSaFowTjNSQ1JIVS9aSXpEUGFZUGg3ODhkNHBsZ3NUQW5nY3kzcEhKWndJRXlsaGN6UkoyakJ5WUNWbGl5cXA5YTZZT09WMVdzUmJ3bjd0MnRHWHptampVSGRpUEZzUEhWczVVY254YUZLbm1VeWQya25Ob3lrTm9wUjBKbmpNcndNb1A2SkpYbTFqTlltVlI5TTRac2FFUkNJQ0xkeExVMEVzTzdHa0tRVE5veG05dVJ1bXVYWXRXcVRKQS9YY28vZjA1bGE0dWROVDJnNzBzMFovVnFkaU90Z0wwK2xwNUMveGFkcmxJa1hwK3VrWmZremlRZFlDTXBFdE5zT1Vnd2R2L1E3U3k5ZVdISVhYQnRqdTdmTXJxSDNXUlBDa0Fmc2IwQjVQMVNrSlRJV1lWWWhXUUdLdGExbVd5ZFdzRnFuSTFIZERtbGErck5NRWluSWNGOGUrakhIOVh6TXpscGdTdnQrSjA3TWpMajF6N1VzSTB4eDhtM1U5bXRlcHhYSUJjV1o1VHFkWmx1L3JOTWZ5QTUzbVdaN1g2UWhMVzZlakxEL1VhWUhsUnpvZFkzbEJDNXAwMzhHUWl6RGtBZzZRTUlTbEEwTllYb0loTEJVTVlia0lRMWdXWVFqTEpSakM4bU1Zd25JWmhyQzhyR1hWMUZOSjQ5cVpXQVpzUW1CaWpoNjV6RVhsYWlxNVZFSzdhRlJxUTU0U2JwVlVGTStxZjJXZ1hqenloam13RmtpWHlKcGZNYzZWajBibCtOWVZMVzhhTzFmQXNlcHZINDcyT2ZGUzFvdUZQd1gvMWRaVUpiMWl6Y09UcS9BYmhwNXNKNm8ycVhoMFRaZlBWVDI2L2w5VVZGZ0w5QnRJaFZnb3lySnNjR2NpaEk4Nm5ZWnFvSlZEekd6TVBMVHJkY3VhbjhQOU56RkNGbEQ5K0RjVUdndmNnMDVaU1ZudDRLelYxOXV5M0R1RGNqZ1RMRWt4Ti9QNlZ2Z2lJN1BTZnBGWnlwNlBmQjV3Qll4S1pkaHFBNjBWdk5rbk1RK1ozaVRQQkhGYlVUWkkydGpPQklrTkhQT0FlZk9kQkNaaDZxb041RTdoaGczNEJXRnV3WGtuWEtKNm95eUg3a1hzOHlpay9GdW40a1QycUdpTXdMUFpHMkd2NzBMS2IzRU1KRFQ1cFg0TVZCV2hxUmcxRmRBMFVtNm9CbC9HMmJwdFFzWU85Q01xZHNPeXJPTER4eGIzbFpKdEdZUjhwSWpWbzZPZjFsNmlUcXJjZm1ZVWwrK2R2Z1hCSURVeGYzdmZkSEdReXJ0YXlUSkhiUU5UdHhxVlU5ZWFRK05WaCtybVVmVzk0K3dUT1d1YWJyb25IbnBmMDZyYndjVmNMTEQyYlE3U1VpWVgxUFZoaFEyaXk4V2xVT3BsTkVudnVBY1lGaGpRNzFDS2pmK3IrdGg4bml0VmhkRnhKTjlPMUxmUjUyQU0vQS9ZZjBmMUE5RDNZK2h5RFM3UDk1b1RuMjcwNFd5WnJxSVg2NmZvTnpCcnJibFp1Z2JjMEhRRDRpRkhyWTY0eWcxOHB3WnhlcVM1SE9raDRHUGRGZUlCd0NhQXhlQVQzYldNNWxNQW8vbU1PVDdBNTh4aDBHUU9neTNtTU5obXpockFEbk1ZN0RLSHdSNXpHSHpCbkhXQUw1bkRJR1FPZzRnNURKNHdKd0I0eWh3R1h6R0h3ZGZNWWZBTmMrNERmTXNjQmpGekdDVE1ZYkN2NmRZd3pDMWUwRjJndGtGVm9BTlRUMWpjdytKUVUyWEkvbzRYaHYyOVFjeit3U0NtL3FqcDlwRDZFeThNOVdlRG1QcUxRVXo5VmRPZElmVTNYaGpxN3dZeDlRK0RtUHBNdnhqTFpRYS9qSHlYQ2dlVVhXdys1KytKOXcvYnhVQzVBQUVBQWYvL0FBOTRuS1ZWV1c4YjF4VSs1OTdaT0J5dW1vV3l5REUzY1d4U2tGeXVpcXhTbEJmUWt1a0Z0cERRU2FUUWpxeTJrRzNKRGVDZzZQYWd3TFhSSmdLeUZLaGJCQWlzeHdhdCt0S1hBSDFvbjdvQWJYNUNId0laUlpHblByU0l4ajJYWWhVN2licWdRODY5NTd2bnpNeTU1enZuWEFnQVBQNDczK0ZCaU1CaG1JQVp1QUF2d1JwOEZ6YmhRcXNUQ3pFMWFqQ0ZxMG92RW1BOHJER0duUFdDTWtNQVhCQXpRbGVYR0NCMDN2aiszWTN2ZlBQT0s3ZFdWMTVlZXVIWnkrZlAxZ1pYSlM2blNxT1dxYWk1Yk1HclZldE9wV3pIQ0hzRDNDQ01uOUVMWE1JOWZCejM4QmZaZnhuL3ZiM1FDL3VoZ1Y3Z3Z0NU4yNzl3WEtUUlRqOGg0dlY5NExqK1R3N1M0TXFuRHo1aDliVGlpWmMvdUdFVHRHN1FhMXhVVnNYa3JBb0wvdzlQYUZoK1ZkaUx3Zi85LzJxRTJ2NDZBQ2hmeU8xMDY1a2dxanIyT1EwZzE3RFBxSXg5UW1raVBpVVVkSDZHUXVPL3BUQXowR2NPb0dTZ2IyVDJLTWtOY0NWek1DWHN0Mmw3OTFFZk1jZHhkeHNINi9BcDlQOEYvZWw0VW9BZTMrTlgyRjhoQmZsV0JoaG5hN1NJNjhBQitBSndEbDBTb0ZOdzdKd2tKMHJZMzUxam14RlVzaDRXcWcyc2x3K2p3TFJYZmlXZjhsL2RzcXlpZGR6eTN6Wk52R0ZOMlVYTDJzTDdxVHd1dGQzaWxqbHRsZ1lLWEJXV1UvYldFZGozcFVhK3VIMWZPT05yWW5VZHFDRFpBbENaZG9HWTdkaWpCYlB2aTZtU0V4UGt4QXhtQmpXVDhRU3FseDIwZWMzMDM3R25yS0p0UC9SZlRlWHpLYnovMExhTC9RK2JPT1dhd3NPaU5XMDlMTHJrR1c1WjB3UXQveDJ6Nzh2M0tNOXFNQVJlSzY5VEJtRTdnSEE2U002Y0lxOFFGb1RMWFJHc1RyN0FaTHRrVlp0eXBSYkFXRFlzSHp0enAvZjJ4WlA0aXYvNnlyVUg4OWZLWTkvWS9QT2JLK1ZEMHQvOEgvaXZvOEhpMlZQWGZ0ai96dGY0RHZzMUZDRFpHaDZodDJFN2hIQkt2SmQyRHl2NWJJN0pGdTAxakxtc3A2ajBvOVFxMUF1MHl4bHNzaGtjUjYvYVpKV3lpM3puN2tmM3ZPS3R0MGJ5ZXBnemlYRkRDcG1xR1ZVajNXVzgrTm9IeS9jK3VvdExWN2Q2MHRXQ0pxR2hJOU1rSHBIRHRwWk1EaFhMYnk3TXZkYWI3RzBKOWg5djgrZjVKZENnQ2JmZ1hHdCticmJCdVl4dGtDbEpaSDRUZEFDbVE0OHNtS3l4SlhwR2xiamFBd2tVU1htUk5oTG9RaUJnNE56TjFaWGwwVW96V2YvU1lhc1VwSkpyVk1kUk1lMG1ZclhnNWFwMWo2WXdVNVVJaGhuZDZPVml0QjNKc2FtK2FsV3ZpVld2WGlPYkpqWk0xYmIyN2tFVkZzUllpNGxhckRmcWpTWnIxRVVveUlCcWQ5Tk8ydlJuRzJQSjM5UXgyd2lIVFNma2hvTGhoRzRicGg2UHEzWTRhU1RabmJtVHF5eHE2aWs5RUUrMFIyUUxNNzN6WitwZlBUMXJ2SmNxRmxNL01wOUpKME9HbmJDVEUvTkhScTVOUGJzY01WbmlVSUtaZURGVnhQVFgwNDBxUms3TUowS0ZXRGlhRGd6cEJ2by9ab3FpS2V6b1lpUWFLQjZKSjcxUVhzT3lWVDRhTjBzRnc1Z3NuWC8ra09NVVUzamRMWWJtaW03NFJNZTI4dWRuSzVNaXR5aU9nb056N0RGMVBST0dJUTkzVzFUQlRFN1pZWW8wRzZZQ0FTNmFtOVErKy9QNHhXN0xJMjdrdGIwaUp0VmFQMDlmVmhBbENTL1JoTkp6SUtGMGRxUlYrTHdsckgzZThFb3JEcEJKSjV4b0pLQ1JHNHFwVWk0NkRVKzFLaFpXYzFrcVFNdXNsS2tKZUE3bWFraHR3R3YwRzhMdnlodVZNL2lTSVV2K242U1FMT0VFZDNmOFl6djhuTG00czJnZXR6ZUlvWTNLZEpzcGh1Ui9LTkdJNDlMdEhYL2lFVDVJV1l1UFhyU3NEUnNHUFgrYngvZDcvbkU0Q1YrQjVkYlY1MDR6UlR1YUdZNEZVS0hHMEpZNUkwRkJ1Q2t4QnFvQzZpcUVJYUNGQTcxSWlHbUd6aFRVbENWUWcwRjFBVlExMklXZ0d1eGNYNzY2OU1LVnk1Y3VkT2Jhc3pObTNpeUlLeGVsUk1YWVhwYnQ1VmZaZHY0REhvcGxZcWFMMVBZcHR5c2VKYmRDQVJNMnNjR2hFTXY5NjdCdVVEWlRpaDVHY2NhNHVwYlg5UDZ3K2FuNGhxN3VpYXAreGpjMGplRWZtYWI1OS84eElzbmJpb1IvMGJWNmRkUS9ObHJGbXJEN3FSY1lvK05qVFBQZTEzVDhwZjhyc1lpellqeEE5cGRaYlBkaktnWGRaTmRuNmFTVUw5TVhkejhlUDNWaW5BMzFuVmkwa3VpYWkzcWZoM2Y1SmsrSlNvY2dSQ2tuWFpodnRVVVg0d2lpQTFCam9FNGdnNlRJMHBKdWFGeFJWV1doTHlocU54aWdJbGM3OFppYlNvN1lWbXc0UGh5THg4UVZEY25KRW1acW1mMjdXamF6bzJVN2pPT3M3Z2pBTnovWjROLzJ0M2MvWk9ONFFjaWZiS3l2WThMT012ZFltdVUvV0Y5bjc2LzcyK3YrejliOGIwM2V2cDBkeTJOMlBOMll2QTMvQkxrMHB0d0FBSGljWTJCa1lHQUE0Z2MzRXFiSDg5dDhaZUJtZmdFVVlianN1MGtHUWYvUFpIN0JIQVRrY2pBd2dVUUJZVzRMMVhpY1kyQmtZR0FPK3A4RkpGOHdNUHovRHlTQklpaUFHd0NIMUFXZ0FBQUFlSnhqZnNIQXdBekRrVkNNemhjRTRnVU1EQUN5NXdhL0FBQUFBQUR1QVpZQjNBSWlBbFlDb2dOa0ErZ0VyQVVLQUFFQUFBQUxBSkFBQ1FBQUFBQUFBZ0FrQURRQWN3QUFBSFVMY0FBQUFBQjRuSFdReTA3Q1FCU0cvNUdMQ29rYVRkdzZLd014bGtzaUN4SVNFZ3hzZEVNTVcxTkthVXRLaDB3SEVsN0RkL0JoZkFtZnhaOTJNQVppbStsODU1c3paMDRId0RXK0laQS9UeHc1QzV3eHl2a0VwK2haTHRBL1d5NlNYeXlYVU1XYjVUTDl1K1VLSGhCWXJ1SUdINndnaXVlTUZ2aTBMSEFsTGkyZjRFTGNXUzdRUDFvdWtudVdTN2dWcjViTDlKN2xDaVlpdFZ6RnZmZ2FxTlZXUjBGb1pHMVFsKzFtcXlPblc2bW9vc1NOcGJzMm9kS3A3TXU1U293Zng4cngxSExQWXo5WXg2N2VoL3Q1NHVzMFVvbHNPYzI5R3ZtSnIxM2p6M2JWMDAzUU5tWXU1MW90NWRCbXlKVldDOTh6VG1qTXF0dG8vRDBQQXlpc3NJVkd4S3NLWVNCUm82MXpicU9KRmpxa0tUTWtNL09zQ0FsY3hEUXUxdHdSWmlzcDR6N0huRkZDNnpNakpqdncrRjBlK1RFcDRQNllWZlRSNm1FOEllM09pREl2MlpmRDdnNnpScVFreTNRek8vdnRQY1dHcDdWcERYZnR1dFJaVnhMRGd4cVM5N0ZiVzlCNDlFNTJLNGEyaXdiZmYvN3ZCK05waEU4QWVKeHR4a0VPZ3lBUUJkRDV0SXBJcjhLaGtJd09DVmdDNDZLM2I5SnVmYXRIaHY1V3V1ZGg4TUFURTJaWUxIQlk0ZkVpbzJKVlFzbERsOEs3aGkwZnJ1ZERmcHVHeE00MnZXdmxVNTNLVmJjUnJqWTNQbE11WG5zY0VyZzIvZmpZTmFmQ0lSWWwrZ0pmcEI3WmVKeGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3hsWW5UWXhNREpvZ1JpYnVaZ1lPU0FzUGdZd2k4MXBGOU1Cb0RRbmtNM3V0SXZCQWNKbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPWmhZdVRSMnNINHYzVURTKzlHSmdZWEFBeDJJL1FBQUE9PSlcbiAgICBmb3JtYXQoJ3dvZmYnKTtcbn1cblxuLmRlbW8taWNvbiB7XG4gIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGZvbnQtZmFtaWx5OiAnc3ByZWFkdmlldy1kZW1vLWljb24nO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtdmFyaWFudDogbm9ybWFsO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHRleHQtdHJhbnNmb3JtOiBub25lO1xufVxuXG4uaWNvbi10aDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODAwJztcbn0gLyogJ+6ggCcgKi9cblxuLmljb24tdGgtbGlzdDpiZWZvcmUge1xuICBjb250ZW50OiAnXFxlODAxJztcbn0gLyogJ+6ggScgKi9cblxuLm1haW4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnNhbXBsZS1vcHRpb25zIHtcbiAgZmxleC1ncm93OiAwO1xuICBmbGV4LXNocmluazogMDtcbiAgZGlzcGxheTogZmxleDtcbiAgYmFja2dyb3VuZDogI2ZiZmJmYjtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcGFkZGluZzogMTBweDtcbn1cblxuLmdyaWQge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA1NHB4KTtcbiAgZmxleC1ncm93OiAxO1xuICBmbGV4LXNocmluazogMTtcbn1cblxuLy8gY2FyZCBpdGVtc1xuXG4uZ2MtZ3JpZCB7XG4gIGJvcmRlcjogMDtcbn1cblxuLmZpbG0tY29udGFpbmVyIHtcbiAgYmFja2dyb3VuZDogI2YxZjFmMTtcbiAgYm9yZGVyOiBzb2xpZCAxcHggI2UwZTBlMDtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgbWF4LWhlaWdodDogMjEwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5maWxtLWNvdmVyIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDFlbTtcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcbn1cblxuLmZpbG0tY292ZXItbGlzdCB7XG59XG5cbi5maWxtLWNvbnRlbnQge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDAuNGVtIDA7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIHdpZHRoOiA0MCU7XG59XG5cbi5maWxtLWNvbnRlbnQtbGlzdCB7XG4gIHdpZHRoOiA4NyU7XG59XG5cbi5jMSB7XG4gIG1hcmdpbi1ib3R0b206IDAuNGVtO1xufVxuXG4uYzIge1xuICBjb2xvcjogIzY2NjtcbiAgZm9udC1zaXplOiAxMHB4O1xuICBtYXJnaW4tYm90dG9tOiAwLjRlbTtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLmZpbG0tZGVzY3JpcHRpb24ge1xuICBmb250LXNpemU6IDEwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xufVxuXG4uZmlsbS1jb250ZW50LWxpc3Qge1xuICBmb250LXNpemU6IDEwcHg7XG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuXG4gIC5jMiB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG59XG5cbi8vIGZpbG0gcG9zdGVyXG5cbi5wb3N0ZXItbGlzdC1yZXNpemUge1xuICBoZWlnaHQ6IDk2cHg7XG4gIHdpZHRoOiBhdXRvO1xufVxuXG4vLyBmaWxtIHRpdGxlIGxpbmtcblxuLmZpbG0tdGl0bGUtbGluayB7XG4gIGNvbG9yOiAjMTM2Y2IyO1xuICBmb250LXNpemU6IDEzcHg7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmZpbG0tdGl0bGUtbGluazp2aXNpdGVkIHtcbiAgY29sb3I6ICM3MDU3OWQ7XG59XG5cbi5maWxtLXRpdGxlLWxpbms6aG92ZXIge1xuICBjb2xvcjogIzEzNmNiMjtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8vIGZpbG0gY2F0ZWdvcnlcblxuLmZpbG0tY2VydGlmaWNhdGlvbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7XG4gIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cblxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuc2FtcGxlLW9wdGlvbnMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cbiJdfQ== */
(function () { const IS_PROD = window.process.env.NODE_ENV === 'production'; const USE_NPM = window.process.env.USE_NPM; const USE_CDN = window.process.env.USE_CDN; const SITE_ROOT = window.process.env.SITE_ROOT; const FRAMEWORK = window.process.env.FRAMEWORK; const ext = IS_PROD ? '.min.js' : '.js'; function js(name) { return name + ext; } function npm(t) { if (!t.file) { t.file = IS_PROD ? t.prod : t.dev; } const version = USE_CDN && t.version ? '@' + t.version : ''; const path = t.pkg + version + '/' + t.file; if (USE_CDN) { return 'https://unpkg.com/' + path; } return 'npm:' + path; } function dv(t) { if (USE_CDN || USE_NPM) { t.file = 'dist/' + t.file + '.min.js'; return npm(t); } return SITE_ROOT + '/static/dataviews/' + js(t.file); } const isTypeScript = FRAMEWORK === 'angular'; const babelConfig = { es2015: true, react: true, }; const meta = { js: { babelOptions: babelConfig, }, ts: { typescriptOptions: { tsconfig: true }, }, }; const map = { // gc.dataviews packages '@grapecity/dataviews.common': dv({pkg:'@grapecity/dataviews.common',file:'gc.dataviews.common',version:'1.7.5'}), '@grapecity/dataviews.core': dv({pkg:'@grapecity/dataviews.core',file:'gc.dataviews.core',version:'1.7.5'}), '@grapecity/dataviews.grid': dv({pkg:'@grapecity/dataviews.grid',file:'gc.dataviews.grid',version:'1.7.5'}), '@grapecity/dataviews.cardlayout': dv({pkg:'@grapecity/dataviews.cardlayout',file:'gc.dataviews.cardlayout',version:'1.7.5'}), '@grapecity/dataviews.masonry': dv({pkg:'@grapecity/dataviews.masonry',file:'gc.dataviews.masonry',version:'1.7.5'}), '@grapecity/dataviews.calendar': dv({pkg:'@grapecity/dataviews.calendar',file:'gc.dataviews.calendar',version:'1.7.5'}), '@grapecity/dataviews.timeline': dv({pkg:'@grapecity/dataviews.timeline',file:'gc.dataviews.timeline',version:'1.7.5'}), '@grapecity/dataviews.trellis': dv({pkg:'@grapecity/dataviews.trellis',file:'gc.dataviews.trellis',version:'1.7.5'}), '@grapecity/dataviews.gantt': dv({pkg:'@grapecity/dataviews.gantt',file:'gc.dataviews.gantt',version:'1.7.5'}), '@grapecity/dataviews.searchbox': dv({pkg:'@grapecity/dataviews.searchbox',file:'gc.dataviews.searchbox',version:'1.7.5'}), '@grapecity/dataviews.react': dv({pkg:'@grapecity/dataviews.react',file:'gc.dataviews.react',version:'1.7.5'}), '@grapecity/dataviews.vue': dv({pkg:'@grapecity/dataviews.vue',file:'gc.dataviews.vue',version:'1.7.5'}), '@grapecity/dataviews.angular': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.angular',version:'1.7.5'}), '@grapecity/dataviews.csvexport': dv({pkg:'@grapecity/dataviews.angular',file:'gc.dataviews.csvexport',version:'1.7.5'}), // third-party libs react: npm({pkg:'react',prod:'umd/react.production.min.js',dev:'umd/react.development.js',version:'16.13.1'}), 'react-dom': npm({pkg:'react-dom',prod:'umd/react-dom.production.min.js',dev:'umd/react-dom.development.js',version:'16.13.1'}), 'react-router-dom': npm({pkg:'react-router-dom',prod:'umd/react-router-dom.min.js',dev:'umd/react-router-dom.js',version:'5.1.2'}), 'vue': npm({pkg:'vue',file:'dist/vue.js',version:'2.6.11'}), 'vue-router': npm({pkg:'vue-router',file:'dist/vue-router.js',version:'3.1.6'}), 'lodash': npm({pkg: 'lodash', file: js('lodash')}), 'zone.js': npm({pkg: 'zone.js', file: js('dist/zone')}), 'rxjs': npm({pkg: 'rxjs', file: js('bundles/rxjs.umd')}), 'rxjs/operators': npm({pkg:'rxjs-operators-bundle',prod:'dist/bundle.min.js',dev:'dist/bundle.js',version:'1.0.2'}), '@angular/core': npm({pkg: '@angular/core', file: js('bundles/core.umd')}), '@angular/common': npm({pkg: '@angular/common', file: js('bundles/common.umd')}), '@angular/compiler': npm({pkg: '@angular/compiler', file: js('bundles/compiler.umd')}), '@angular/platform-browser': npm({pkg: '@angular/platform-browser', file: js('bundles/platform-browser.umd')}), '@angular/platform-browser-dynamic': npm({pkg: '@angular/platform-browser-dynamic', file: js('bundles/platform-browser-dynamic.umd')}), '@angular/http': npm({pkg: '@angular/http', file: js('bundles/http.umd')}), '@angular/common/http': npm({pkg: '@angular/common', file: js('bundles/common-http.umd')}), '@angular/router': npm({pkg: '@angular/router', file: js('bundles/router.umd')}), '@angular/forms': npm({pkg: '@angular/forms', file: js('bundles/forms.umd')}), // systemjs plugins 'systemjs-plugin-json': npm({pkg:'systemjs-plugin-json',file:'json.js',version:'0.3.0'}), 'systemjs-plugin-css': npm({pkg:'systemjs-plugin-css',file:'css.js',version:'0.1.37'}), 'systemjs-plugin-babel': npm({pkg:'systemjs-plugin-babel',file:'plugin-babel.js',version:'0.0.25'}), 'systemjs-babel-build': npm({pkg:'systemjs-plugin-babel',file:'systemjs-babel-browser.js',version:'0.0.25'}), 'plugin-typescript': npm({pkg:'plugin-typescript',file:'lib/plugin.js',version:'8.0.0'}), 'typescript': npm({pkg:'typescript',file:'lib/typescript.js',version:'3.8.3'}), 'systemjs-vue-browser': npm({pkg:'systemjs-vue-browser',file:'index.js',version:'1.0.11'}), }; const config = { defaultJSExtensions: true, transpiler: isTypeScript ? 'plugin-typescript' : 'systemjs-plugin-babel', typescriptOptions: { tsconfig: true }, meta: { '*.json': {loader: 'systemjs-plugin-json'}, '*.css': {loader: 'systemjs-plugin-css'}, '*.vue': {loader: 'systemjs-vue-browser'}, '*.js': meta.js, '*.ts': meta.ts, 'app.js': { format: 'esm', babelOptions: babelConfig, }, 'typescript': { exports: 'ts', }, '@grapecity/dataviews.common': { format: 'amd', }, '@grapecity/dataviews.core': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.grid': { format: 'amd', deps: [ '@grapecity/dataviews.common', '@grapecity/dataviews.core', ], }, '@grapecity/dataviews.cardlayout': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.masonry': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.calendar': { format: 'amd', deps: [ '@grapecity/dataviews.common', '@grapecity/dataviews.core', ], }, '@grapecity/dataviews.timeline': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.trellis': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.gantt': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.searchbox': { format: 'amd', deps: [ '@grapecity/dataviews.common', ], }, '@grapecity/dataviews.react': { format: 'amd', deps: [ 'react', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.vue': { format: 'amd', deps: [ 'vue', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.angular': { format: 'amd', deps: [ '@angular/core', '@grapecity/dataviews.common', '@grapecity/dataviews.core' ], }, '@grapecity/dataviews.csvexport': { format: 'amd', deps: [ '@grapecity/dataviews.common' ], }, }, paths: { // paths serve as alias 'npm:': SITE_ROOT + '/node_modules/', }, // map tells the System loader where to look for things map: map, // packages tells the System loader how to load when no filename and/or no extension packages: { '.': { defaultExtension: isTypeScript ? 'ts' : 'js' }, node_modules: { defaultExtension: 'js' }, } }; // fast format detection to avoid detection by source code using regexp Object.keys(map).filter(function (key) { return !config.meta[key]; }).forEach(function (key) { const path = map[key]; if (path.indexOf('/umd') >= 0 || path.indexOf('.umd') >= 0) { config.meta[key] = { format: 'amd' }; } if (path.indexOf('/cjs') >= 0) { config.meta[key] = { format: 'cjs' }; } }); System.config(config); })(this);