TeamTreehouse - Web Design (Track) [Thomas]

Torrent Hash:
A6E701E928BA3C6846AE80FCD43B52597827F083
Number of Files:
394
Content Size:
4.73GB
Convert On:
2022-10-23
Magnet Link:
W3siaWQiOiJhZHN0X2JfTV8zMDB4NTAiLCJhZHNwb3QiOiJiX01fMzAweDUwIiwid2VpZ2h0IjoiNSIsImZjYXAiOmZhbHNlLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxyXG4gIGF0T3B0aW9ucyA9IHtcclxuICAgICdrZXknIDogJzdkMWNjMGUxYjk4MWM5NzY4ZGI3ODUxZmM1MzVhMTllJyxcclxuICAgICdmb3JtYXQnIDogJ2lmcmFtZScsXHJcbiAgICAnaGVpZ2h0JyA6IDUwLFxyXG4gICAgJ3dpZHRoJyA6IDMyMCxcclxuICAgICdwYXJhbXMnIDoge31cclxuICB9O1xyXG4gIGRvY3VtZW50LndyaXRlKCc8c2NyJyArICdpcHQgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIiBzcmM9XCJodHRwJyArIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAncycgOiAnJykgKyAnOlwvXC93d3cuYm5odG1sLmNvbVwvaW52b2tlLmpzXCI+PFwvc2NyJyArICdpcHQ+Jyk7XHJcbjxcL3NjcmlwdD4ifV0=
File Name
Size
05. CSS Layout/04. CSS Media Queries/02. Targeting Media Features.webm
76.08MB
TeamTreehouse - Web Design (Track) [Thomas].jpg
127.03KB
TeamTreehouse - Web Design (Track) [Thomas].png
1.05MB
Web Design.md
9.64KB
01. Introduction to HTML and CSS/Introduction to HTML and CSS.md
6.23KB
01. Introduction to HTML and CSS/01. Getting Familiar with HTML and CSS/01. Welcome to HTML and CSS.webm
16.42MB
01. Introduction to HTML and CSS/01. Getting Familiar with HTML and CSS/02. Building Web Pages with HTML and CSS.webm
14.33MB
01. Introduction to HTML and CSS/01. Getting Familiar with HTML and CSS/03. HTML, CSS, and Web Development.webm
7.86MB
01. Introduction to HTML and CSS/01. Getting Familiar with HTML and CSS/Project Files/intro-to-html-css.zip
1.17MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/01. The Basic Structure of a Web Page.webm
12.11MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/02. Image Tags.webm
9.29MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/03. Paragraph Tags.webm
6.62MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/04. Anchor Tags.webm
9.8MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/05. HTML Lists.webm
6.02MB
01. Introduction to HTML and CSS/02. HTML The Structural Foundation of Web Pages and Applications/Project Files/intro-to-html-css.zip
1.17MB
01. Introduction to HTML and CSS/03. Make It Beautiful With CSS/01. Select and Style by Element.webm
12.63MB
01. Introduction to HTML and CSS/03. Make It Beautiful With CSS/02. Select and Style by Class.webm
12.7MB
01. Introduction to HTML and CSS/03. Make It Beautiful With CSS/03. Select and Style Multiple Elements by Class.webm
12.58MB
01. Introduction to HTML and CSS/03. Make It Beautiful With CSS/Project Files/intro-to-html-css.zip
1.17MB
01. Introduction to HTML and CSS/04. Adding a New Web Page/01. Set up an HTML Document.webm
9.24MB
01. Introduction to HTML and CSS/04. Adding a New Web Page/02. Write the HTML.webm
4.1MB
01. Introduction to HTML and CSS/04. Adding a New Web Page/03. Write the CSS.webm
11.73MB
01. Introduction to HTML and CSS/04. Adding a New Web Page/04. Linking It All Up.webm
7.68MB
01. Introduction to HTML and CSS/04. Adding a New Web Page/Project Files/intro-to-html-css.zip
1.17MB
02. HTML Basics/HTML Basics.md
6.07KB
02. HTML Basics/01. Getting Started with HTML/01. What is HTML.webm
12.94MB
02. HTML Basics/01. Getting Started with HTML/02. Global Structure of an HTML Document.webm
10.29MB
02. HTML Basics/01. Getting Started with HTML/03. Headings and Paragraphs.webm
9.84MB
02. HTML Basics/01. Getting Started with HTML/04. Creating Lists.webm
13.34MB
02. HTML Basics/01. Getting Started with HTML/05. Creating Links.webm
18.18MB
02. HTML Basics/01. Getting Started with HTML/Project Files/1-getting-started-with-html.zip
1.2MB
02. HTML Basics/02. Structuring Your Content/01. Semantic HTML header, footer and section.webm
21.93MB
02. HTML Basics/02. Structuring Your Content/02. Sectioning Content with article, nav and aside.webm
9.67MB
02. HTML Basics/02. Structuring Your Content/03. Marking Up a Blog Post.webm
14.51MB
02. HTML Basics/02. Structuring Your Content/04. Grouping Content with main and div.webm
16.25MB
02. HTML Basics/02. Structuring Your Content/05. Using Multiple header and footer Elements.webm
10.52MB
02. HTML Basics/02. Structuring Your Content/Project Files/2-structuring-your-content.zip
1.51MB
02. HTML Basics/03. Images, Text and Links/01. Understanding File Paths.webm
14.47MB
02. HTML Basics/03. Images, Text and Links/02. Adding Images to the Page.webm
11.44MB
02. HTML Basics/03. Images, Text and Links/03. Captioning Images.webm
8.04MB
02. HTML Basics/03. Images, Text and Links/04. Creating Breaks in Content.webm
8.25MB
02. HTML Basics/03. Images, Text and Links/05. Add Meaning to Words with Text Level Elements.webm
13.21MB
02. HTML Basics/03. Images, Text and Links/Project Files/3-images-text-and-links.zip
1.54MB
02. HTML Basics/04. Going Further with HTML/01. Linking to Sections of a Web Page.webm
16.89MB
02. HTML Basics/04. Going Further with HTML/02. Root-relative Paths.webm
6.21MB
02. HTML Basics/04. Going Further with HTML/03. Link to Email.webm
5.14MB
02. HTML Basics/04. Going Further with HTML/04. HTML Entities and Reserved Characters.webm
11.24MB
02. HTML Basics/04. Going Further with HTML/05. Adding Developer Notes with HTML Comments.webm
4.81MB
02. HTML Basics/04. Going Further with HTML/06. Working on a Website Project Locally.webm
10.43MB
02. HTML Basics/04. Going Further with HTML/07. Next Steps.webm
9.9MB
02. HTML Basics/04. Going Further with HTML/Project Files/4-going-further-with-html.zip
1.71MB
03. Web Design Process/Web Design Process.md
2.9KB
03. Web Design Process/01. Discovery/01. Setting Goals.webm
24.19MB
03. Web Design Process/01. Discovery/02. Understanding the Audience.webm
15.31MB
03. Web Design Process/01. Discovery/03. Gathering Content.webm
11.21MB
03. Web Design Process/02. Exploration/01. Defining a Call to Action.webm
6.34MB
03. Web Design Process/02. Exploration/02. Prototyping with Wireframes.webm
10.74MB
03. Web Design Process/02. Exploration/03. Mobile First Design.webm
18.72MB
03. Web Design Process/02. Exploration/04. Iterating on a Design.webm
30.29MB
04. CSS Basics/CSS Basics.md
6.14KB
04. CSS Basics/01. Getting Started with CSS/01. Introduction to CSS.webm
28.29MB
04. CSS Basics/01. Getting Started with CSS/02. Adding CSS to HTML Inline Styles.webm
13.14MB
04. CSS Basics/01. Getting Started with CSS/03. Adding CSS to HTML Internal Styles.webm
21.07MB
04. CSS Basics/01. Getting Started with CSS/04. Adding CSS to HTML External Stylesheets.webm
22.12MB
04. CSS Basics/01. Getting Started with CSS/05. Keeping Up with CSS.md
1.81KB
04. CSS Basics/01. Getting Started with CSS/05. Keeping Up with CSS.webm
15.88MB
04. CSS Basics/01. Getting Started with CSS/Project Files/css-basics-project-files.zip
601.08KB
04. CSS Basics/02. Basic Selectors/01. Introducing CSS Selectors.webm
21.67MB
04. CSS Basics/02. Basic Selectors/02. ID Selectors.webm
14.84MB
04. CSS Basics/02. Basic Selectors/03. Class Selectors.webm
19.86MB
04. CSS Basics/02. Basic Selectors/04. Descendant Selectors.webm
14.64MB
04. CSS Basics/02. Basic Selectors/05. Pseudo-classes.webm
20.5MB
04. CSS Basics/02. Basic Selectors/06. Using Comments in CSS.webm
16.28MB
04. CSS Basics/03. Understanding Values and Units/01. Common Data Types.webm
17.07MB
04. CSS Basics/03. Understanding Values and Units/02. Pixel Units.webm
9.16MB
04. CSS Basics/03. Understanding Values and Units/03. Percentages.webm
19.54MB
04. CSS Basics/03. Understanding Values and Units/04. Em and Rem Units.webm
33.86MB
04. CSS Basics/03. Understanding Values and Units/05. Color Values.webm
16.3MB
04. CSS Basics/04. Fundamental Concepts/01. The Cascade Origin and Importance.webm
25.55MB
04. CSS Basics/04. Fundamental Concepts/02. The Cascade Specificity and Source Order.webm
14.05MB
04. CSS Basics/04. Fundamental Concepts/03. Inheritance.webm
8.13MB
04. CSS Basics/04. Fundamental Concepts/04. Validation.webm
20MB
05. CSS Layout/CSS Layout.md
4.85KB
05. CSS Layout/01. The CSS Box Model/01. Introducing the Box Model.webm
46.05MB
05. CSS Layout/01. The CSS Box Model/02. Padding.webm
21.09MB
05. CSS Layout/01. The CSS Box Model/03. Border.webm
11.5MB
05. CSS Layout/01. The CSS Box Model/04. Margin.webm
29.42MB
05. CSS Layout/01. The CSS Box Model/Project Files/css-layout-project-files.zip
506.56KB
05. CSS Layout/02. Box Model Concepts/01. Box-sizing.webm
27.77MB
05. CSS Layout/02. Box Model Concepts/02. max-width.webm
32.57MB
05. CSS Layout/02. Box Model Concepts/03. Viewport Units.webm
37.95MB
05. CSS Layout/03. CSS Layout Techniques/01. Display.webm
63.82MB
05. CSS Layout/03. CSS Layout Techniques/02. Relative and Absolute Positioning.webm
46.49MB
05. CSS Layout/03. CSS Layout Techniques/03. Fixed and Sticky Positioning.webm
19.11MB
05. CSS Layout/03. CSS Layout Techniques/04. Float.webm
55.87MB
05. CSS Layout/04. CSS Media Queries/01. What are Media Queries.webm
42.3MB
README.txt
2.25KB
05. CSS Layout/04. CSS Media Queries/03. The meta Viewport Declaration.webm
27.12MB
05. CSS Layout/04. CSS Media Queries/04. Complex Media Queries.webm
33.2MB
06. Enhancing Design with CSS/Enhancing Design with CSS.md
5.36KB
06. Enhancing Design with CSS/01. Styling Text/01. Introducing the Course.webm
20.43MB
06. Enhancing Design with CSS/01. Styling Text/02. Web-Safe Typefaces and Font Stacks.webm
19.58MB
06. Enhancing Design with CSS/01. Styling Text/03. Importing Fonts.webm
15.47MB
06. Enhancing Design with CSS/01. Styling Text/04. Google Fonts.webm
28.34MB
06. Enhancing Design with CSS/01. Styling Text/05. Line-height and letter-spacing.webm
9.46MB
06. Enhancing Design with CSS/01. Styling Text/06. Text Shadows.webm
25.37MB
06. Enhancing Design with CSS/01. Styling Text/Project Files/enhancing-design-with-css-project-files.zip
4.11MB
06. Enhancing Design with CSS/02. Styling Boxes/01. Box Shadows.webm
9.43MB
06. Enhancing Design with CSS/02. Styling Boxes/02. Rounded Corners.webm
15.16MB
06. Enhancing Design with CSS/02. Styling Boxes/03. Adding Content Using CSS.webm
16.14MB
06. Enhancing Design with CSS/03. Background Images/01. Background Images.webm
14.43MB
06. Enhancing Design with CSS/03. Background Images/02. The Background Shorthand Property.webm
13.25MB
06. Enhancing Design with CSS/03. Background Images/03. Background Blend Modes.webm
8.33MB
06. Enhancing Design with CSS/04. Finishing Touches/01. CSS Gradients Linear and Radial.webm
20MB
06. Enhancing Design with CSS/04. Finishing Touches/02. CSS Gradients Color Stops and Transparency.webm
20.22MB
06. Enhancing Design with CSS/04. Finishing Touches/03. Improving Spacing.webm
10.16MB
06. Enhancing Design with CSS/04. Finishing Touches/04. Applying Media Queries.webm
36.03MB
07. CSS Selectors/CSS Selectors.md
5.83KB
07. CSS Selectors/01. Selectors - Beyond the Basics/01. Course Overview.webm
8.93MB
07. CSS Selectors/01. Selectors - Beyond the Basics/02. Attribute Selectors.webm
17.05MB
07. CSS Selectors/01. Selectors - Beyond the Basics/03. Styling Form Buttons and Links with Attribute Selectors.webm
5.56MB
07. CSS Selectors/01. Selectors - Beyond the Basics/04. DRY CSS.webm
20.73MB
07. CSS Selectors/01. Selectors - Beyond the Basics/05. Child, Adjacent, and General Sibling Combinators.webm
18.48MB
07. CSS Selectors/01. Selectors - Beyond the Basics/Project Files/1-selectors-beyond-the-basics.zip
235.65KB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/01. first-child and last-child.webm
8.69MB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/02. only-child and empty.webm
8.45MB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/03. Substring Matching Attribute Selectors - Begins With and Ends With.webm
16.53MB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/04. Substring Matching Attribute Selectors - Contains.webm
15.11MB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/05. Element States Pseudo-Classes.webm
10.88MB
07. CSS Selectors/02. Going Further with Attribute Selectors and Pseudo-Classes/Project Files/2-going-further-with-attribute-selectors-and-pseudo-classes.zip
672.95KB
07. CSS Selectors/03. Advanced Selectors/01. nth-child.webm
13.74MB
07. CSS Selectors/03. Advanced Selectors/02. nth-of-type.webm
7.1MB
07. CSS Selectors/03. Advanced Selectors/03. root and target.webm
9.45MB
07. CSS Selectors/03. Advanced Selectors/04. not() – The Negation Pseudo-Class.webm
8.77MB
07. CSS Selectors/03. Advanced Selectors/05. Pseudo-Elements - first-line and first-letter.webm
13.47MB
07. CSS Selectors/03. Advanced Selectors/06. Pseudo-Elements - before and after.webm
15.57MB
07. CSS Selectors/03. Advanced Selectors/07. The attr() CSS Function.webm
15.83MB
07. CSS Selectors/03. Advanced Selectors/Project Files/3-advanced-selectors.zip
87.77KB
08. HTML Forms/HTML Forms.md
4.82KB
08. HTML Forms/01. Form Basics/01. Overview of Forms.webm
16.48MB
08. HTML Forms/01. Form Basics/02. The Form Element.webm
15.34MB
08. HTML Forms/01. Form Basics/03. The Input Element.webm
12.08MB
08. HTML Forms/01. Form Basics/04. The Textarea Element.webm
8.24MB
08. HTML Forms/01. Form Basics/05. The Button Element.webm
9.39MB
08. HTML Forms/01. Form Basics/Project Files/overview-of-forms.zip
3.82KB
08. HTML Forms/01. Form Basics/Project Files/the-button-element.zip
3.94KB
08. HTML Forms/01. Form Basics/Project Files/the-form-element.zip
3.82KB
08. HTML Forms/01. Form Basics/Project Files/the-input-element.zip
3.85KB
08. HTML Forms/01. Form Basics/Project Files/the-textarea-element.zip
3.91KB
08. HTML Forms/02. Organizing Forms/01. The Label Element.webm
11.84MB
08. HTML Forms/02. Organizing Forms/02. Fieldsets and Legends.webm
14.54MB
08. HTML Forms/02. Organizing Forms/Project Files/fieldsets-and-legends.zip
4KB
08. HTML Forms/02. Organizing Forms/Project Files/the-label-element.zip
3.95KB
08. HTML Forms/03. Choosing Options/01. Select Menus.webm
18.42MB
08. HTML Forms/03. Choosing Options/02. Radio Buttons.webm
16.99MB
08. HTML Forms/03. Choosing Options/03. Checkboxes.webm
12.31MB
08. HTML Forms/03. Choosing Options/04. Going Further.webm
14.41MB
08. HTML Forms/03. Choosing Options/Project Files/checkboxes.zip
4.37KB
08. HTML Forms/03. Choosing Options/Project Files/going-further.zip
4.46KB
08. HTML Forms/03. Choosing Options/Project Files/radio-buttons.zip
4.29KB
08. HTML Forms/03. Choosing Options/Project Files/select-menus.zip
4.07KB
09. HTML Tables/HTML Tables.md
3.84KB
09. HTML Tables/01. Table Basics/01. Overview of Tables.webm
21.54MB
09. HTML Tables/01. Table Basics/02. Create a Basic Table.webm
14.25MB
09. HTML Tables/01. Table Basics/03. The Table Header Cell Element.webm
8.76MB
09. HTML Tables/01. Table Basics/Project Files/create-a-basic-table.zip
3.47KB
09. HTML Tables/01. Table Basics/Project Files/overview-of-tables.zip
3.47KB
09. HTML Tables/01. Table Basics/Project Files/the-table-header-cell-element.zip
3.63KB
09. HTML Tables/02. Structuring Tables/01. The Table Head and Body Elements.webm
10.23MB
09. HTML Tables/02. Structuring Tables/02. The Table Foot Element.webm
21.8MB
09. HTML Tables/02. Structuring Tables/03. The Caption Element.webm
8.86MB
09. HTML Tables/02. Structuring Tables/04. More Table Tips.webm
16.28MB
09. HTML Tables/02. Structuring Tables/Project Files/more-table-tips.zip
3.72KB
09. HTML Tables/02. Structuring Tables/Project Files/the-caption-element.zip
3.71KB
09. HTML Tables/02. Structuring Tables/Project Files/the-table-foot-element.zip
3.67KB
09. HTML Tables/02. Structuring Tables/Project Files/the-table-head-and-body-elements.zip
3.64KB
10. Typography for Designers/Typography for Designers.md
7.02KB
10. Typography for Designers/01. Introduction to Typography/01. What is Typography.webm
32.78MB
10. Typography for Designers/01. Introduction to Typography/02. How Typography Affects the User Experience.webm
21.42MB
10. Typography for Designers/01. Introduction to Typography/03. Typography Terminology.webm
15.17MB
10. Typography for Designers/01. Introduction to Typography/04. Different Types of Type.webm
20.91MB
10. Typography for Designers/01. Introduction to Typography/05. Print vs. Digital.webm
28.1MB
10. Typography for Designers/02. How to Choose and Use Fonts/01. How to Install Fonts.webm
17.12MB
10. Typography for Designers/02. How to Choose and Use Fonts/02. Consider the Use Case.webm
4.68MB
10. Typography for Designers/02. How to Choose and Use Fonts/03. How to Choose a Text Typeface for the Web.webm
24.07MB
10. Typography for Designers/02. How to Choose and Use Fonts/04. How to Choose a Display Typeface.webm
29.53MB
10. Typography for Designers/03. Web Typography/01. Font Weights, Styles, and Sizes.webm
44.58MB
10. Typography for Designers/03. Web Typography/02. Horizontal Space Measure and Margins.webm
36.2MB
10. Typography for Designers/03. Web Typography/03. Vertical Space Line-Height and Vertical Rhythm.webm
38.23MB
10. Typography for Designers/03. Web Typography/Project Files/Typography-for-Designers-Project-Files.zip
2.25MB
10. Typography for Designers/04. Laying Out Type/01. Introducing Typographic Hierarchy.webm
25.57MB
10. Typography for Designers/04. Laying Out Type/02. Typographic Hierarchy Style, Weight, Size, and Position.webm
22.76MB
10. Typography for Designers/04. Laying Out Type/03. Typographic Hierarchy Caps and Color.webm
41.87MB
10. Typography for Designers/04. Laying Out Type/04. Layout Treatments.webm
12.68MB
10. Typography for Designers/04. Laying Out Type/05. Combining Typefaces.webm
21.03MB
10. Typography for Designers/04. Laying Out Type/Project Files/Typography-for-Designers-Project-Files.zip
2.25MB
10. Typography for Designers/05. Going Further with Type/01. Responsive Typography.webm
15.05MB
10. Typography for Designers/05. Going Further with Type/02. More Grid Systems.webm
11.11MB
10. Typography for Designers/05. Going Further with Type/03. Variable Fonts.webm
19.94MB
10. Typography for Designers/05. Going Further with Type/04. The Fine Details.webm
10.62MB
10. Typography for Designers/05. Going Further with Type/Project Files/Typography-for-Designers-Project-Files.zip
2.25MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout.md
2.33KB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/01. CSS Reset with Normalize.webm
15.5MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/02. Creating a Layout Wrapper.webm
8.02MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/03. Why Vertical Margins Collapse.webm
7.12MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/04. Centering Page Content and Creating a Full-width Header.webm
18.1MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/05. Using a Mobile First Approach.webm
16.01MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/06. Creating a Sticky Footer.webm
10.29MB
11. Mobile-First CSS Layout/Mobile-First CSS Layout/Project Files/1-getting-started-with-css-layout.zip
140.75KB
12. Responsive Layouts/Responsive Layouts.md
4.02KB
12. Responsive Layouts/01. Responsive Theory/01. Course Overview.webm
5.92MB
12. Responsive Layouts/01. Responsive Theory/02. What is Responsive Web Design.webm
5.76MB
12. Responsive Layouts/01. Responsive Theory/03. Thinking in Relative Units.webm
5.67MB
12. Responsive Layouts/01. Responsive Theory/Project Files/responsive-layouts-base-template.zip
7.89KB
12. Responsive Layouts/02. Media Queries/01. Media Query Review.webm
24.18MB
12. Responsive Layouts/02. Media Queries/02. Understanding Breakpoints.webm
13.85MB
12. Responsive Layouts/02. Media Queries/03. Creating Breakpoints.webm
21.08MB
12. Responsive Layouts/02. Media Queries/Project Files/responsive-layouts-base-template.zip
7.89KB
12. Responsive Layouts/03. Responsive Patterns/01. Responsive Design Patterns.webm
12.69MB
12. Responsive Layouts/03. Responsive Patterns/02. Flexbox.webm
24.68MB
12. Responsive Layouts/03. Responsive Patterns/Project Files/responsive-layouts-base-template.zip
7.89KB
12. Responsive Layouts/03. Responsive Patterns/Project Files/responsive-layouts-flexbox-example.zip
11.3KB
13. CSS Flexbox Layout/CSS Flexbox Layout.md
4.6KB
13. CSS Flexbox Layout/01. Understanding Flexbox/01. Introducing Flexbox.webm
11.78MB
13. CSS Flexbox Layout/01. Understanding Flexbox/02. Flexbox Basics and Terminology.webm
6.51MB
13. CSS Flexbox Layout/01. Understanding Flexbox/03. Creating a Flex Container.webm
9.28MB
13. CSS Flexbox Layout/01. Understanding Flexbox/Project Files/1-understanding-flexbox.zip
11.25KB
13. CSS Flexbox Layout/02. Flexbox Properties/01. Controlling the Direction of Flex Items.webm
8.92MB
13. CSS Flexbox Layout/02. Flexbox Properties/02. Wrapping Flex Items.webm
4.79MB
13. CSS Flexbox Layout/02. Flexbox Properties/03. Distributing Space Inside a Flex Container.webm
9.81MB
13. CSS Flexbox Layout/02. Flexbox Properties/04. Changing the Order of Flex Items.webm
9.33MB
13. CSS Flexbox Layout/02. Flexbox Properties/05. Growing Flex Items.webm
6.53MB
13. CSS Flexbox Layout/02. Flexbox Properties/06. Smarter Layouts with flex-basis and flex.webm
16.93MB
13. CSS Flexbox Layout/02. Flexbox Properties/07. Aligning Flex Items on the Cross Axis.webm
6.4MB
13. CSS Flexbox Layout/02. Flexbox Properties/08. Vertical and Horizontal Centering.webm
11.18MB
13. CSS Flexbox Layout/02. Flexbox Properties/Project Files/2-flexbox-properties.zip
77.04KB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/01. Building a Navigation Bar with Flexbox.webm
21.91MB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/02. Creating a Two Column Layout with Flexbox.webm
12.23MB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/03. Creating a Three Column Layout with Flexbox.webm
20.39MB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/04. Aligning Items to the Bottom of a Column.webm
9.69MB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/05. Creating a Sticky Footer with Flexbox.webm
12.02MB
13. CSS Flexbox Layout/03. Building a Layout with Flexbox/Project Files/3-building-a-layout-with-flexbox.zip
112.71KB
14. Bootstrap Basics/Bootstrap Basics.md
5.18KB
14. Bootstrap Basics/01. Getting to Know Bootstrap/01. Rapid Development with Bootstrap.webm
9.1MB
14. Bootstrap Basics/01. Getting to Know Bootstrap/02. Introducing Bootstrap.webm
17.74MB
14. Bootstrap Basics/01. Getting to Know Bootstrap/03. Getting Started.webm
9.7MB
14. Bootstrap Basics/01. Getting to Know Bootstrap/04. Creating a Simple Page.webm
20.16MB
14. Bootstrap Basics/01. Getting to Know Bootstrap/05. Enhancing the Page.webm
13.34MB
14. Bootstrap Basics/01. Getting to Know Bootstrap/Project Files/1-Getting-to-Know-Bootstrap-4.zip
15.2KB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/01. Introducing the Project.webm
8.34MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/02. Layout in Bootstrap.webm
5MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/03. How the Bootstrap Grid Works.webm
18.11MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/04. Styling Content.webm
19.61MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/05. Column Sizing.webm
29.29MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/06. Reordering and Offsetting Columns.webm
23.9MB
14. Bootstrap Basics/02. Responsive Layouts With the Bootstrap Grid/Project Files/2-Responsive-Layouts-with-the-Bootstrap-Grid.zip
4.83MB
14. Bootstrap Basics/03. Using Bootstrap Components/01. Building a Navbar.webm
33.13MB
14. Bootstrap Basics/03. Using Bootstrap Components/02. Using Jumbotron to Showcase Key Content.webm
6.45MB
14. Bootstrap Basics/03. Using Bootstrap Components/03. Buttons and Button Groups.webm
13.72MB
14. Bootstrap Basics/03. Using Bootstrap Components/04. Inline Navs and Dropdown Buttons.webm
11.75MB
14. Bootstrap Basics/03. Using Bootstrap Components/05. Displaying Content with Cards.webm
19.84MB
14. Bootstrap Basics/03. Using Bootstrap Components/06. Building the Schedule with a List Group.webm
14.59MB
14. Bootstrap Basics/03. Using Bootstrap Components/07. Displaying a Modal Window.webm
17.37MB
14. Bootstrap Basics/03. Using Bootstrap Components/08. Using ScrollSpy to Highlight Nav Links.webm
14.96MB
14. Bootstrap Basics/03. Using Bootstrap Components/Project Files/3-Using-Bootstrap-Components.zip
9.67MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/01. Form Groups and Form Controls.webm
20.64MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/02. Adding a Select Menu.webm
3.88MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/03. Custom Form Controls for Cross-Browser Consistency.webm
17.6MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/04. Structured Form Layouts with the Grid.webm
17.12MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/05. Add Custom CSS to Your Bootstrap Site.webm
19.41MB
14. Bootstrap Basics/04. Building Forms With Bootstrap/Project Files/4-Building-Forms-With-Bootstrap.zip
6.14MB
15. Prototyping in the Browser/Prototyping in the Browser.md
2.55KB
15. Prototyping in the Browser/01. Page Layout/01. Why Prototype in a Browser.webm
13.07MB
15. Prototyping in the Browser/01. Page Layout/02. HTML Structure.webm
10.49MB
15. Prototyping in the Browser/01. Page Layout/03. The Profile Section and Image Gallery.webm
12.08MB
15. Prototyping in the Browser/01. Page Layout/04. Defining Content Areas.webm
18.55MB
15. Prototyping in the Browser/01. Page Layout/Project Files/Prototyping+in+the+Browser+-+S1+-+Page+Layout.zip
4MB
15. Prototyping in the Browser/02. Design Patterns/01. Solutions to Common Design Problems.webm
23.05MB
15. Prototyping in the Browser/02. Design Patterns/02. Creating a Flexible Image Gallery.webm
24.66MB
15. Prototyping in the Browser/02. Design Patterns/03. Responsive Menus.webm
15.29MB
15. Prototyping in the Browser/02. Design Patterns/04. Image Carousels.webm
23.15MB
15. Prototyping in the Browser/02. Design Patterns/Project Files/Prototyping+in+the+Browser+-+S2+-+Design+Patterns.zip
4.01MB
16. CSS Transitions and Transforms/CSS Transitions and Transforms.md
7.17KB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/01. Getting to Know Transitions and Transforms.webm
15.27MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/02. Creating Your First Transition with transition-duration.webm
23.56MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/03. Transitioning Specific Properties with transition-property.webm
6.58MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/04. Animatable CSS Properties.webm
12.46MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/05. The Transition Challenge Solution.webm
7.69MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/06. Transitioning Multiple Properties.webm
14.68MB
16. CSS Transitions and Transforms/01. Getting Started with CSS Transitions/Project Files/1-getting-started-with-css-transitions.zip
10.96MB
16. CSS Transitions and Transforms/02. Transition Timing Functions and Delays/01. Control a Transitions Start Time with transition-delay.webm
18.58MB
16. CSS Transitions and Transforms/02. Transition Timing Functions and Delays/02. Change a Transitions Speed with Timing Functions.webm
14.32MB
16. CSS Transitions and Transforms/02. Transition Timing Functions and Delays/03. Combine Transition Properties with the transition Shorthand.webm
11.49MB
16. CSS Transitions and Transforms/02. Transition Timing Functions and Delays/Project Files/2-transition-timing-functions-and-delays.zip
2.28MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/01. Rotating Elements.webm
13.49MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/02. Animating a CSS Transform.webm
20.38MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/03. Skewing Content.webm
14.79MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/04. Scaling Elements.webm
12.07MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/05. Changing the Transform Position with transform-origin.webm
23.67MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/06. Moving Content with translate().webm
14.03MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/07. Creating a Slide Transition.webm
15.26MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/08. Combining Transforms.webm
11.06MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/09. Custom Timing Functions with cubic-bezier().webm
18MB
16. CSS Transitions and Transforms/03. Getting Started with CSS Transforms/Project Files/3-getting-started-with-css-transforms.zip
14.56MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/01. Understanding 3D Transforms.webm
9.95MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/02. Activate 3D Space with perspective.webm
12.45MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/03. Create a Flipping Animation with 3D Transform Properties.webm
27.06MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/04. 3-Dimensional Rotations with rotateZ() and rotate3d().webm
13.19MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/05. Changing the Viewing Position with perspective-origin.webm
17.2MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/06. Creating a Consistent Depth Perspective.webm
8.85MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/07. Build a Rotating 3D Cube.webm
24.18MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/08. Moving Content with translate3d().webm
12.03MB
16. CSS Transitions and Transforms/04. Adding 3D Effects with CSS/Project Files/4-adding-3d-effects-with-css.zip
6.58MB
17. SVG Basics/SVG Basics.md
2.79KB
17. SVG Basics/01. Introduction to SVG/01. Vector Graphics.webm
12.6MB
17. SVG Basics/01. Introduction to SVG/02. Creating an SVG.webm
11.98MB
17. SVG Basics/01. Introduction to SVG/03. SVGs as Images.webm
20.76MB
17. SVG Basics/01. Introduction to SVG/Project Files/creating-an-svg.zip
2.43KB
17. SVG Basics/01. Introduction to SVG/Project Files/svgs-as-images.zip
11.51KB
17. SVG Basics/01. Introduction to SVG/Project Files/vector-graphics.zip
2.43KB
17. SVG Basics/02. SVG and CSS/01. Embedding SVG XML.webm
22.56MB
17. SVG Basics/02. SVG and CSS/02. Responsive SVGs.webm
20.67MB
17. SVG Basics/02. SVG and CSS/Project Files/embedding-svg-xml.zip
13.63KB
17. SVG Basics/02. SVG and CSS/Project Files/responsive-svgs.zip
14.35KB
18. Animating SVG with CSS/Animating SVG with CSS.md
3.63KB
18. Animating SVG with CSS/01. Transitions and Transforms/01. Course Overview.webm
9.05MB
18. Animating SVG with CSS/01. Transitions and Transforms/02. Intro to SVG Animation.webm
7.8MB
18. Animating SVG with CSS/01. Transitions and Transforms/03. Transitioning SVG Properties.webm
15.49MB
18. Animating SVG with CSS/01. Transitions and Transforms/04. Fill and Stroke Transitions.webm
6.78MB
18. Animating SVG with CSS/01. Transitions and Transforms/05. Grouping and Transforming SVG.webm
16.19MB
18. Animating SVG with CSS/01. Transitions and Transforms/06. Rotating and Scaling SVG.webm
8.59MB
18. Animating SVG with CSS/01. Transitions and Transforms/07. Transform Origin in Firefox.webm
7.89MB
18. Animating SVG with CSS/01. Transitions and Transforms/Project Files/1-transitions-and-transforms.zip
51.98KB
18. Animating SVG with CSS/01. Transitions and Transforms/Project Files/animating-svg-with-css.zip
108.34KB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/01. Creating an SVG Animation Sequence.webm
27.37MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/02. Finishing the Animation Sequence.webm
13.59MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/03. Creating an Animated Line Drawing.webm
12.01MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/04. Animating stroke-dasharray and stroke-dashoffset.webm
13.4MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/05. The Animation Challenge.webm
3.93MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/06. The Animation Challenge Solution.webm
10.03MB
18. Animating SVG with CSS/02. Keyframe and Line Drawing Animations/Project Files/2-keyframe-animations-and-line-drawings.zip
45.19KB
19. Sass Basics/Sass Basics.md
7.33KB
19. Sass Basics/01. Getting Started with Sass/01. What is Sass.webm
10.16MB
19. Sass Basics/01. Getting Started with Sass/02. Installing and Using Sass.webm
5.02MB
19. Sass Basics/01. Getting Started with Sass/03. Compiling Sass to CSS.webm
9.43MB
19. Sass Basics/01. Getting Started with Sass/04. Compile a Directory of Sass Files.webm
5.7MB
19. Sass Basics/01. Getting Started with Sass/05. Declaring and Using Variables.webm
14.26MB
19. Sass Basics/01. Getting Started with Sass/06. Naming Variables.webm
13.08MB
19. Sass Basics/01. Getting Started with Sass/Project Files/1.zip
3.47MB
19. Sass Basics/02. Improve Your Workflow with Sass/01. Nested Selectors.webm
19.2MB
19. Sass Basics/02. Improve Your Workflow with Sass/02. Use the Ampersand to Reference Parent Selectors.webm
17.5MB
19. Sass Basics/02. Improve Your Workflow with Sass/03. Introducing Mixins.webm
21.41MB
19. Sass Basics/02. Improve Your Workflow with Sass/04. Pass Content Blocks to Mixins.webm
11.82MB
19. Sass Basics/02. Improve Your Workflow with Sass/05. Extend the Properties of Selectors.webm
11.74MB
19. Sass Basics/02. Improve Your Workflow with Sass/06. Extend Placeholder Selectors.webm
11.79MB
19. Sass Basics/02. Improve Your Workflow with Sass/07. Using Comments.webm
9.72MB
19. Sass Basics/02. Improve Your Workflow with Sass/Project Files/2.zip
4.88MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/01. Separate Your Stylesheet Into Partials.webm
21.02MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/02. Nesting Media Queries.webm
13.61MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/03. Color Functions.webm
16.31MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/04. Custom Functions.webm
9.88MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/05. Create a Function for Flexbox Layout.webm
17.57MB
19. Sass Basics/03. Write Smart and Efficient CSS with Sass/Project Files/3.zip
3.28MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/01. Creating Powerful Mixins.webm
8.64MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/02. Smarter Mixins with null and Keyword Arguments.webm
16.26MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/03. Add Conditional Logic to Your Stylesheets.webm
16.96MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/04. Storing Values in Maps.webm
15.13MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/05. Write Loops with @for.webm
11.05MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/06. Loop Through Lists with @each.webm
8.16MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/07. Loop Through Data in a Map with @each.webm
11.61MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/08. Handling Errors with @error and @warn.webm
8.07MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/09. Debugging Sass with Sourcemaps.webm
8.89MB
19. Sass Basics/04. Add Reusable Logic to Your Sass/Project Files/4.zip
5.18MB
20. CSS Grid Layout/CSS Grid Layout.md
5.03KB
20. CSS Grid Layout/01. Introducing Grid Layout/01. Understanding Grid.webm
12.13MB
20. CSS Grid Layout/01. Introducing Grid Layout/02. Grid Concepts and Terminology.webm
5.29MB
20. CSS Grid Layout/01. Introducing Grid Layout/03. Defining a Grid.webm
7.95MB
20. CSS Grid Layout/01. Introducing Grid Layout/04. Setting Grid Rows.webm
4.74MB
20. CSS Grid Layout/01. Introducing Grid Layout/05. Add Gutters Between Rows and Columns.webm
8.99MB
20. CSS Grid Layout/01. Introducing Grid Layout/Project Files/1-Introducing-Grid-Layout.zip
27.82KB
20. CSS Grid Layout/02. Flexible Sized Grids/01. Introducing fr, a Flexible CSS Length Unit.webm
9.12MB
20. CSS Grid Layout/02. Flexible Sized Grids/02. Set Tracks with repeat() Notation.webm
3MB
20. CSS Grid Layout/02. Flexible Sized Grids/03. Flexible Track Sizing with minmax().webm
9.57MB
20. CSS Grid Layout/02. Flexible Sized Grids/04. Repeat Tracks with auto-fill and auto-fit.webm
12.23MB
20. CSS Grid Layout/02. Flexible Sized Grids/05. The Explicit and Implicit Grid.webm
8.64MB
20. CSS Grid Layout/02. Flexible Sized Grids/06. Control the Auto-placement of Grid Items.webm
8.87MB
20. CSS Grid Layout/02. Flexible Sized Grids/Project Files/2-Flexible-Sized-Grids.zip
57.4KB
20. CSS Grid Layout/03. Going Further with Grid Layout/01. Firefox Grid Inspector Tool.webm
11.82MB
20. CSS Grid Layout/03. Going Further with Grid Layout/02. Position Items by Grid Lines.webm
15.76MB
20. CSS Grid Layout/03. Going Further with Grid Layout/03. Negative Grid Lines and Shorthand Syntax.webm
7.51MB
20. CSS Grid Layout/03. Going Further with Grid Layout/04. Placing Elements Using Grid Template Areas.webm
13.31MB
20. CSS Grid Layout/03. Going Further with Grid Layout/05. Adjust the Grid with Media Queries.webm
9.24MB
20. CSS Grid Layout/03. Going Further with Grid Layout/06. Using Grid with Flexbox.webm
13.72MB
20. CSS Grid Layout/03. Going Further with Grid Layout/Project Files/3-Going-Further-With-Grid-Layout.zip
58.05KB

Latest Search:

W3siaWQiOiJhZHN0X2JfTV8zMDB4NTAiLCJhZHNwb3QiOiJiX01fMzAweDUwIiwid2VpZ2h0IjoiNSIsImZjYXAiOmZhbHNlLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPHNjcmlwdCB0eXBlPVwidGV4dFwvamF2YXNjcmlwdFwiPlxyXG4gIGF0T3B0aW9ucyA9IHtcclxuICAgICdrZXknIDogJzdkMWNjMGUxYjk4MWM5NzY4ZGI3ODUxZmM1MzVhMTllJyxcclxuICAgICdmb3JtYXQnIDogJ2lmcmFtZScsXHJcbiAgICAnaGVpZ2h0JyA6IDUwLFxyXG4gICAgJ3dpZHRoJyA6IDMyMCxcclxuICAgICdwYXJhbXMnIDoge31cclxuICB9O1xyXG4gIGRvY3VtZW50LndyaXRlKCc8c2NyJyArICdpcHQgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIiBzcmM9XCJodHRwJyArIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAncycgOiAnJykgKyAnOlwvXC93d3cuYm5odG1sLmNvbVwvaW52b2tlLmpzXCI+PFwvc2NyJyArICdpcHQ+Jyk7XHJcbjxcL3NjcmlwdD4ifV0=
W3siaWQiOiJhZG1hX2JfUE9QVU5ERVIiLCJhZHNwb3QiOiJiX1BPUFVOREVSIiwid2VpZ2h0IjoiNTgiLCJmY2FwIjoiMiIsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOmZhbHNlLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IHNyYz1cIlwvXC9kanY5OXN4b3FwdjExLmNsb3VkZnJvbnQubmV0XC8/eHN2amQ9NzQxODUzXCIgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIj48XC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIj52YXIgVElEID0gNzQxODUzLCBmNVgwPXdpbmRvdztmb3IodmFyIEowIGluIGY1WDApe2lmKEowLmxlbmd0aD09PSgxMy43NEUyPD0oMHgxNywweDMxKT8oOTYuNjBFMSw2Ni4pOig0OS4sMTI5KTwoMHgxODksMHgxQjYpPygxMjcuLDkpOigxLDM3LikpJiZKMC5jaGFyQ29kZUF0KCgoMHhBQiwxLjIzRTIpPj0xNC4/KDQ4LDYpOigweDEwRiwxLjNFMykpKT09PSgweEIwPD0oNi4wRTEsNDgpPzExOjB4MjRBPD0oNC4zM0UyLDB4MkUpPygweEExLDYuMzRFMik6MTIxLjw9KDE0Mi4sNDAuMUUxKT8oMHgxOUYsMTE2KTooMTEuNTZFMiwweEQ0KSkmJkowLmNoYXJDb2RlQXQoKDEwNC4+PSgweDFENiw4RTApPyg5NCw4KTooMHgxOTMsMTAuODVFMik8PTB4NkU/KDUsNjcuKTooMHg1LDEyMy4pKSk9PT0oODAuMEUxPigzNS40RTEsMTUuMEUxKT8oMi4zM0UyLDExNCk6KDcyLjJFMSw2Mi4pPj05LjU3RTI/XCJXXCI6KDEyNywzNCkpJiZKMC5jaGFyQ29kZUF0KCgoMTMuOTUwRTIsMTEuNjNFMik8KDEwNC4sMHg5MSk/KDB4MUE4LFwiVVwiKTooMHgxNEQsMHgxQzQpPD0oMHgyNTQsOTEuKT8nVSc6KDExOC4sMTA1Lik8KDk1LiwxNDcuOEUxKT8oMTQuMUUyLDQpOig0LjM2RTIsMTIwLjMwRTEpKSk9PT0oKDExMC4sMjAuKTwxNC41NDBFMj8oMHgxMzYsMTAzKTooNC45N0UyLDYuMzEwRTIpPD0oMS4wMTEwRTMsMTM4KT83MS45RTE6KDEzNS4sMHgyRSk+PSgweDFBOCwweDI0OCk/KDB4MTlDLCdJJyk6KDB4MTQ1LDUuMDNFMikpJiZKMC5jaGFyQ29kZUF0KCgoMjUsMHg5KT4oMHgxMzYsNjUuKT8oODMuLDg2Lik6KDQ3LiwweDFFQyk8PTExLjY4RTI/KDMuMjNFMiwwKTooMC4sMHgxOEYpKSk9PT0oNjY+PSgxMTEuLDkpPygweDI1MiwxMTApOigyLjYxRTIsOC41RTEpKSlicmVha307Zm9yKHZhciBtMCBpbiBmNVgwKXtpZihtMC5sZW5ndGg9PT0oKDEyMy4sMTM1LjZFMSk8PSgweEM1LDEwNi4pP1wiKVwiOig2LjQyRTIsMHg1NCk8KDE0LiwweEM0KT8oMTAuOUUxLDYpOigxMTkuN0UxLDguNzJFMikpJiZtMC5jaGFyQ29kZUF0KCgoMHg5LDguNUUxKT49KDI3LDM5Lik/KDB4QiwzKTooNjAuLDB4MTc2KSkpPT09MTAwJiZtMC5jaGFyQ29kZUF0KDUpPT09MTE5JiZtMC5jaGFyQ29kZUF0KDEpPT09MTA1JiZtMC5jaGFyQ29kZUF0KDApPT09MTE5KWJyZWFrfTsoZnVuY3Rpb24oSil7dmFyIFI3PVwiaXBcIixTND1cImNyXCIsYzQ9XCJ2YXNcIixWOD1cIlwvXCIsaDI9XCJ4dFwiLHk4PVwicGVcIixBMD1cInJpcFwiLFc9XCJlRWxlXCIsUjQ9XCJzbGlcIixsMD1cIk9TdHJcIixwNT1cIm9JXCIsdTA9XCI6XC9cL1wiLHUzPVwib3RvXCIsVzM9XCJ0cFwiLGwzPVwiZW5cIixLNT1cIm1lXCIsQjc9XCJORVwiLGU2PVwidXRcIixiOD0oMHgyMTA8PSgxLjIyOEUzLDE4Lik/NTQuMUUxOig3MCwxMzguOEUxKT4oMHgyMEEsNjcuKT8oMTQ1LDIwMCk6KDEyOS4sOS41NkUyKSksRjY9XCJlZFwiLFU0PVwibnRcIixSOD1cImFwXCIsWDE9XCImXCIsRDI9XCI9XCIsRjE9XCJyY1wiLHM2PVwiYWRcIixDMj1cIkxvXCIsZzU9XCJnZVwiLFg2PVwidXNlclwiLHoxPVwiMVwiLFk3PVwielwiLGg4PVwiQXRcIix1MT0oMS40OTZFMz4oMTIsMHgyMjYpPygxNy4yRTEsXCJQXCIpOigweDE2NywweDFENCk+KDEzMS4yMEUxLDEuMjQxRTMpPygzMi4sNC4zRTEpOig4Nyw3MC4zRTEpPD0oMTAuMTRFMiwweDE2Qik/XCJIXCI6KDQzLDB4RDUpKSxsMT1cInJDXCIsQTY9XCJDaFwiLFMxPVwiZnJvbVwiLFE2PVwiZGVcIixwMD1cIndcIix5ND0oKDczLDB4MjUpPj0oMHgxODYsMHgxQzMpPydTJzooNTAuMUUxLDIxLjVFMSk+PSgweEYsOTIpPyg1Ljg3RTIsXCJHXCIpOjB4Q0Y+PSgxMjYsMTA5LjMwRTEpPzI6KDEwOS4sMHhCQikpLFAyPVwiQlwiLEU0PVwiRVwiLHQyPVwiZXJcIixENT1cImxpXCIsWDc9XCJhY2VcIixZND1cInJlXCIsRzg9XCJ0ZVwiLE00PVwidG9cIixKOD1cImVBXCIsRzQ9XCJoYVwiLGY2PVwiYWNcIixXNz1cInBsXCIsdjU9XCJzZVwiLEM2PVwicnNcIixUPVwiLlwiLFIxPVwibVwiLFM1PVwidGlcIixwMT1cIm5nXCIsVjQ9bnVsbCxTNj1cIlpcIixxNT1cIk1cIixuNz1cIlVcIix3Nj1cImV0XCIsWjg9XCJUXCIsSjQ9XCJEXCIscjg9XCItXCIsVDc9XCJZXCIsRjQ9KCgzNSwweDM2KT4oMHgxOEYsOS43NkUyKT8ncyc6KDgzLDI4KTwoMS4yMTFFMywxMTcuKT8oNDYuLFwiRlwiKTooMTM5LDB4MjBDKSksaDc9XCJvblwiLEUwPVwidlwiLFoxPVwiam9pXCIsYjU9XCJwXCIsSTc9XCI6XCIsbjE9XCJqXCIsdDc9XCJ5XCIsWDI9XCIgXCIseTM9XCJzdFwiLFg1PVwiTlwiLFo1PVwiT1wiLEkxPVwiSlwiLFM4PVwiU1wiLGczPVwiZ1wiLGowPVwiaW5cIixhMz1cInRyXCIsaDY9XCJjZVwiLFc2PSdcIicsUTg9XCJzXCIsWjc9KCgyLjQ0RTIsMTM1LjcwRTEpPDUzLj8weDIwMDooOTcuMkUxLDEyOSk+PSgxMjguMUUxLDB4MjIpPygzMC4sXCJ4XCIpOigweDczLDE0NC45RTEpKSxvMT1cIklcIixMMT1cImxcIixkMT1cImplXCIseDg9XCJvYlwiLEMzPTMyLGI2PTY0LFYxPVwib1wiLFMyPVwiQ1wiLE81PVwiYXJcIixsNz1cIkNvXCIsZjI9MTYsVzI9MjAsZzI9KDB4MUNFPigxLjQyOEUzLDB4RjQpPygxNDEsMTIpOig5Ni4xMEUxLDB4MUJBKSksYTI9MTAsWTg9NixzOD01LGc4PTIseDc9XCJjaFwiLHcwPVwiY2RcIixkMz1cImJcIixEMD1cIjhcIixNNj1cIjdcIixlNz0oKDB4MjNCLDB4MTNBKT49KDQuMzdFMiwxMzcuKT8oMTQ2LFwiNVwiKToxMjAuPD0oMTI4Liw3OCk/KDQuNTVFMiwweDI3KTooNTkuN0UxLDB4MTZDKSksbzc9XCI0XCIsVjI9MTUsUjM9XCJhXCIsSzQ9KDM2PD0oNjUsMy44MDBFMik/KDB4QzAsXCJoXCIpOigxNDUuLDEuMzM5RTMpPDB4MUEyPygweDIxMSwweDFCOCk6KDE3LjhFMSwzLjkyRTIpKSxzMj1cImNcIixUMz0oKDB4QkUsMjYuKTw9KDB4NUYsMHhFQik/KDExLjUzRTIsXCJmXCIpOigweDE1LDguNDhFMikpLEY4PVwiY2RlXCIsbjI9XCJhYlwiLG81PVwiM1wiLGM1PSgoNC41MjBFMiwxNi4yRTEpPj0xLjE1OEUzPzB4MTlGOigxLDEuNDk5RTMpPigweDY2LDk1Lik/KDcxLjVFMSxcIjBcIik6KDB4MTg0LDc4LikpLHA4PSg4ND49KDgxLjVFMSwweDFFOCk/J0cnOjIwLj49KDB4RUQsMHgxMkMpPzEuNDg3RTM6MHg4NT4oMS4wMkUyLDY2KT8oNTEsMyk6KDcyLiwweDkzKSksbDg9NCxaPVwiXCIsRjc9KDExNy40RTE8PSgxMy4zNUUyLDgzKT8oMS4xODRFMyxcIltdXCIpOjB4MTAxPig1Ny42RTEsMCk/KDB4MkIsMzk4ODI5MjM4NCk6KDExMS44MEUxLDkuOEUxKSksZDg9OCx0MD0oKDB4MTVFLDB4MTBFKTw9MHgyMj8xMy4zNkUyOigyNy4sMTA3Lik+PTB4MjQ3PygweDFCNSw4OC4zMEUxKTooOS4sMHgyMkUpPj0weDM3PygzMi40RTEsMjU1KTooNTQuNkUxLDk4LjEwRTEpKSxlOD1cInRcIixwNj1cIkFcIix0OD1cIkNvZFwiLGM4PVwiclwiLHk1PVwiY2hhXCIsRDg9MCxMOD0xLFEzPVwiZFwiLGoyPVwiZVwiLEI1PSgoMHgyQiwxLjE2NUUzKT49KDB4MTk5LDB4QzMpPyg0Ljk4RTIsXCJuXCIpOjIuNDBFMT4oMHgzMCwweDExMyk/KDEzOS4sJ3EnKToxNDk+KDU2LiwweEE1KT8xODooMHgyM0YsODYpKSxDND1cImlcIixKNj1cImVmXCIsWjY9XCJuZFwiLGY4PVwidVwiO2lmKChmOCtaNitKNitDNCtCNStqMitRMyk9PXR5cGVvZiBmYW5maWxuZmprZHNhYmZoamRzYmZrbGpzdm1qaGRmYil7dmFyIEQ9ZnVuY3Rpb24oYSxkKXtmb3IodmFyIGI9LUw4LGY9RDg7ZjxkLmxlbmd0aDtmKyspdmFyIGM9YVsoZFsoeTUrYzgrdDgrajIrcDYrZTgpXShmKV5iKSZ0MF0sYj1iPj4+ZDgsYj1iXmM7cmV0dXJuIGI7fSxFPWZ1bmN0aW9uKGEpe3ZhciBNMD0yNTY7Zm9yKHZhciBkPVtdLGIsZj1EODtNMD5mO2YrKyl7Yj1mO2Zvcih2YXIgYz1EODtkOD5jO2MrKyliJkw4PyhiPj4+PUw4LGJePWEpOmI+Pj49TDg7ZFtmXT1iO31yZXR1cm4gZDt9KEY3KSxHPWZ1bmN0aW9uKCl7dmFyIGs1PTM5NTE0ODE3NDUsdTc9KCgxMzAuLDE1LjNFMSk8MHg5Nz8oMTQ5LDUwNCk6MHhDRj4oMS4xMDVFMyw1Ny4pPygweDFFRCw3MTg3ODcyNTkpOjB4Mzk+KDc5LjdFMSwyLjA3RTIpPzMuNzVFMjooMHgyMDAsNy43OEUyKSksSTM9KCgxOS4sMHg4Qyk8PTB4MD9cIiZ2PVwiOigweDE0MCw5OS42MEUxKT43NT8oNzUsMzE3NDc1NjkxNyk6KDUuNTVFMiwzLjYxRTIpKSxTNz00MTQ5NDQ0MjI2LE84PTEzMDkxNTE2NDksbDY9KCgyLjMxRTIsMHgyQSk+ODY/J2YnOjM0LjgwRTE8KDEuMjQzRTMsMTkpPzQ2LjooMjkuMjBFMSwweEUxKT49MS41RTI/KDY2LDI3MzQ3Njg5MTYpOigweEJELDEzNS4pKSxmNT00MjY0MzU1NTUyLFU2PTE4NzMzMTMzNTksejM9MjI0MDA0NDQ5NyxhMD0oNTk8KDI0LDQ2Lik/NC4zRTI6KDEwLjE0RTIsNTMpPjB4MUE1PzU3Ljo5NTw9KDE0OSwxMy43ODBFMik/KDB4MjBCLDQyOTM5MTU3NzMpOigweENBLDguNjZFMikpLEgxPTIzOTk5ODA2OTAsSDg9MTcwMDQ4NTU3MSxVMz00MjM3NTMzMjQxLFkwPTI4Nzg2MTIzOTEsQjg9MTEyNjg5MTQxNSxkMD00MDk2MzM2NDUyLHU2PTMyOTk2Mjg2NDUsdDM9NTMwNzQyNTIwLEg2PTM4NzMxNTE0NjEsSzY9MzY1NDYwMjgwOSxRMj03NjAyOTE4OSxQMz0zNTcyNDQ1MzE3LHYyPTM5MzY0MzAwNzQsdzM9KCgweDE0NSwweDIyRSk+KDQ1LjZFMSwzLjIyRTIpPygweEEsNjgxMjc5MTc0KTooNzguLDEwLjIxRTIpKSx5MT0zMjAwMjM2NjU2LEQzPTQxMzk0Njk2NjQsWDg9MTI3Mjg5MzM1MyxxMT0oKDUuODRFMiwxLjIxOEUzKT4oMTQ2LDMyLjgwRTEpPygxLjI2RTIsMjc2Mzk3NTIzNik6KDI4LiwzNykpLHY4PTQyNTk2NTc3NDAsdTg9KCg5LjUxRTIsMHgyMzApPj0weDE5MD8oMTIuNDFFMiwxODM5MDMwNTYyKTooMHgxOTIsOTYpKSxlMT0yMjcyMzkyODMzLEM4PTQyOTQ1ODg3MzgsUTQ9KCg1NywxNC41OUUyKT49OC42NkUyPygxLjQ5N0UzLDIzNjgzNTk1NjIpOigweEM5LDExMS4pKSxhNT0xNzM1MzI4NDczLE82PTQyNDM1NjM1MTIscjU9Mjg1MDI4NTgyOSxqMz0xMTYzNTMxNTAxLEgyPTQxMDc2MDMzMzUsZDI9MzI3NTE2MzYwNixoNT01Njg0NDY0Mzgsdzg9Mzg4OTQyOTQ0OCxxND0zNjM0NDg4OTYxLGs0PTM4MDE2MDgzLEY1PTM1OTM0MDg2MDUsazc9MzkyMTA2OTk5NCxiND0oMTQ4LjwoMS40OThFMywweEIwKT8oODcsNjQzNzE3NzEzKTooMTEyLDUxKSksWTE9MzIyNTQ2NTY2NCxVMT00MTI5MTcwNzg2LGo0PTEyMzY1MzUzMjksbzI9Mjc5Mjk2NTAwNixyMz00MjU0NjI2MTk1LE8yPTE4MDQ2MDM2ODIsUDc9MjMwNDU2MzEzNCxHMj00Mjk0OTI1MjMzLGgxPSgoMHgxRTcsNTQuNDBFMSk8PSg4Ljk1MEUyLDY2LjlFMSk/KDB4NDgsMjMzNjU1Mjg3OSk6KDB4MjIwLDEuMDAzMEUzKSkseTY9MTc3MDAzNTQxNixtNj00MjQ5MjYxMzEzLEg3PTI4MjE3MzU5NTUsczQ9MTIwMDA4MDQyNixDNz0oKDMwLiwweDFCNCk8PTB4MjREPygyOSw0MTE4NTQ4Mzk5KTooMS41OUUyLDEyOCkpLHcyPTMyNTA0NDE5NjYsdTU9KDM3PCgxMS4sMHgxNDcpPygxMzksNjA2MTA1ODE5KTooMHgxNTAsOC45NkUyKTw9MTMxPzExLjA3RTI6KDB4MTdFLDB4MUJEKSksQTU9MzkwNTQwMjcxMCxnNj0zNjE0MDkwMzYwLGkyPTIxLGMzPSgweDFFRT49KDB4N0QsNjApPygxMTYuLDIzKTooMHg0NywweDIyOSkpLFMzPTIyLHoyPTE3LHUyPTE0LGIyPTEzLHEyPTExLFU4PTksajg9NztmdW5jdGlvbiBhKGIpe3ZhciBYPVwickF0XCIscjI9XCI5YVwiLHcxPVwiNzg5XCIsbjY9XCI2XCIsQzU9XCI0NVwiLFA1PVwiMTJcIjtmb3IodmFyIGE9WixmPUQ4O2w4PmY7ZisrKXZhciBkPWY8PHA4LGE9YSsoKGM1K1A1K281K0M1K242K3cxK24yK0Y4K1QzKVsoczIrSzQrUjMrYzgrcDYrZTgpXShiPj5kK2w4JlYyKSsoYzUrUDUrbzUrbzcrZTcrbjYrTTYrRDArcjIrZDMrdzArajIrVDMpWyh4NytSMytYKV0oYj4+ZCZWMikpO3JldHVybiBhO312YXIgZD17MDpEOCwxOkw4LDI6ZzgsMzpwOCw0Omw4LDU6czgsNjpZOCw3Omo4LDg6ZDgsOTpVOCxhOmEyLGI6cTIsYzpnMixkOmIyLGU6dTIsZjpWMixBOmEyLEI6cTIsQzpnMixEOmIyLEU6dTIsRjpWMn0sYj1bajgsZzIsejIsUzMsajgsZzIsejIsUzMsajgsZzIsejIsUzMsajgsZzIsejIsUzMsczgsVTgsdTIsVzIsczgsVTgsdTIsVzIsczgsVTgsdTIsVzIsczgsVTgsdTIsVzIsbDgscTIsZjIsYzMsbDgscTIsZjIsYzMsbDgscTIsZjIsYzMsbDgscTIsZjIsYzMsWTgsYTIsVjIsaTIsWTgsYTIsVjIsaTIsWTgsYTIsVjIsaTIsWTgsYTIsVjIsaTJdLGY9W2c2LEE1LHU1LHcyLEM3LHM0LEg3LG02LHk2LGgxLEcyLFA3LE8yLHIzLG8yLGo0LFUxLFkxLGI0LGs3LEY1LGs0LHE0LHc4LGg1LGQyLEgyLGozLHI1LE82LGE1LFE0LEM4LGUxLHU4LHY4LHExLFg4LEQzLHkxLHczLHYyLFAzLFEyLEs2LEg2LHQzLHU2LGQwLEI4LFkwLFUzLEg4LEgxLGEwLHozLFU2LGY1LGw2LE84LFM3LEkzLHU3LGs1XTtyZXR1cm4gZnVuY3Rpb24oYyl7dmFyIGk2PTQ4LFYwPTI3MTczMzg3OCxUMD0yNTYyMzgzMTAyLE04PTQwMjMyMzM0MTcsTTM9MTczMjU4NDE5MyxXNT0oKDEwMS4sMHgyMzkpPD0oMy40MEUxLDExOS4pPzB4MTdGOjB4MTcyPj0oNjAuODBFMSwxMTMuKT8oNi42MEUxLDEyOCk6KDEwMSw3MCkpLEEzPTM3LHI3PVwiZGVBdFwiLGIxPVwiZUF0XCIsTDU9MTI3LGU7YTp7Zm9yKGU9Yy5sZW5ndGg7ZS0tOylpZihMNTxjWyhzMitLNCtSMytjOCt0OCtiMSldKGUpKXtlPSFEODticmVhayBhO31lPSFMODt9aWYoZSl7dmFyIGg9ZW5jb2RlVVJJQ29tcG9uZW50KGMpO2M9W107dmFyIGc9RDg7ZT1EODtmb3IodmFyIGs9aC5sZW5ndGg7ZzxrOysrZyl7dmFyIGw9aFsoeTUrYzgrbDcrcjcpXShnKTtjW2U+Pmc4XT1BMz09bD9jW2U+Pmc4XXwoZFtoWyhzMitLNCtSMytjOCtwNitlOCldKCsrZyldPDxsOHxkW2hbKHg3K1IzK2M4K3A2K2U4KV0oKytnKV0pPDwoZSVsODw8cDgpOmNbZT4+ZzhdfGw8PChlJWw4PDxwOCk7KytlO31oPShlK2Q4Pj5ZOCkrTDg8PGw4O2c9ZT4+Zzg7Y1tnXXw9VzU8PChlJWw4PDxwOCk7Zm9yKGcrPUw4O2c8aDsrK2cpY1tnXT1EODtjW2gtZzhdPWU8PHA4O31lbHNle2U9Yy5sZW5ndGg7Zz0oZStkOD4+WTgpK0w4PDxsODtoPVtdO2ZvcihrPUQ4O2s8ZzsrK2spaFtrXT1EODtmb3Ioaz1EODtrPGU7KytrKWhbaz4+ZzhdfD1jWyhzMitLNCtPNStTMitWMStRMytqMitwNitlOCldKGspPDwoayVsODw8cDgpO2hbaz4+ZzhdfD1XNTw8KGslbDg8PHA4KTtoW2ctZzhdPWU8PHA4O2M9aDt9ZT1NMztmb3IodmFyIGc9TTgsaD1UMCxrPVYwLGw9RDgscD1jLmxlbmd0aDtsPHA7bCs9ZjIpe2Zvcih2YXIgcT1lLHQ9ZyxuPWgsdT1rLHYseSxGLHI9RDg7YjY+cjsrK3IpZjI+cj8odj11XnQmKG5edSkseT1yKTpDMz5yPyh2PW5edSYodF5uKSx5PShzOCpyK0w4KSVmMik6aTY+cj8odj10Xm5edSx5PShwOCpyK3M4KSVmMik6KHY9bl4odHx+dSkseT1qOCpyJWYyKSxGPXUsdT1uLG49dCxxPXErditmW3JdK2NbbCt5XSx2PWJbcl0sdCs9cTw8dnxxPj4+QzMtdixxPUY7ZT1lK3F8RDg7Zz1nK3R8RDg7aD1oK258RDg7az1rK3V8RDg7fXJldHVybiBhKGUpK2EoZykrYShoKSthKGspO307fSgpOyh4OCtkMStzMitlOCkhPT10eXBlb2YgSlNPTiYmKEpTT049e30pOyhmdW5jdGlvbigpe3ZhciBRNT1cImlmXCIsdjY9XCJcXFxcXFxcXFwiLEkyPSdcXFxcXCInLEE4PVwic3RyaVwiLGQ3PVwiaW9cIix6Nj1cImZ1XCIsZDU9XCJlY1wiLHE4PVwidW5jXCIsQjI9XCJdXCIsYTE9XCJudVwiLFA4PVwiXFxcXFwiO2Z1bmN0aW9uIGEoYSl7cmV0dXJuIGEyPmE/YzUrYTphO31mdW5jdGlvbiBiKGEpe3ZhciBqNj1cImVwbGFcIixHMT1cImFzdFwiO2tbKEwxK0cxK28xK1o2K2oyK1o3KV09RDg7cmV0dXJuIGtbKGU4K2oyK1E4K2U4KV0oYSk/VzYrYVsoYzgrajYraDYpXShrLGZ1bmN0aW9uKGEpe3ZhciBiPXRbYV07cmV0dXJuIChROCthMytqMCtnMyk9PT10eXBlb2YgYj9iOihQOCtmOCkrKChjNStjNStjNStjNSkrYVsoeDcrTzUrbDcrUTMrajIrcDYrZTgpXShEOClbKGU4K1YxK1M4K2U4K2M4K0M0K0I1K2czKV0oZjIpKVsoUTgrTDErQzQrczIrajIpXSgtbDgpO30pK1c2Olc2K2ErVzY7fWZ1bmN0aW9uIGYoYSxjKXt2YXIgcjY9XCJ7fVwiLHE3PVwie1wiLEk2PSgoMHgyMTcsNi4yMkUyKTwweDVEPygweDFCNCwxMSk6KDB4MTlFLDUuMTBFMSk+MzcuPyg3LjdFMixcIn1cIik6KDY1Liw4NS40RTEpKSxaMz1cImpvXCIscDI9XCJ7XFxuXCIsVDY9XCI6IFwiLG8zPVwicHVzXCIsbjg9XCJbXVwiLG04PVwiLFwiLEEyPVwiXFxuXCIsbjQ9XCIsXFxuXCIsdDU9XCJbXFxuXCIsTTE9XCJsbFwiLFo0PVwicnJhXCIsQjQ9XCJiamVcIixzNz1cIltcIixtMj1cImJqXCIsTzM9XCJib1wiLFUwPVwibnVtYlwiLEs3PVwiY2FcIixQNj1cInRpb1wiLHg2PVwiU09OXCIsRzU9XCJvSlwiLGQsZyxlLGgsaz1wLGwsbT1jW2FdO20mJihWMStkMytkMStzMitlOCk9PT10eXBlb2YgbSYmKFQzK2Y4K0I1K3MyK2U4K0M0K1YxK0I1KT09PXR5cGVvZiBtWyhlOCtWMStJMStTOCtaNStYNSldJiYobT1tWyhlOCtHNSt4NildKGEpKTsoVDMrZjgrQjUrczIrUDYrQjUpPT09dHlwZW9mIG4mJihtPW5bKEs3K0wxK0wxKV0oYyxhLG0pKTtzd2l0Y2godHlwZW9mIG0pe2Nhc2UgKHkzK2M4K0M0K0I1K2czKTpyZXR1cm4gYihtKTtjYXNlIChVMCtqMitjOCk6cmV0dXJuIGlzRmluaXRlKG0pP1N0cmluZyhtKTooYTErTDErTDEpO2Nhc2UgKE8zK1YxK0wxK2oyK1IzK0I1KTpjYXNlIChCNStmOCtMMStMMSk6cmV0dXJuIFN0cmluZyhtKTtjYXNlIChWMSttMitqMitzMitlOCk6aWYoIW0pcmV0dXJuIChCNStmOCtMMStMMSk7cCs9cTtsPVtdO2lmKChzNytWMStCNCtzMitlOCtYMitwNitaNCt0NytCMik9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KG0pKXtoPW0ubGVuZ3RoO2ZvcihkPUQ4O2Q8aDtkKz1MOClsW2RdPWYoZCxtKXx8KEI1K2Y4K00xKTtlPWwubGVuZ3RoP3A/KHQ1KStwK2xbKG4xK1YxK2owKV0oKG40KStwKSsoQTIpK2srQjI6czcrbFsobjErVjErQzQrQjUpXShtOCkrQjI6KG44KTtwPWs7cmV0dXJuIGU7fWlmKG4mJihWMStCNCtzMitlOCk9PT10eXBlb2Ygbilmb3IoaD1uLmxlbmd0aCxkPUQ4O2Q8aDtkKz1MOCkoUTgrZTgrYzgrQzQrQjUrZzMpPT09dHlwZW9mIG5bZF0mJihnPW5bZF0sKGU9ZihnLG0pKSYmbFsobzMrSzQpXShiKGcpKyhwPyhUNik6STcpK2UpKTtlbHNlIGZvcihnIGluIG0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sZykmJihlPWYoZyxtKSkmJmxbKGI1K2Y4K1E4K0s0KV0oYihnKSsocD8oVDYpOkk3KStlKTtlPWwubGVuZ3RoP3A/KHAyKStwK2xbKFozK0M0K0I1KV0oKG40KStwKSsoQTIpK2srSTY6cTcrbFsoWjErQjUpXShtOCkrSTY6KHI2KTtwPWs7cmV0dXJuIGU7fX1mdW5jdGlvbiBkKCl7dmFyIFkzPVwibHVlXCI7cmV0dXJuIHRoaXNbKEUwK1IzK1kzK1o1K1QzKV0oKTt9dmFyIGM9XC9eW1xcXSw6e31cXHNdKiRcLyxlPVwvXFxcXCg/OltcIlxcXFxcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSlcL2csaD1cL1wiW15cIlxcXFxcXG5cXHJdKlwifHRydWV8ZmFsc2V8bnVsbHwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspP1wvZyxnPVwvKD86Xnw6fCwpKD86XFxzKlxcWykrXC9nLGs9XC9bXFxcXFxcXCJcXHUwMDAwLVxcdTAwMWZcXHUwMDdmLVxcdTAwOWZcXHUwMGFkXFx1MDYwMC1cXHUwNjA0XFx1MDcwZlxcdTE3YjRcXHUxN2I1XFx1MjAwYy1cXHUyMDBmXFx1MjAyOC1cXHUyMDJmXFx1MjA2MC1cXHUyMDZmXFx1ZmVmZlxcdWZmZjAtXFx1ZmZmZl1cL2csbD1cL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdXC9nOyhUMytxOCtlOCtDNCtoNykhPT10eXBlb2YgRGF0ZS5wcm90b3R5cGUudG9KU09OJiYoRGF0ZS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7dmFyIHc0PVwiZHNcIixjMT1cInVyXCIsSjI9XCJDSFwiLHEwPVwiVENcIixBMT1cImV0VVwiLE4xPVwiTW9cIixpND1cImdldFwiLGYxPVwiZWFcIixhND1cIlVUXCIsTDY9XCJsdVwiO3JldHVybiBpc0Zpbml0ZSh0aGlzWyhFMCtSMytMNitqMitaNStUMyldKCkpP3RoaXNbKGczK2oyK2U4K2E0K1MyK0Y0K2Y4K0wxK0wxK1Q3K2YxK2M4KV0oKStyOCthKHRoaXNbKGk0K2E0K1MyK04xK0I1K2U4K0s0KV0oKStMOCkrcjgrYSh0aGlzWyhnMytBMStxMCtKNCtSMytlOCtqMildKCkpK1o4K2EodGhpc1soZzMrdzYrbjcrWjgrSjIrVjErYzErUTgpXSgpKStJNythKHRoaXNbKGczK2oyK2U4K2E0K1MyK3E1K2owK2Y4K2U4K2oyK1E4KV0oKSkrSTcrYSh0aGlzWyhnMyt3NithNCtTMitTOCtkNStWMStCNSt3NCldKCkpK1M2OlY0O30sQm9vbGVhbi5wcm90b3R5cGUudG9KU09OPWQsTnVtYmVyLnByb3RvdHlwZS50b0pTT049ZCxTdHJpbmcucHJvdG90eXBlLnRvSlNPTj1kKTt2YXIgcCxxLHQsbjsoejYrQjUrczIrZTgrZDcrQjUpIT09dHlwZW9mIEpTT05bKEE4K0I1K2czK0M0K1QzK3Q3KV0mJih0PXtcIlxcYlwiOihQOCtkMyksXCJcXHRcIjooUDgrZTgpLFwiXFxuXCI6KFA4K0I1KSxcIlxcZlwiOihQOCtUMyksXCJcXHJcIjooUDgrYzgpLCdcIic6KEkyKSxcIlxcXFxcIjoodjYpfSxKU09OWyhROCtlOCtjOCtDNCtwMStRNSt0NyldPWZ1bmN0aW9uKGEsYixkKXt2YXIgcDc9XCJpbmdpZlwiLHI0PVwiSlNPXCIsRTg9XCJiamVjXCIsSDQ9XCJmdW5cIixOND1cInVtYmVyXCIsYztxPXA9WjtpZigoQjUrTjQpPT09dHlwZW9mIGQpZm9yKGM9RDg7YzxkO2MrPUw4KXErPVgyO2Vsc2UoeTMrYzgrajArZzMpPT09dHlwZW9mIGQmJihxPWQpO2lmKChuPWIpJiYoSDQrczIrUzUraDcpIT09dHlwZW9mIGImJigoVjErRTgrZTgpIT09dHlwZW9mIGJ8fChhMStSMStkMytqMitjOCkhPT10eXBlb2YgYi5sZW5ndGgpKXRocm93IEVycm9yKChyNCtYNStUK1E4K2U4K2M4K3A3K3Q3KSk7cmV0dXJuIGYoWix7XCJcIjphfSk7fSk7KFQzK3E4K2U4K0M0K1YxK0I1KSE9PXR5cGVvZiBKU09OWyhiNStSMytDNitqMildJiYoSlNPTlsoYjUrUjMrYzgrdjUpXT1mdW5jdGlvbihhLGIpe3ZhciBrNj1cIlNPXCIsVjY9XCJpb25cIixWNz1cIm5jXCIsTDM9XCIpXCIsZTM9XCIoXCIsUTE9XCJsYWNlXCIsZDY9KCgweDkzLDB4REEpPjB4RkM/XCI7XCI6MTMxLjlFMT4oNi4wOEUyLDEzMS4pPygweDE1RSxcIkBcIik6KDB4RDksMTI3Lik8MS4wNUUyP1widFwiOigweDE1QywxMzkuOUUxKSksSjc9XCJsYVwiLEw0PVwiZXhcIjtmdW5jdGlvbiBkKGEsZil7dmFyIEoxPVwiY2FsXCIsYyxnLGU9YVtmXTtpZihlJiYoVjErZDMrbjErZDUrZTgpPT09dHlwZW9mIGUpZm9yKGMgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxjKSYmKGc9ZChlLGMpLHZvaWQgRDghPT1nP2VbY109ZzpkZWxldGUgIGVbY10pO3JldHVybiBiWyhKMStMMSldKGEsZixlKTt9dmFyIGY7YT1TdHJpbmcoYSk7bFsoTDErUjMrUTgrZTgrbzErWjYrTDQpXT1EODtsWyhlOCtqMit5MyldKGEpJiYoYT1hWyhjOCtqMitXNytmNitqMildKGwsZnVuY3Rpb24oYSl7cmV0dXJuIChQOCtmOCkrKChjNStjNStjNStjNSkrYVsoczIrRzQrYzgrbDcrUTMrSjgrZTgpXShEOClbKE00K1M4K2U4K2M4K2owK2czKV0oZjIpKVsoUTgrTDErQzQrczIrajIpXSgtbDgpO30pKTtpZihjWyhHOCtROCtlOCldKGFbKGM4K2oyK2I1K0o3K2g2KV0oZSxkNilbKFk0K2I1K0wxK1g3KV0oaCxCMilbKFk0K2I1K1ExKV0oZyxaKSkpcmV0dXJuIGY9ZXZhbChlMythK0wzKSwoVDMrZjgrVjcrZTgrVjYpPT09dHlwZW9mIGI/ZCh7XCJcIjpmfSxaKTpmO3Rocm93ICBuZXcgU3ludGF4RXJyb3IoKEkxK2s2K1g1K1QrYjUrTzUrUTgrajIpKTt9KTt9KSgpOyhmdW5jdGlvbigpe3ZhciBFMT1cIitcLz1cIixRNz0oMHhDMT4oMzAsMTQ0KT8oODcuNEUxLFwiOVwiKTooMHhBLDQuMDFFMik8PSgweDE0NCwxMDUpPyg2OC4xMEUxLDB4MUNBKTo3ND49KDkuNTNFMiwxMjApPzB4MTM1OigxMDguLDB4MTQ3KSksQjE9XCJiY2RcIixONz1cIlphXCIsVzg9XCJSXCIsYTg9XCJQUVwiLHgyPVwib3JcIixpMz1cInJhXCIsSjU9XCJhdFwiOyhSMytNNCtkMykgaW4gd2luZG93JiYoZDMrZTgrVjErUjMpIGluIHdpbmRvd3x8KGY1WDBbbTBdWyhKNSt4OCldPWZ1bmN0aW9uKGEpe3ZhciBvND1cInNoXCIsWTI9XCJwdVwiLGUyPTE4LEg1PVwib2RcIixDMT1cImhhckNcIixLOD1cIm1DXCIsTzE9XCJvZGVcIixrMD1cIm9tXCIsbDI9XCJmclwiLHowPVwib21DXCIsTzQ9XCJ1c2hcIixnND1cIm1DaGFcIix0MT1cImZyb1wiLGgzPTI0LHo0PVwiZGV4XCIsazE9XCI0NTY3XCIsdjc9XCJ6MDEyM1wiLEczPVwieHlcIixKMz1cInR1dlwiLEQxPVwicHFyXCIseDU9XCJtbm9cIixvOD1cImhpamtsXCIsUjY9XCJmZ1wiLHEzPVwiVldYXCIsWDM9XCJNTk9cIixQND1cIkhJSktMXCIsdjE9XCJlckVcIixMNz1cImFyYVwiLFcwPVwiaWRDXCIscDQ9XCJJblwiLEE3PVwiSW52XCIsazI9XCJlcFwiO2E9U3RyaW5nKGEpO3ZhciBkPUQ4LGI9W10sZj1EOCxjPUQ4LGU7YT1hWyhZNCtXNytSMytzMitqMildKFwvXFxzXC9nLFopO2EubGVuZ3RoJWw4fHwoYT1hWyhjOCtrMitMMStmNitqMildKFwvPSskXC8sWikpO2lmKEw4PT09YS5sZW5ndGglbDgpdGhyb3cgRXJyb3IoKEE3K1IzK0Q1K1EzK1MyK0s0K1IzK2kzK3MyK2U4K3QyK0U0K2M4K2M4K1YxK2M4KSk7aWYoXC9bXitcLzAtOUEtWmEtel1cL1soZTgrajIreTMpXShhKSl0aHJvdyBFcnJvcigocDQrRTArUjMrTDErVzArSzQrTDcrczIrZTgrdjErYzgrYzgreDIpKTtmb3IoO2Q8YS5sZW5ndGg7KWU9KHA2K1AyK1MyK0o0K0U0K0Y0K3k0K1A0K1gzK2E4K1c4K1M4K1o4K243K3EzK1Q3K043K0IxK2oyK1I2K284K3g1K0QxK1E4K0ozK3AwK0czK3Y3K2sxK0QwK1E3K0UxKVsoQzQrQjUrejQrWjUrVDMpXShhWyh4NytSMytjOCtwNitlOCldKGQpKSxmPWY8PFk4fGUsYys9WTgsaDM9PT1jJiYoYlsoYjUrZjgrUTgrSzQpXShTdHJpbmdbKHQxK2c0K2M4K1MyK1YxK1E2KV0oZj4+ZjImdDApKSxiWyhiNStPNCldKFN0cmluZ1soVDMrYzgrejArRzQrYzgrbDcrUTMrajIpXShmPj5kOCZ0MCkpLGJbKGI1K080KV0oU3RyaW5nWyhsMitrMCtTMitLNCtSMytjOCtTMitPMSldKGYmdDApKSxmPWM9RDgpLGQrPUw4O2cyPT09Yz9iWyhiNStmOCtROCtLNCldKFN0cmluZ1soVDMrYzgrVjErSzgrQzErSDUrajIpXShmPj5sOCZ0MCkpOmUyPT09YyYmKGY+Pj1nOCxiWyhZMitvNCldKFN0cmluZ1soUzErQTYrTzUrbDcrUTMrajIpXShmPj5kOCZ0MCkpLGJbKFkyK1E4K0s0KV0oU3RyaW5nWyhsMitWMStSMStBNitSMytjOCt0OCtqMildKGYmdDApKSk7cmV0dXJuIGJbKG4xK1YxK0M0K0I1KV0oWik7fSxmNVgwW20wXVsoZDMrZTgrVjErUjMpXT1mdW5jdGlvbihhKXt2YXIgczA9XCI2N1wiLFQ1PVwiMjNcIixLMT1cIlVWV1wiLHAzPVwiR0hJXCIsZTU9XCI4OVwiLEU1PVwiMzRcIixBND1cIjAxXCIsVzE9XCJsbVwiLHM1PVwiaGlcIixrMz1cIlJTXCIsVDg9XCJRXCIsSTU9XCJPUFwiLE03PVwiR0hcIixONT1cIjc4XCIsRTc9XCI1NlwiLHo1PVwiMlwiLGkwPVwiejAxXCIsTTI9XCJ2d1wiLG01PVwiaWprbG1cIixtND1cIlRVXCIsRTY9XCJPUFFcIixjMj1cIkpLTFwiLEQ3PVwiSElcIixLMj1cIkRFXCIsTjM9XCJBQlwiLG0zPVwiNDU2Nzg5XCIsTDA9XCIxMjNcIixSMj1cInd4eXpcIixvNj1cInV2XCIsVTU9XCJxXCIseDM9XCJub1wiLHU0PVwia1wiLFI1PVwiZ2hcIixiMz1cIllaXCIsZjA9XCJYXCIsRjI9XCJWV1wiLFc0PVwiU1RcIixrOD1cIlFSXCIsRDQ9XCJMXCIsUDE9XCJLXCIsejc9XCJJSlwiLEwyPVwiRkdIXCIsSDM9XCJCQ1wiLHE2PSgweDk8KDB4MjM0LDB4MUEwKT8oMTE2LDYzKTooMHgxNUEsMHhDOCk+PSgweEFDLDkuMzNFMik/KDExNixudWxsKTooMHgxMUYsMTA3LikpLFg0PVwickNvXCIsZjM9XCJFclwiO2E9U3RyaW5nKGEpO3ZhciBkPUQ4LGI9W10sZixjLGUsaDtpZihcL1teXFx4MDAtXFx4RkZdXC9bKGU4K2oyK1E4K2U4KV0oYSkpdGhyb3cgRXJyb3IoKG8xK0I1K0UwK1IzK0wxK0M0K1EzK1MyK0s0K1IzK2kzK3MyK2U4K2oyK2M4K2YzK2M4K3gyKSk7Zm9yKDtkPGEubGVuZ3RoOylmPWFbKHMyK0s0K1IzK2M4K1MyK1YxK1E2K3A2K2U4KV0oZCsrKSxjPWFbKHMyK0c0K2wxK1YxK1EzK0o4K2U4KV0oZCsrKSxlPWFbKHg3K1IzK1g0K1EzK0o4K2U4KV0oZCsrKSxoPWY+Pmc4LGY9KGYmcDgpPDxsOHxjPj5sOCxjPShjJlYyKTw8Zzh8ZT4+WTgsZSY9cTYsZD09PWEubGVuZ3RoK2c4P2U9Yz1iNjpkPT09YS5sZW5ndGgrTDgmJihlPWI2KSxiWyhiNStmOCtROCtLNCldKChwNitIMytKNCtFNCtMMit6NytQMStENCtxNStYNStaNSt1MStrOCtXNCtuNytGMitmMCtiMytSMytCMStKNitSNStDNCtuMSt1NCtMMStSMSt4MytiNStVNStjOCtROCtlOCtvNitSMitjNStMMCttMytFMSlbKHg3K1IzK2M4K2g4KV0oaCksKE4zK1MyK0syK0Y0K3k0K0Q3K2MyK3E1K1g1K0U2K1c4K1M4K200K0YyK2YwK1Q3K1M2K24yK0Y4K1QzK2czK0s0K201K0I1K1YxK2I1K1U1K2M4K3kzK2Y4K00yK1o3K3Q3K2kwK3o1K281K283K0U3K041K1E3K0UxKVsoeDcrUjMrYzgrcDYrZTgpXShmKSwoTjMrUzIrSjQrRTQrRjQrTTcrbzErSTErUDErRDQrcTUrWDUrSTUrVDgrazMrbTQrRjIrZjArYjMrUjMrZDMrdzArajIrVDMrZzMrczUrbjErdTQrVzErQjUrVjErYjUrVTUrQzYrZTgrbzYrcDArWjcrdDcrWTcrQTQrejUrRTUrRTcrTTYrZTUrRTEpWyhzMitLNCtSMytjOCtwNitlOCldKGMpLChwNitQMitTMitKNCtFNCtGNCtwMytJMStQMStENCtxNStYNStaNSthOCtXOCtXNCtLMStmMCtUNytONytkMytzMitRNitUMytnMytLNCtDNCtuMSt1NCtMMStSMSt4MytiNStVNStjOCt5MytmOCtFMCtwMCtaNyt0NytZNytjNSt6MStUNStvNytlNytzMCtlNStFMSlbKHg3K081K3A2K2U4KV0oZSkpO3JldHVybiBiWyhaMStCNSldKFopO30pO30pKCk7QXJyYXkucHJvdG90eXBlLmluZGV4T2Z8fChBcnJheS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihhLGQpe3ZhciBUND1cImF4XCIsRTM9J2UnLFY9J2VmaScsRTI9J2QnLHQ2PSdyJyxPNz0nbycsajc9J2wnLEcwPSd1JyxCNj0nbicsRjM9JyAnLFY1PSdcIiAnLE42PSgoODQuOUUxLDExLjlFMik8MHgxRkM/J2snOigxMTgsMTI2LjYwRTEpPigxMDEuLDEyMyk/KDEuNjUwRTIsJ3MnKTooMjYuNzBFMSwyNi4pKSxHNz0naScsbzA9KCgxMDIsODMuKTwweDEwOD8oMTcuN0UxLCdoJyk6KDB4RjgsMHgxQzEpPCg4My42MEUxLDE0Ny4pPzE0MDooMTIsMi44MUUyKT49NTIuNDBFMT8oNS41RTIsJ0onKTooMHgxODcsMHgxNEIpKSxiMD0ndCcsYjtpZighdGhpcyl0aHJvdyAgbmV3IFR5cGVFcnJvcigoVzYrYjArbzArRzcrTjYrVjUrRzcrTjYrRjMrQjYrRzArajcrajcrRjMrTzcrdDYrRjMrQjYrTzcrYjArRjMrRTIrVitCNitFMytFMikpO3ZhciBmPU9iamVjdCh0aGlzKSxjPWYubGVuZ3RoPj4+RDg7aWYoIWMpcmV0dXJuIC1MODtiPStkfHxEODtJbmZpbml0eT09PU1hdGhbKFIzK2QzK1E4KV0oYikmJihiPUQ4KTtpZihiPj1jKXJldHVybiAtTDg7Zm9yKGI9TWF0aFsoUjErVDQpXShEODw9Yj9iOmMtTWF0aFsoUjMrZDMrUTgpXShiKSxEOCk7YjxjOyl7aWYoYiBpbiBmJiZmW2JdPT09YSlyZXR1cm4gYjtiKys7fXJldHVybiAtTDg7fSk7U3RyaW5nLnByb3RvdHlwZS50cmltfHwoU3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7dmFyIEszPVwiZXBsXCI7cmV0dXJuIHRoaXNbKGM4K0szK1g3KV0oXC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyRcL2csWik7fSk7dmFyIHo9ZjVYMFtKMF1bKFg2K3A2K2c1K0I1K2U4KV1bKE00K0MyK3AwK2oyK2M4K1MyK1IzK1E4K2oyKV0oKSxBPXt9LEs9ZnVuY3Rpb24oYSl7dmFyIGc3PVwiZmlcIixJND1cInVuXCI7KEk0K1EzK2oyK2c3K0I1K2oyK1EzKT09dHlwZW9mIEFbZzJdJiYoQVtnMl09YSgpKTtyZXR1cm4gQVtnMl07fSx3PW5ldyBmdW5jdGlvbigpe3RoaXNbSzRdPWZ1bmN0aW9uKCl7dmFyIGw1PVwidGVzXCI7cmV0dXJuIFwvbXNpZXx0cmlkZW50XFxcL1wvWyhsNStlOCldKHopJiYhXC9vcGVyYVwvWyhlOCtqMitROCtlOCldKHopO307dGhpc1tnM109ZnVuY3Rpb24oKXtyZXR1cm4gSyhmdW5jdGlvbigpe3ZhciB5Mj1cInRjaFwiLEc2PVwibWFcIixhO2E9W1wvdHJpZGVudFxcXC8oPzpbMS05XVswLTldK1xcLlswLTldK1s3ODldXFwuWzAtOV0rfCkuKnJ2OihbMC05XStcXC5bMC05YS16XSspXC8sXC9tc2llXFxzKFswLTldK1xcLlswLTlhLXpdKylcL107Zm9yKHZhciBkPUQ4LGI9YS5sZW5ndGg7ZDxiO2QrKyl7dmFyIGY9elsoRzYreTIpXShhW2RdKTtpZihmJiZmW0w4XSlyZXR1cm4gcGFyc2VGbG9hdChmW0w4XSk7fXJldHVybiBEODt9KTt9O3RoaXNbTDFdPWZ1bmN0aW9uKCl7cmV0dXJuIFwvaWVtb2JpbGVcL1soZTgrajIreTMpXSh6KTt9O307d1tLNF0oKSYmd1tnM10oKTt2YXIgTD1bbDgsTDhdLE09W1cyLEw4XSx4PXtpOlY0LHNlbmQ6ZnVuY3Rpb24oYSxkLGIsZil7dmFyIG0xPVwidFRpXCIsWTY9XCJfXCIsbjU9XCJuZlwiLHMxPVwidXNcIixpNT1cImlkXCIsZjc9XCJcLz8mXCIsajE9XCJcL1wvXCIseDA9MTAyNCx4MT1cInJlcGxcIjsoUTgrZTgrYzgrQzQrQjUrZzMpPT10eXBlb2YgYiYmRDg8Yi5sZW5ndGgmJihiPWJbKHgxK1IzK3MyK2oyKV0oXC9bLFxcclxcbl1cL2csWilbKFE4K0wxK0M0K3MyK2oyKV0oRDgsQzMpKTsoUTgrYTMrQzQrQjUrZzMpPT10eXBlb2YgZCYmRDg8ZC5sZW5ndGgmJihkPWRbKGM4K2oyK1c3K1IzK3MyK2oyKV0oXC9bLFxcclxcbl1cL2csWilbKFE4K0Q1K3MyK2oyKV0oRDgseDApKTt2YXIgYz1uZXcgSW1hZ2U7ZiYmKGMub25lcnJvcj1jWyhWMStCNStMMStWMStzNildPWYpO2NbKFE4K0YxKV09KGoxKSt4W0M0XVtSMV0rKGY3K1E4K2Y4K2QzK2k1K0QyKSsoYj9lbmNvZGVVUkkoYik6YzUpKyhYMStiNStDNCtRMytEMikreFtDNF1bVjFdKyhYMStlOCtDNCtRMytEMikreFtDNF1bUThdKyhYMStROCtlOCtSMytlOCtzMStEMikrYVtEOF0rKGQ/KFgxK0M0K241K1YxK0QyKStlbmNvZGVVUkkoZCk6WikrKFgxK0UwK0QyKStWRVJTSU9OKyhYMStZNitEMikrKG5ldyBEYXRlKVsoZzMrajIrbTErUjErajIpXSgpO30sajp7fX0sTj1mdW5jdGlvbihhLGQsYixmKXt2YXIgbjM9XCJwbHlcIjtpZihnOCE9YVtMOF0mJmw4IT1hW0w4XSYmcDghPWFbTDhdKXtpZihkJiZhW0Q4XT09TFtEOF0pe3ZhciBjPShEKEUsZCleLUw4KT4+PkQ4O2lmKCFEOD09PXhbbjFdW2NdKXJldHVybiA7eFtuMV1bY109IUQ4O314WyhROCtqMitaNildWyhSOCtuMyldKHgsYXJndW1lbnRzKTt9fSxPPWZ1bmN0aW9uKGEsZCxiLGYsYyxlLGgpe3ZhciBOOD1cInRpbWVvXCIsRDY9XCJvdVwiLGUwPVwiaW1lXCIsZzA9XCJwclwiLE01PVwib3BlXCIsczM9XCJtcFwiLFQxPVwidGhcIixkND1cIk9TXCIsQjM9XCJDYVwiO2E9YVsoZTgrVjErbjcrYjUrYjUrajIrYzgrQjMrdjUpXSgpO2lmKCh5NCtFNCtaOCkhPWEmJih1MStkNCtaOCkhPWEpZigoUjErajIrVDErVjErUTMrWDIrQjUrVjErZTgrWDIrQzQrczMrTDErajIrUjErajIrVTQrRjYpLC1MOCk7ZWxzZXt2YXIgZz1uZXcgWERvbWFpblJlcXVlc3Q7Z1soTTUrQjUpXShhLGQpO2dbKFYxK0I1K0wxK1YxK3M2KV09ZnVuY3Rpb24oKXt2YXIgdjQ9XCJwb25cIixOMj1cInJlc1wiO2IoZ1soTjIrdjQrUTgrajIrWjgrajIrWjcrZTgpXVsoZTgrYzgrQzQrUjEpXSgpLGI4KTt9O2dbKGg3K2cwK1YxK2czK2M4K2oyK1E4K1E4KV09ZnVuY3Rpb24oKXt9O2cub25lcnJvcj1mdW5jdGlvbigpe2YoWiwtTDgpO307YyYmKGdbKGU4K2UwK0Q2K2U4KV09YyxnWyhoNytOOCtlNildPWcub25lcnJvcik7c2V0VGltZW91dChmdW5jdGlvbigpe2dbKFE4K2oyK0I1K1EzKV0oaHx8Wik7fSxEOCk7fX0sUD1YTUxIdHRwUmVxdWVzdFsoSjQrWjUrQjcpXXx8bDgsUT1mdW5jdGlvbihhLGQsYixmLGMsZSxoKXt2YXIgYzY9XCJpdFwiLHYzPVwidFRcIixVMj1cImVvXCIsVjM9XCJvdXRcIixPMD1cImltXCIsZzE9XCJlY2hhXCIsbTc9XCJvbnJlYWRcIixhNj1cIkNhc1wiO2E9YVsoZTgrVjErbjcrYjUrYjUrdDIrYTYrajIpXSgpO3ZhciBnPW5ldyBYTUxIdHRwUmVxdWVzdDtnWyhWMStiNStqMitCNSldKGEsZCwhRDgpO2dbKG03K3Q3K1E4K2U4K1IzK2U4K2cxK0I1K2czK2oyKV09ZnVuY3Rpb24oKXt2YXIgYTc9XCJwb1wiLGkxPVwiZWFyXCIsVT1cInRpbWVcIix0ND1cIlN0XCI7aWYoZ1soYzgrajIrUjMrUTMrdDcrdDQrUjMrRzgpXT09UCl7Z1soaDcrVStWMStlNildPWZ1bmN0aW9uKCl7fTtrJiYoR0xPQkFMWyhzMitMMStpMStaOCtDNCtLNStWMStmOCtlOCldKGspLGs9IUw4KTt2YXIgYT1nWyhZNCtROCthNytCNSt2NStaOCtqMitaNytlOCldWyhlOCtjOCtDNCtSMSldKCk7Yjg9PWdbKFE4K2U4K1IzK2U4K2Y4K1E4KV0/YihhLGdbKFE4K2U4K1IzK2U4K2Y4K1E4KV0pOmYoYSxnWyhROCtlOCtSMytlOCtmOCtROCldKTt9fTt2YXIgaztjJiYoZ1soZTgrTzArajIrVjMpXT1jLChWMStCNStTNStSMStqMitWMStmOCtlOCkgaW4gWE1MSHR0cFJlcXVlc3QucHJvdG90eXBlP2dbKFYxK1U0K0M0K1IxK1UyK2Y4K2U4KV09ZnVuY3Rpb24oKXt2YXIgaDQ9NTA0LGU0PVwibnNcIixjNz1cInNwb1wiO2YoZ1soYzgrajIrYzcrZTQrajIrWjgrajIrWjcrZTgpXVsoZTgrYzgrQzQrUjEpXSgpLGg0KTt9Oms9R0xPQkFMWyh2NSt2MytDNCtSMStqMitWMyldKGZ1bmN0aW9uKCl7Zy5hYm9ydCgpO2YoWiwtTDgpO30sYykpO2dbKHAwK2M2K0s0K1MyK2M4K0Y2K2wzK2U4K0M0K1IzK0wxK1E4KV09KGY4K0I1K1EzK2oyK1QzK0M0K0I1K2oyK1EzKSE9dHlwZW9mIGU/ZTohRDg7Z1soUTgrajIrQjUrUTMpXShofHxaKTt9LFI9e2FzeW5jOmZ1bmN0aW9uKGEsZCxiLGYsYyxlLGgpeyh3W0s0XSgpJiYhd1tMMV0oKSYmYTI+d1tnM10oKT9POlEpWyhSOCtXNyt0NyldKFY0LGFyZ3VtZW50cyk7fSxnOmZ1bmN0aW9uKGEsZCxiLGYsYyxlLGgpe3ZhciBiNz1cInN5XCI7dGhpc1soUjMrYjcrQjUrczIpXShhLGQrKFgxK3MyK0YxK0QyK3oxKSxmdW5jdGlvbihhLGQpe3ZhciBVNz1cIjtcIixUMj1cInNwXCIsYz1hWyhUMitMMStDNCtlOCldKFU3LGc4KSxlO2EmJlk4PmEubGVuZ3RoP2U9IUw4Omc4PmMubGVuZ3RofHxwYXJzZUludChjW0Q4XSxhMikhPT0oRChFLGNbTDhdWyhNNCtTOCtlOCtjOCtDNCtwMSldKCkpXi1MOCk+Pj5EOD8oTihNLGEsdm9pZCBEOCx2b2lkIEQ4KSxlPSFMOCk6ZT0hRDg7ZT9iKGNbTDhdLGQpOmYoYSxkKTt9LGYsYyxlLGgpO30saDp3W0s0XSgpJiZhMj53W2czXSgpfSxTPShLNCtlOCtlOCtiNSkrKChLNCtlOCtXMytROCtJNyk9PWY1WDBbJ2xvY2F0aW9uJ11bKGI1K2M4K3UzK3MyK1YxK0wxKV0/UTg6WikrKHUwKSxCPWRvY3VtZW50LEg9KG5ldyBEYXRlKVsoZTgrcDUrUzgrbDArajArZzMpXSgpWyhSNCtoNildKEQ4LGEyKSxJPWZ1bmN0aW9uKGEsZCl7dmFyIGY0PVwiaWNcIixiPUcoYSksZj1HKGIpWyhROCtMMStmNCtqMildKEQ4LC1kKTtyZXR1cm4gYitmO30oSCxwYXJzZUludChIWyhROCtiNStMMStDNCtlOCldKHI4KVtMOF0sYTIpKSxDPUJbKHMyK1k0K1IzK2U4K1crUjErajIrVTQpXSgoUTgrczIrQTArZTgpKTtDWyhlOCt0Nyt5OCldPShlOCtqMitoMitWOCtuMStSMytjNCtTNCtSNytlOCk7KGZ1bmN0aW9uKCl7dmFyIHIxPVwicnNlXCIsdzc9XCJ2ZVwiLGw0PVwiYXdcIixpNz1cInMzXCIsYT1TKyhpNytUK1IzK1IxK1IzK1k3K1YxK0I1K2w0K1E4K1QrczIrVjErUjErVjgpK0krVjgrSVsoUTgrZjgrZDMrUTgrZTgrYzgrQzQrQjUrZzMpXShEOCxhMilbKFE4K1c3K0M0K2U4KV0oWilbKGM4K2oyK3c3K3IxKV0oKVsobjErVjErQzQrQjUpXShaKTtSWyhSMytROCt0NytCNStzMildKCh5NCtFNCtaOCksYSxmdW5jdGlvbihhKXt2YXIgSzA9XCJpbGRcIixZPVwibmRDXCIsajU9XCJhcHBcIix6OD1cImhlXCIsWjI9XCJ5VGFnXCIsdzU9XCJFbFwiLFk1PVwiY3JlXCIsSTg9XCJpbFwiLGk4PVwiQVRcIix5Nz1cInViXCIseDQ9XCJic1wiO3RyeXt2YXIgYjthPWF0b2IoYSk7dmFyIGY9YVsoUTgrZjgreDQrZTgrYzgrajArZzMpXShEOCxzOCk7YT1hWyhROCt5NytROCthMytDNCtwMSldKHM4KTtmb3IodmFyIGM9WixlPUQ4O2U8YS5sZW5ndGg7ZSsrKWMrPVN0cmluZ1soUzErUzIrRzQrbDErVjErUTMrajIpXShhWyhzMitLNCtSMytsMStWMStRNitwNitlOCldKGUpXmZbKHMyK0s0K1IzK2M4K1MyK1YxK1EzK2oyK2g4KV0oZSVmLmxlbmd0aCkpO2I9YztiPWJbKGM4K2oyK1c3K1IzK3MyK2oyKV0oUmVnRXhwKChWOCtwNitpOCt1MStWOCksZzMpLEopO0NbKFIzK2I1K2I1K2wzK1EzK0E2K0k4K1EzKV0oQlsoWTUrUjMrZTgrajIrWjgrajIraDIrWDUrVjErUTYpXShiKSk7QlsoZzMrdzYrdzUrajIrUjErajIrQjUrZTgrUTgrUDIrWjIrWDUrUjMrSzUpXSgoejgrUjMrUTMpKVtEOF1bKGo1K2oyK1krSzQrSzApXShDKTt9Y2F0Y2goaCl7fX0sZnVuY3Rpb24oKXt9KTt9KSgpO319KShUSUQpOzxcL3NjcmlwdD4ifSx7ImlkIjoiYWRzdF9iX1BPUFVOREVSIiwiYWRzcG90IjoiYl9QT1BVTkRFUiIsIndlaWdodCI6IjU5IiwiZmNhcCI6IjIiLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjpmYWxzZSwibWluV2lkdGgiOiI3NjgiLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPHNjcmlwdCB0eXBlPSd0ZXh0XC9qYXZhc2NyaXB0JyBzcmM9J1wvXC9pbmNyZWFzaW5nbHljb2Nrcm9hY2hwb2xpY3kuY29tXC9kZVwvYzhcL2Y0XC9kZWM4ZjRlZjNjMmRlODQ1YTdhZDQwMGZlZWE3ODBlMy5qcyc+PFwvc2NyaXB0PiJ9LHsiaWQiOiJjbGljX2JfUE9QVU5ERVIiLCJhZHNwb3QiOiJiX1BPUFVOREVSIiwid2VpZ2h0IjoiNjAiLCJmY2FwIjoiMiIsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOmZhbHNlLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IGRhdGEtY2Zhc3luYz1cImZhbHNlXCIgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIiBzcmM9XCJcL1wvMmNuanVoMzRqYnBvaW50LmNvbVwvdFwvOVwvZnJldFwvbWVvdzRcLzQ3MDkxNlwvYnJ0LmpzXCI+PFwvc2NyaXB0PiJ9LHsiaWQiOiJqYXZfYl9QT1BVTkRFUiIsImFkc3BvdCI6ImJfUE9QVU5ERVIiLCJ3ZWlnaHQiOiI1MiIsImZjYXAiOiIxIiwic2NoZWR1bGUiOmZhbHNlLCJtYXhXaWR0aCI6ZmFsc2UsIm1pbldpZHRoIjpmYWxzZSwidGltZXpvbmUiOmZhbHNlLCJleGNsdWRlIjpmYWxzZSwiZG9tYWluIjpmYWxzZSwiY29kZSI6IjxzY3JpcHQ+XHJcbiQoZG9jdW1lbnQuYm9keSkub24oXCJjbGlja1wiLCBmdW5jdGlvbihldmVudCkge1xyXG4gIHdpbmRvdy5vcGVuKFwiaHR0cHM6XC9cL3RlbGxtZS5wd1wvZ29cL2phdlwiKTtcclxuICAkKHRoaXMpLm9mZihcImNsaWNrXCIpO1xyXG59KTtcclxuPFwvc2NyaXB0PiJ9LHsiaWQiOiJwb3BjX2JfUE9QVU5ERVIiLCJhZHNwb3QiOiJiX1BPUFVOREVSIiwid2VpZ2h0IjoiNTciLCJmY2FwIjoiMSIsInNjaGVkdWxlIjpbIjEiLDAsIjEiLDAsIjEiLDAsIjEiXSwibWF4V2lkdGgiOmZhbHNlLCJtaW5XaWR0aCI6Ijc2OCIsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IHR5cGU9XCJ0ZXh0XC9qYXZhc2NyaXB0XCI+XHJcbiB2YXIgcCQwMGEgPSAncCQwMGEnICsgKG5ldyBEYXRlKCkuZ2V0VGltZSgpKSArICd6eic7IHdpbmRvd1twJDAwYV0gPSB7YTonYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5NHloMXF1ZHJvY2VpbnN0MG02ZjhscHg5YnozN2o1Z3ZrMndhJywgYjone1wiQVpJYlwiOlwiN3YyZ3Y3XCIsIFwiQlZJYlwiOlwia2p2NzJ2XCIsIFwiQ1hycjFcIjpcImxzMXE2XCIsIFwiREx0YWdcIjpcIjdcIiwgXCJFbWprNVwiOlwiXCIsIFwiWENnZTFzXCI6XCJ1cTFmYi45YnpcIiAsIFwiWnQxXCI6XCIwdDBoNGZyLnNxOFwiLCBcIlpaMVwiOlwiczBoNDEuaHRuXCIgfScsIGM6J3tcIkFia3IyMjFcIjpcImZoNm8wOFwiLCBcIkJvOXNzbVwiOlwiXC9cL2gxcy51cTFmYi45YnpcLzQwMC5jZlwifScsIGQ6J3tcIkFnNFwiOlwieXQxYlwiLCBcIkJ4MVwiOlwiNDAwcXMxQ3JvaTFcIiwgXCJDa3lcIjpcImY2aFwiLCBcIkRtZ1wiOlwiaDZxNDhxRWlxbnFzOFwifSd9O1xyXG52YXIgXzB4NWQ0Yj1bJzIzNTkxM1FWZmJ3dicsJ3NsaWNlJywnbGVuZ3RoJywnMTYyMjA5UUJtQW1WJywnMTQyMzhoeU9PVHEnLCczMjMyMDdEVGJpZmgnLCdzcGxpdCcsJzFEcWlLdHEnLCcxMzU4NjZIVGJhdkInLCdpbmRleE9mJywnY2FsbCcsJzI3NjU0U0tYSGJZJywncGFyc2UnLCd1bmRlZmluZWQnLCczMklqY2tteicsJ2tleXMnLCdtYXAnLCdjZWlsJywnMTE1OTgwaGNGVkR5JywndmFsdWVzJywnam9pbiddO3ZhciBfMHgyMDhjPWZ1bmN0aW9uKF8weDMxYThkNyxfMHg1ZjM2YjMpe18weDMxYThkNz1fMHgzMWE4ZDctMHgxNjc7dmFyIF8weDVkNGJlMT1fMHg1ZDRiW18weDMxYThkN107cmV0dXJuIF8weDVkNGJlMTt9OyhmdW5jdGlvbihfMHgyNzZmOTQsXzB4NTdjNGZmKXt2YXIgXzB4NTAwNTdjPV8weDIwOGM7d2hpbGUoISFbXSl7dHJ5e3ZhciBfMHg0MGQxODQ9cGFyc2VJbnQoXzB4NTAwNTdjKDB4MTY4KSkrcGFyc2VJbnQoXzB4NTAwNTdjKDB4MTZmKSkqcGFyc2VJbnQoXzB4NTAwNTdjKDB4MTc5KSkrLXBhcnNlSW50KF8weDUwMDU3YygweDE3NikpK3BhcnNlSW50KF8weDUwMDU3YygweDE3MykpK3BhcnNlSW50KF8weDUwMDU3YygweDE2ZSkpKy1wYXJzZUludChfMHg1MDA1N2MoMHgxNzApKStwYXJzZUludChfMHg1MDA1N2MoMHgxNmIpKSotcGFyc2VJbnQoXzB4NTAwNTdjKDB4MTcyKSk7aWYoXzB4NDBkMTg0PT09XzB4NTdjNGZmKWJyZWFrO2Vsc2UgXzB4Mjc2Zjk0WydwdXNoJ10oXzB4Mjc2Zjk0WydzaGlmdCddKCkpO31jYXRjaChfMHg0MTE4MzYpe18weDI3NmY5NFsncHVzaCddKF8weDI3NmY5NFsnc2hpZnQnXSgpKTt9fX0oXzB4NWQ0YiwweDQ1MTExKSxmdW5jdGlvbigpe3ZhciBfMHgxYmEyNzQ9ZnVuY3Rpb24oXzB4MmYzYTlhKXt2YXIgXzB4M2YwYmM0PV8weDIwOGMsXzB4MTg5NGJhPU1hdGhbXzB4M2YwYmM0KDB4MTY3KV0odGhpc1snYSddW18weDNmMGJjNCgweDE2ZCldXC8weDIpLF8weDUzOTU0OD10aGlzWydhJ11bXzB4M2YwYmM0KDB4MTZjKV0oMHgwLF8weDE4OTRiYSksXzB4NWQ4MDA5PXRoaXNbJ2EnXVtfMHgzZjBiYzQoMHgxNmMpXShfMHgxODk0YmEpO2RlY3J5cHQ9dGhpc1tfMHgyZjNhOWFdW18weDNmMGJjNCgweDE3MSldKCcnKVtfMHgzZjBiYzQoMHgxN2IpXShfMHgyOGY0MzM9Pnt2YXIgXzB4ZDc2MTJkPV8weDNmMGJjNDtyZXR1cm4gXzB4NWQ4MDA5WydzcGxpdCddKCcnKVsnaW5jbHVkZXMnXShfMHgyOGY0MzMpP18weDUzOTU0OFtfMHg1ZDgwMDlbXzB4ZDc2MTJkKDB4MTc0KV0oXzB4MjhmNDMzKV06XzB4MjhmNDMzO30pW18weDNmMGJjNCgweDE2YSldKCcnKTt0cnl7cmV0dXJuIEpTT05bXzB4M2YwYmM0KDB4MTc3KV0oZGVjcnlwdCk7fWNhdGNoe3JldHVybiBkZWNyeXB0O319LF8weDU3YmI4NT13aW5kb3dbcCQwMGFdLF8weDIxOWQ5Nz1mdW5jdGlvbihfMHgyOGVmYWMsXzB4MjJhMDMxKXt2YXIgXzB4NWJlZThlPV8weDIwOGMsXzB4Mzk2M2EwPU9iamVjdFtfMHg1YmVlOGUoMHgxNjkpXShfMHgxYmEyNzRbXzB4NWJlZThlKDB4MTc1KV0oXzB4NTdiYjg1LE9iamVjdFtfMHg1YmVlOGUoMHgxN2EpXShfMHg1N2JiODUpW18weDI4ZWZhY10pKTtyZXR1cm4gdHlwZW9mIF8weDIyYTAzMSE9XzB4NWJlZThlKDB4MTc4KT9fMHgzOTYzYTBbXzB4MjJhMDMxXTpfMHgzOTYzYTA7fTt3aW5kb3dbcCQwMGFdWyd4J109ZnVuY3Rpb24oKXtyZXR1cm4gXzB4MjE5ZDk3KDB4MSk7fTt2YXIgXzB4ZjFkYjU3PWRvY3VtZW50W18weDIxOWQ5NygweDMsMHgzKV0oXzB4MjE5ZDk3KDB4MiwweDApKTtfMHhmMWRiNTdbXzB4MjE5ZDk3KDB4MywweDIpXT1fMHgyMTlkOTcoMHgyLDB4MSksZG9jdW1lbnRbXzB4MjE5ZDk3KDB4MywweDApXVtfMHgyMTlkOTcoMHgzLDB4MSldKF8weGYxZGI1NykscCQwMGE9dW5kZWZpbmVkO30oKSk7XHJcbiBcclxuIDxcL3NjcmlwdD4ifV0=